fortls


Namefortls JSON
Version 2.13.0 PyPI version JSON
download
home_pagehttps://gnikit.github.io/fortls
Summaryfortls - Fortran Language Server
upload_time2022-08-30 11:34:58
maintainer
docs_urlNone
authorGiannis Nikiteas
requires_python>=3.7
licenseMIT
keywords fortran language server language server protocol lsp fortls
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            ![alt](https://raw.githubusercontent.com/gnikit/fortls/master/assets/logo.png)

# fortls - Fortran Language Server

![PyPI](https://img.shields.io/pypi/v/fortls?style=flat-square)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fortls?style=flat-square)
[![PyPi Downloads via PePy](https://img.shields.io/badge/dynamic/json?style=flat-square&color&maxAge=86400&label=PyPi%20Downloads&query=%24.total_downloads&url=https%3A%2F%2Fapi.pepy.tech%2Fapi%2Fprojects%2Ffortls)](https://pepy.tech/project/fortls)
![Conda](https://img.shields.io/conda/dn/conda-forge/fortls?label=Anaconda&style=flat-square)
![GitHub License](https://img.shields.io/github/license/gnikit/fortls?style=flat-square)
![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/gnikit/fortls/Tests/master?label=CI&style=flat-square)
![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/gnikit/fortls/Docs/master?label=Docs&style=flat-square)
![Codecov](https://img.shields.io/codecov/c/github/gnikit/fortls?style=flat-square)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/psf/black)
![GitHub Repo stars](https://img.shields.io/github/stars/gnikit/fortls?color=yellow&style=flat-square)

[<img alt="https://github.com/sponsors/gnikit" src="https://img.shields.io/static/v1?style=social&label=Sponsor&message=%E2%9D%A4&logo=GitHub&color&link=%3Curl%3E" height="30" />](https://github.com/sponsors/gnikit)
[<img alt="https://paypal.me/inikit" src="https://img.shields.io/static/v1?style=social&label=Donate&message=%E2%9D%A4&logo=Paypal&color&link=%3Curl%3E" height="30" />](https://paypal.me/inikit)

![alt](https://raw.githubusercontent.com/gnikit/fortls/master/assets/animations/intro-demo.gif)

`fortls` is an implementation of the [Language Server Protocol](https://github.com/Microsoft/language-server-protocol)
(LSP) for Fortran using Python (3.7+).

All code editors that support LSP can integrate with `fortls` see the section
[Editor Integration](https://gnikit.github.io/fortls/editor_integration.html#editor-integration) in the documentation.
Some supported code editors include:
[Visual Studio Code](https://gnikit.github.io/fortls/editor_integration.html#visual-studio-code),
[Atom](https://gnikit.github.io/fortls/editor_integration.html#atom),
[Sublime Text](https://gnikit.github.io/fortls/editor_integration.html#sublime-text),
[(Neo)Vim](https://gnikit.github.io/fortls/editor_integration.html#vim-neovim-gvim),
and [Emacs](https://gnikit.github.io/fortls/editor_integration.html#emacs).

## Features

- Project-wide and Document symbol detection and Renaming
- Hover support, Signature help and Auto-completion
- GoTo/Peek implementation and Find/Peek references
- Preprocessor support
- Documentation parsing ([Doxygen](http://www.doxygen.org/) and
  [FORD](https://github.com/Fortran-FOSS-Programmers/ford) styles)
- Access to multiple intrinsic modules and functions
  - `ISO_FORTRAN_ENV` GCC 11.2.0
  - `IOS_C_BINDING` GCC 11.2.0
  - `IEEE_EXCEPTIONS`, `IEEE_ARITHMETIC`, `IEEE_FEATURES` GCC 11.2.0
  - OpenMP `OMP_LIB`, `OMP_LIB_KINDS` v5.0
  - OpenACC `OPENACC`, `OPENACC_KINDS` v3.1
- Diagnostics
  - Multiple definitions with the same variable name
  - Variable definition masks definition from parent scope
  - Missing subroutine/function arguments
  - Unknown user-defined type used in `TYPE`/`CLASS` definition
    (only if visible in project)
  - Unclosed blocks/scopes
  - Invalid scope nesting
  - Unknown modules in `USE` statement
  - Unimplemented deferred type-bound procedures
  - Use of non-imported variables/objects in interface blocks
  - Statement placement errors (`CONTAINS`, `IMPLICIT`, `IMPORT`)
- Code actions
  - Generate type-bound procedures and implementation templates for
    deferred procedures

### Notes/Limitations

- Signature help and hover does not handle elegantly overloaded functions i.e. interfaces

## `fortls` vs `fortran-language-server`

This project was originally based on `fortran-language-server` LSP implementation, but the two projects have since diverged.

`fortls` (this project) is now developed independently of the upstream `hansec/fortran-language-server` project and contains numerous new features and bug fixes
the original `fortran-language-server` does not.

For a complete and detailed list of the differences between the two Language Servers
see the Documentation section: [Unique fortls features (not in fortran-language-server)](https://gnikit.github.io/fortls/fortls_changes.html)

The name of executable for this project has been chosen to remain `fortls`
to allow for integration with pre-existing plugins and workflows, but it could
change in the future.

## Installation

### PyPi

```sh
pip install fortls
```

### Anaconda

```sh
conda install -c conda-forge fortls
```

for more information about the Anaconda installation [see](https://github.com/conda-forge/fortls-feedstock#about-fortls)

### Common installation problems

It is **NOT** recommended having `fortls` and `fortran-language-server`
simultaneously installed, since they use the same binary name. If you are having trouble
getting `fortls` to work try uninstalling `fortran-language-server` and reinstalling `fortls`.

With `pip`

```sh
pip uninstall fortran-language-server
pip install fortls --upgrade
```

or with Anaconda

```sh
conda uninstall fortran-language-server
conda install -c conda-forge fortls
```

## Settings

`fortls` can be configured through both the command line e.g.
`fortls --hover_signature` or through a Configuration json file.
The two interfaces are identical and a full list of the available options can
be found in the [Documentation](https://gnikit.github.io/fortls/options.html)
or through `fortls -h`

An example for a Configuration file is given below

```json
{
  "incremental_sync": true,
  "lowercase_intrinsics": true,
  "hover_signature": true,
  "use_signature_help": true,
  "excl_paths": ["tests/**", "tools/**"],
  "excl_suffixes": ["_skip.f90"],
  "include_dirs": ["include/**"],
  "pp_suffixes": [".F90", ".h"],
  "pp_defs": { "HAVE_HDF5": "", "MPI_Comm": "integer" }
}
```

## Implemented server requests

| Request                          | Description                                            |
| -------------------------------- | ------------------------------------------------------ |
| `workspace/symbol`               | Get workspace-wide symbols                             |
| `textDocument/documentSymbol`    | Get document symbols e.g. functions, subroutines, etc. |
| `textDocument/completion`        | Suggested tab-completion when typing                   |
| `textDocument/signatureHelp`     | Get signature information at a given cursor position   |
| `textDocument/definition`        | GoTo definition/Peek definition                        |
| `textDocument/references`        | Find all/Peek references                               |
| `textDocument/documentHighlight` | Same as `textDocument/references`                      |
| `textDocument/hover`             | Show messages and signatures upon hover                |
| `textDocument/implementation`    | GoTo implementation/Peek implementation                |
| `textDocument/rename`            | Rename a symbol across the workspace                   |
| `textDocument/didOpen`           | Document synchronisation upon opening                  |
| `textDocument/didSave`           | Document synchronisation upon saving                   |
| `textDocument/didClose`          | Document synchronisation upon closing                  |
| `textDocument/didChange`         | Document synchronisation upon changes to the document  |
| `textDocument/codeAction`        | **Experimental** Generate code                         |

## Acknowledgements

This project would not have been possible without the original work of [@hansec](https://github.com/hansec/)
in [`fortran-language-server`](https://github.com/hansec/fortran-language-server)

<!-- ## Support

If you want to support this project you can do it through

[![Alt](https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-150px.png)](https://paypal.me/inikit)
[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/gnikit) -->

## Bug reports

When [filing bugs](https://github.com/gnikit/fortls/issues/new)
please provide example code to reproduce the observed issue.

## Security Policy

To report a security vulnerability please follow the instructions in our
[Security page](https://github.com/gnikit/fortls/security/policy).

## License

This project is made available under the [MIT License](https://github.com/gnikit/fortls/blob/master/LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": "https://gnikit.github.io/fortls",
    "name": "fortls",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "fortran,language server,language server protocol,lsp,fortls",
    "author": "Giannis Nikiteas",
    "author_email": "giannis.nikiteas@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/38/04/db988efbcaac142999af91888e9750dfa422108a318ec3038c2cd42ecf04/fortls-2.13.0.tar.gz",
    "platform": null,
    "description": "![alt](https://raw.githubusercontent.com/gnikit/fortls/master/assets/logo.png)\n\n# fortls - Fortran Language Server\n\n![PyPI](https://img.shields.io/pypi/v/fortls?style=flat-square)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fortls?style=flat-square)\n[![PyPi Downloads via PePy](https://img.shields.io/badge/dynamic/json?style=flat-square&color&maxAge=86400&label=PyPi%20Downloads&query=%24.total_downloads&url=https%3A%2F%2Fapi.pepy.tech%2Fapi%2Fprojects%2Ffortls)](https://pepy.tech/project/fortls)\n![Conda](https://img.shields.io/conda/dn/conda-forge/fortls?label=Anaconda&style=flat-square)\n![GitHub License](https://img.shields.io/github/license/gnikit/fortls?style=flat-square)\n![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/gnikit/fortls/Tests/master?label=CI&style=flat-square)\n![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/gnikit/fortls/Docs/master?label=Docs&style=flat-square)\n![Codecov](https://img.shields.io/codecov/c/github/gnikit/fortls?style=flat-square)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/psf/black)\n![GitHub Repo stars](https://img.shields.io/github/stars/gnikit/fortls?color=yellow&style=flat-square)\n\n[<img alt=\"https://github.com/sponsors/gnikit\" src=\"https://img.shields.io/static/v1?style=social&label=Sponsor&message=%E2%9D%A4&logo=GitHub&color&link=%3Curl%3E\" height=\"30\" />](https://github.com/sponsors/gnikit)\n[<img alt=\"https://paypal.me/inikit\" src=\"https://img.shields.io/static/v1?style=social&label=Donate&message=%E2%9D%A4&logo=Paypal&color&link=%3Curl%3E\" height=\"30\" />](https://paypal.me/inikit)\n\n![alt](https://raw.githubusercontent.com/gnikit/fortls/master/assets/animations/intro-demo.gif)\n\n`fortls` is an implementation of the [Language Server Protocol](https://github.com/Microsoft/language-server-protocol)\n(LSP) for Fortran using Python (3.7+).\n\nAll code editors that support LSP can integrate with `fortls` see the section\n[Editor Integration](https://gnikit.github.io/fortls/editor_integration.html#editor-integration) in the documentation.\nSome supported code editors include:\n[Visual Studio Code](https://gnikit.github.io/fortls/editor_integration.html#visual-studio-code),\n[Atom](https://gnikit.github.io/fortls/editor_integration.html#atom),\n[Sublime Text](https://gnikit.github.io/fortls/editor_integration.html#sublime-text),\n[(Neo)Vim](https://gnikit.github.io/fortls/editor_integration.html#vim-neovim-gvim),\nand [Emacs](https://gnikit.github.io/fortls/editor_integration.html#emacs).\n\n## Features\n\n- Project-wide and Document symbol detection and Renaming\n- Hover support, Signature help and Auto-completion\n- GoTo/Peek implementation and Find/Peek references\n- Preprocessor support\n- Documentation parsing ([Doxygen](http://www.doxygen.org/) and\n  [FORD](https://github.com/Fortran-FOSS-Programmers/ford) styles)\n- Access to multiple intrinsic modules and functions\n  - `ISO_FORTRAN_ENV` GCC 11.2.0\n  - `IOS_C_BINDING` GCC 11.2.0\n  - `IEEE_EXCEPTIONS`, `IEEE_ARITHMETIC`, `IEEE_FEATURES` GCC 11.2.0\n  - OpenMP `OMP_LIB`, `OMP_LIB_KINDS` v5.0\n  - OpenACC `OPENACC`, `OPENACC_KINDS` v3.1\n- Diagnostics\n  - Multiple definitions with the same variable name\n  - Variable definition masks definition from parent scope\n  - Missing subroutine/function arguments\n  - Unknown user-defined type used in `TYPE`/`CLASS` definition\n    (only if visible in project)\n  - Unclosed blocks/scopes\n  - Invalid scope nesting\n  - Unknown modules in `USE` statement\n  - Unimplemented deferred type-bound procedures\n  - Use of non-imported variables/objects in interface blocks\n  - Statement placement errors (`CONTAINS`, `IMPLICIT`, `IMPORT`)\n- Code actions\n  - Generate type-bound procedures and implementation templates for\n    deferred procedures\n\n### Notes/Limitations\n\n- Signature help and hover does not handle elegantly overloaded functions i.e. interfaces\n\n## `fortls` vs `fortran-language-server`\n\nThis project was originally based on `fortran-language-server` LSP implementation, but the two projects have since diverged.\n\n`fortls` (this project) is now developed independently of the upstream `hansec/fortran-language-server` project and contains numerous new features and bug fixes\nthe original `fortran-language-server` does not.\n\nFor a complete and detailed list of the differences between the two Language Servers\nsee the Documentation section: [Unique fortls features (not in fortran-language-server)](https://gnikit.github.io/fortls/fortls_changes.html)\n\nThe name of executable for this project has been chosen to remain `fortls`\nto allow for integration with pre-existing plugins and workflows, but it could\nchange in the future.\n\n## Installation\n\n### PyPi\n\n```sh\npip install fortls\n```\n\n### Anaconda\n\n```sh\nconda install -c conda-forge fortls\n```\n\nfor more information about the Anaconda installation [see](https://github.com/conda-forge/fortls-feedstock#about-fortls)\n\n### Common installation problems\n\nIt is **NOT** recommended having `fortls` and `fortran-language-server`\nsimultaneously installed, since they use the same binary name. If you are having trouble\ngetting `fortls` to work try uninstalling `fortran-language-server` and reinstalling `fortls`.\n\nWith `pip`\n\n```sh\npip uninstall fortran-language-server\npip install fortls --upgrade\n```\n\nor with Anaconda\n\n```sh\nconda uninstall fortran-language-server\nconda install -c conda-forge fortls\n```\n\n## Settings\n\n`fortls` can be configured through both the command line e.g.\n`fortls --hover_signature` or through a Configuration json file.\nThe two interfaces are identical and a full list of the available options can\nbe found in the [Documentation](https://gnikit.github.io/fortls/options.html)\nor through `fortls -h`\n\nAn example for a Configuration file is given below\n\n```json\n{\n  \"incremental_sync\": true,\n  \"lowercase_intrinsics\": true,\n  \"hover_signature\": true,\n  \"use_signature_help\": true,\n  \"excl_paths\": [\"tests/**\", \"tools/**\"],\n  \"excl_suffixes\": [\"_skip.f90\"],\n  \"include_dirs\": [\"include/**\"],\n  \"pp_suffixes\": [\".F90\", \".h\"],\n  \"pp_defs\": { \"HAVE_HDF5\": \"\", \"MPI_Comm\": \"integer\" }\n}\n```\n\n## Implemented server requests\n\n| Request                          | Description                                            |\n| -------------------------------- | ------------------------------------------------------ |\n| `workspace/symbol`               | Get workspace-wide symbols                             |\n| `textDocument/documentSymbol`    | Get document symbols e.g. functions, subroutines, etc. |\n| `textDocument/completion`        | Suggested tab-completion when typing                   |\n| `textDocument/signatureHelp`     | Get signature information at a given cursor position   |\n| `textDocument/definition`        | GoTo definition/Peek definition                        |\n| `textDocument/references`        | Find all/Peek references                               |\n| `textDocument/documentHighlight` | Same as `textDocument/references`                      |\n| `textDocument/hover`             | Show messages and signatures upon hover                |\n| `textDocument/implementation`    | GoTo implementation/Peek implementation                |\n| `textDocument/rename`            | Rename a symbol across the workspace                   |\n| `textDocument/didOpen`           | Document synchronisation upon opening                  |\n| `textDocument/didSave`           | Document synchronisation upon saving                   |\n| `textDocument/didClose`          | Document synchronisation upon closing                  |\n| `textDocument/didChange`         | Document synchronisation upon changes to the document  |\n| `textDocument/codeAction`        | **Experimental** Generate code                         |\n\n## Acknowledgements\n\nThis project would not have been possible without the original work of [@hansec](https://github.com/hansec/)\nin [`fortran-language-server`](https://github.com/hansec/fortran-language-server)\n\n<!-- ## Support\n\nIf you want to support this project you can do it through\n\n[![Alt](https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-150px.png)](https://paypal.me/inikit)\n[![\"Buy Me A Coffee\"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/gnikit) -->\n\n## Bug reports\n\nWhen [filing bugs](https://github.com/gnikit/fortls/issues/new)\nplease provide example code to reproduce the observed issue.\n\n## Security Policy\n\nTo report a security vulnerability please follow the instructions in our\n[Security page](https://github.com/gnikit/fortls/security/policy).\n\n## License\n\nThis project is made available under the [MIT License](https://github.com/gnikit/fortls/blob/master/LICENSE).\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "fortls - Fortran Language Server",
    "version": "2.13.0",
    "project_urls": {
        "Changes": "https://github.com/gnikit/fortls/blob/master/CHANGELOG.md",
        "Documentation": "https://gnikit.github.io/fortls",
        "Donate": "https://github.com/sponsors/gnikit",
        "Homepage": "https://gnikit.github.io/fortls",
        "Source Code": "https://github.com/gnikit/fortls",
        "Tracker": "https://github.com/gnikit/fortls/issues"
    },
    "split_keywords": [
        "fortran",
        "language server",
        "language server protocol",
        "lsp",
        "fortls"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "acea74e100561654d9589fd70fe0b87b5b53b894a34a0549235f9f99a8702e90",
                "md5": "895259f237edb4a8117de4c94371d730",
                "sha256": "85b42da62eba3f2048d740756ce944196bb36f867e0463f7917c4aa744aec34a"
            },
            "downloads": -1,
            "filename": "fortls-2.13.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "895259f237edb4a8117de4c94371d730",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 92546,
            "upload_time": "2022-08-30T11:34:56",
            "upload_time_iso_8601": "2022-08-30T11:34:56.533743Z",
            "url": "https://files.pythonhosted.org/packages/ac/ea/74e100561654d9589fd70fe0b87b5b53b894a34a0549235f9f99a8702e90/fortls-2.13.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3804db988efbcaac142999af91888e9750dfa422108a318ec3038c2cd42ecf04",
                "md5": "b48ded0a49d364cc029591547a16703d",
                "sha256": "23c5013e8dd8e1d65bf07be610d0827bc48aa7331a7a7ce13612d4c646d0db31"
            },
            "downloads": -1,
            "filename": "fortls-2.13.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b48ded0a49d364cc029591547a16703d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 6897238,
            "upload_time": "2022-08-30T11:34:58",
            "upload_time_iso_8601": "2022-08-30T11:34:58.743426Z",
            "url": "https://files.pythonhosted.org/packages/38/04/db988efbcaac142999af91888e9750dfa422108a318ec3038c2cd42ecf04/fortls-2.13.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-08-30 11:34:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gnikit",
    "github_project": "fortls",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "lcname": "fortls"
}
        
Elapsed time: 0.16009s