![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"
}