fortls - Fortran Language Server
Project description
fortls - the Fortran Language Server
fortls
is an implementation of the Language Server Protocol
(LSP) for Fortran using Python (3.7+).
Editor extensions that can integrate with fortls
to provide autocomplete and
other IDE-like functionality are available for
Visual Studio Code,
Atom,
Visual Studio,
(Neo)vim,
and Emacs.
fortls vs fortran-language-server
This project is based on @hansec's original Language Server 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 bug fixes and new features
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)
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 is
potentially subject to change.
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 and FORD styles)
- Access to multiple intrinsic modules and functions
ISO_FORTRAN_ENV
GCC 11.2.0IOS_C_BINDING
GCC 11.2.0IEEE_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 unimported variables/objects in interface blocks
- Statement placement errors (
CONTAINS
,IMPLICIT
,IMPORT
)
- Code actions (
textDocument/codeAction
) [Experimental]- Generate type-bound procedures and implementation templates for deferred procedures
Notes/Limitations
- Signature help is not available for overloaded subroutines/functions
- Diagnostics are only updated when files are saved or opened/closed
Installation
pip install 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
or through fortls -h
An example for a Configuration file is given below
{
"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 implementation/Peek implementation |
textDocument/references |
Find all/Peek references |
textDocument/rename |
Rename a symbol across the workspace |
textDocument/codeAction |
Experimental Generate code |
Acknowledgements
This project would not have been possible without the original work of @hansec
and the original fortran-language-server
Support
If you want to support this project you can do it through
Support the original project go here
Bug reports
When filing bugs please provide example code to reproduce the observed issue.
License
This project is made available under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.