fortls

fortls - Fortran Language Server

https://github.com/fortran-lang/fortls

Science Score: 64.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    4 of 30 committers (13.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.6%) to scientific vocabulary

Keywords

fortls fortran language-server-protocol lsp

Keywords from Contributors

meshing materials-science interpretability standards data-profilers datacleaner pipeline-testing hack hydrology materials-informatics
Last synced: 6 months ago · JSON representation ·

Repository

fortls - Fortran Language Server

Basic Info
Statistics
  • Stars: 306
  • Watchers: 10
  • Forks: 48
  • Open Issues: 50
  • Releases: 55
Topics
fortls fortran language-server-protocol lsp
Created over 4 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing Funding License Code of conduct Citation Codeowners Security

README.md

alt

fortls - Fortran Language Server

Powered by NumFOCUS PyPI PyPI - Python Version PyPI - Downloads Conda GitHub License GitHub Workflow Status GitHub Workflow Status Codecov Code style: black GitHub Repo stars DOI

alt

fortls is an implementation of the 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 in the documentation. Some supported code editors include: Visual Studio Code, Atom, Sublime Text, (Neo)Vim, and 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 and FORD styles)
  • Access to multiple intrinsic modules and functions
    • ISO_FORTRAN_ENV GCC 11.2.0
    • ISO_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

Documentation

The full documentation for fortls can be found at fortls.fortran-lang.org.

Installation

PyPi

sh pip install fortls

Anaconda

sh conda install -c conda-forge fortls

for more information about the Anaconda installation see

Common installation problems

It is NOT recommended having fortls and fortran-language-server simultaneously installed, since they use the same executable 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 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 |

Future plans

fortls has reached a point where it is feature complete and stable enough to be used in many modern Fortran projects without any issues. It does however still have fundamental limitations, namely its ability to understand all Fortran syntax and semantics that has been used throughout the 65+ years of the language. The good news is that we have a plan to address this issue!

We are excited to announce that we are working on creating a new Fortran Language Server based on the actively developed LFortran compiler 🎉. The new Language Server will be able to understand all Fortran syntax, be faster, and give more accurate autocompletion, hover and diagnostic information. That means we plan on investing any future funding on creating our new language server and ultimately creating a better user experience for everyone.

What about fortls?

Not to worry, fortls will continue to be here. We will keep fortls in active maintenance mode with bug fixes and new features from volunteer contributors, but otherwise we will be focusing our efforts into making the new language server using LFortran's parser a reality.

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)

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.

Acknowledgements

This project would not have been possible without the original work of @hansec in fortran-language-server

Support

You can support Fortran-lang as a whole by donating at Fortran-lang - NumFOCUS.

Bug reports

When filing bugs please provide example code to reproduce the observed issue.

Security Policy

To report a security vulnerability please follow the instructions in our Security page.

License

This project is made available under the MIT License.

Owner

  • Name: The Fortran Programming Language
  • Login: fortran-lang
  • Kind: organization

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: fortls - Fortran Language Server
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - family-names: Nikiteas
    name-suffix: Ioannis
    email: gnikit@duck.com
    affiliation: Imperial College London
    orcid: 'https://orcid.org/0000-0001-9811-9250'

GitHub Events

Total
  • Create event: 24
  • Release event: 3
  • Issues event: 33
  • Watch event: 51
  • Delete event: 23
  • Issue comment event: 72
  • Push event: 36
  • Pull request review event: 4
  • Pull request event: 57
  • Fork event: 11
Last Year
  • Create event: 24
  • Release event: 3
  • Issues event: 33
  • Watch event: 51
  • Delete event: 23
  • Issue comment event: 72
  • Push event: 36
  • Pull request review event: 4
  • Pull request event: 57
  • Fork event: 11

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 1,025
  • Total Committers: 30
  • Avg Commits per committer: 34.167
  • Development Distribution Score (DDS): 0.473
Past Year
  • Commits: 36
  • Committers: 4
  • Avg Commits per committer: 9.0
  • Development Distribution Score (DDS): 0.333
Top Committers
Name Email Commits
gnikit g****s@g****m 540
Chris Hansen h****c@u****u 371
pre-commit-ci[bot] 6****] 37
dependabot[bot] 4****] 22
Aljen Uitbeijerse a****e@v****l 8
Albert Ziegenhagel a****l@a****m 6
Randy Eckman r****n@n****v 4
JHenneberg H****g@r****e 3
Sergey M m****n@g****m 3
Tomoto Shimizu Washio t****o@g****m 3
Peter Hill p****l@y****k 3
Azzam Husain 6****5 3
Julian Andrej a****1@l****v 2
Andre Smit f****d@g****m 2
Philippe Blain l****n@g****m 2
JHenneberg J****g@g****m 2
Edmundod 2****d 1
ssnnoo 4****o 1
sanjay-cpu s****2@g****m 1
lixiang810 1****0 1
github-actions[bot] 4****] 1
gbogopolsky g****9@g****m 1
Sebastian Ehlert 2****k 1
Pål Levold P****d@s****o 1
PaulXiCao 2****o 1
Oskar Weser o****r@g****m 1
Ondřej Čertík o****j@c****s 1
Michael Konečný k****e@g****m 1
Julian Hofer j****t@m****g 1
Eisuke Kawashima e****m 1
Committer Domains (Top 20 + Academic)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 11,012 last-month
  • Total docker downloads: 30
  • Total dependent packages: 1
    (may contain duplicates)
  • Total dependent repositories: 2
    (may contain duplicates)
  • Total versions: 78
  • Total maintainers: 2
pypi.org: fortls

fortls - Fortran Language Server

  • Versions: 56
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 11,012 Last month
  • Docker Downloads: 30
Rankings
Downloads: 4.1%
Docker downloads count: 4.5%
Dependent packages count: 4.7%
Stargazers count: 5.2%
Forks count: 7.3%
Average: 7.9%
Dependent repos count: 21.7%
Maintainers (2)
Last synced: 6 months ago
conda-forge.org: fortls
  • Versions: 22
  • Dependent Packages: 0
  • Dependent Repositories: 1
Rankings
Dependent repos count: 24.2%
Stargazers count: 30.7%
Forks count: 34.6%
Average: 35.3%
Dependent packages count: 51.6%
Last synced: 6 months ago

Dependencies

.github/workflows/codeql-analysis.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/autobuild v2 composite
  • github/codeql-action/init v2 composite
.github/workflows/docs.yml actions
  • actions/checkout v3 composite
  • peaceiris/actions-gh-pages v3 composite
  • sphinx-toolbox/sphinx-action master composite
.github/workflows/main.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • codecov/codecov-action v3 composite
.github/workflows/python-publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • pypa/gh-action-pypi-publish release/v1 composite
  • softprops/action-gh-release master composite
.github/workflows/update-intrinsics.yml actions
  • actions/checkout v3 composite
  • peter-evans/create-pull-request v4 composite