Skip to main content

fortls - Fortran 语言服务器

项目描述

alt

fortls - Fortran 语言服务器

派皮 PyPI - Python 版本 通过 PePy 下载 PyPi 康达 GitHub 许可证 GitHub 工作流状态(分支) GitHub 工作流状态(分支) 编解码器 代码风格:黑色 GitHub 回购星星

https://github.com/sponsors/gnkit https://paypal.me/inikit

alt

fortls是 使用 Python (3.7+) 的 Fortran语言服务器协议(LSP) 的实现。

所有支持 LSP 的代码编辑器都可以集成,fortls请参阅 文档中的编辑器集成部分。一些受支持的代码编辑器包括: Visual Studio CodeAtomSublime Text(Neo)VimEmacs

特征

  • 项目范围和文档符号检测和重命名
  • 悬停支持、签名帮助和自动完成
  • GoTo/Peek 实现和 Find/Peek 参考
  • 预处理器支持
  • 文档解析(DoxygenFORD样式)
  • 访问多个内在模块和功能
    • ISO_FORTRAN_ENV海合会 11.2.0
    • IOS_C_BINDING海合会 11.2.0
    • IEEE_EXCEPTIONS, IEEE_ARITHMETIC, IEEE_FEATURESGCC 11.2.0
    • 开放MP OMP_LIB, OMP_LIB_KINDSv5.0
    • 开放式加速器OPENACC, OPENACC_KINDSv3.1
  • 诊断
    • 具有相同变量名的多个定义
    • 变量定义掩盖父范围的定义
    • 缺少子例程/函数参数
    • TYPE/定义中使用的未知用户定义类型CLASS(仅在项目中可见时)
    • 未封闭的块/范围
    • 无效的范围嵌套
    • USE语句中的未知模块
    • 未实现的延迟类型绑定过程
    • 在接口块中使用非导入变量/对象
    • 语句放置错误 ( CONTAINS, IMPLICIT, IMPORT)
  • 代码操作
    • 为延迟过程生成类型绑定过程和实现模板

注释/限制

  • 签名帮助和悬停不能处理优雅的重载函数,即接口

fortls对比fortran-language-server

该项目最初是基于fortran-language-serverLSP 实现的,但此后两个项目出现了分歧。

fortls(这个项目)现在独立于上游hansec/fortran-language-server项目开发,包含许多新功能和错误修复原始项目fortran-language-server没有。

有关两种语言服务器之间差异的完整详细列表,请参阅文档部分:独特的 fortls 功能(不在 fortran-language-server 中)

该项目的可执行文件名称已选择保留fortls ,以允许与预先存在的插件和工作流集成,但将来可能会更改。

安装

派皮

pip install fortls

蟒蛇

conda install -c conda-forge fortls

有关 Anaconda 安装的更多信息,请参见

常见安装问题

建议同时安装fortlsfortran-language-server 因为它们使用相同的二进制名称。如果您在开始工作时遇到问题,fortls请尝试卸载fortran-language-server并重新安装fortls.

pip

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

或与 Anaconda

conda 卸载 fortran 语言服务器
conda install -c conda-forge fortls

设置

fortls可以通过命令行(例如 fortls --hover_signature)或配置 json 文件进行配置。这两个界面是相同的,可用选项的完整列表可以在文档中找到 或通过fortls -h

下面给出了配置文件的示例

{
  "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" }
}

实现的服务器请求

要求 描述
workspace/symbol 获取工作区范围的符号
textDocument/documentSymbol 获取文档符号,例如函数、子程序等。
textDocument/completion 键入时建议的制表符补全
textDocument/signatureHelp 获取给定光标位置的签名信息
textDocument/definition GoTo 定义/Peek 定义
textDocument/references 查找所有/查看参考
textDocument/documentHighlight 如同textDocument/references
textDocument/hover 悬停时显示消息和签名
textDocument/implementation GoTo 实施/Peek 实施
textDocument/rename 跨工作区重命名符号
textDocument/didOpen 打开时文件同步
textDocument/didSave 保存时文件同步
textDocument/didClose 关闭时的文档同步
textDocument/didChange 文档更改时的文档同步
textDocument/codeAction 实验生成代码

致谢

如果没有@hansec的原创作品,这个项目是不可能实现 的fortran-language-server

错误报告

提交错误时 ,请提供示例代码以重现观察到的问题。

安全政策

要报告安全漏洞,请按照我们的 安全页面中的说明进行操作。

执照

这个项目是在MIT License下提供的。

项目详情