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
- Diagnostics
- Code actions
- Intrinsics modules
Completion
----------
.. image:: ../assets/lsp/completion-ani.gif
.. image:: ../assets/lsp/completion.png
Hover
-------
.. image:: ../assets/lsp/hover.png
.. image:: ../assets/lsp/hover2.png
Symbols
------------
Project-wide and single Document symbol search
.. image:: ../assets/lsp/symbols-workspace.png
.. image:: ../assets/lsp/symbols-doc.png
Signature Help
----------------
.. image:: ../assets/lsp/sig-help.gif
Find References
------------------
.. figure:: ../assets/lsp/definition-goto.gif
:align: left
*Go To Definition of a function*
.. figure:: ../assets/lsp/definition-peek.png
:align: left
*Peek into the Definition of a function*
.. figure:: ../assets/lsp/references-peek.png
:align: left
*Peek into all the References of a function*
Renaming
------------
.. figure:: ../assets/lsp/rename.gif
:align: left
*Rename a variable*
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
Intrinsics Modules
------------------
- ``ISO_FORTRAN_ENV``, ``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
All LSP Requests
--------------------
.. list-table:: tmp
:header-rows: 1
* - 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