配置选项

fortls 可以通过命令行界面和/或配置文件(默认名为 .fortls)进行配置。命令行和配置文件中提供的选项相同且可以互换。

重要

配置文件中定义的选项优先于命令行参数。

以下部分将详细讨论可用的设置。

使用命令行进行配置

fortls - Fortran 语言服务器

usage: fortls [options] [debug options]

命名参数

-v, --version

打印服务器版本号并退出

-c, --config

配置文件(默认文件名:‘.fortlsrc’,其他支持的默认名称:.fortls.json,.fortls)

-n, --nthreads

工作区初始化期间使用的线程数(默认值:4)

--notify_init

工作区初始化完成后发送通知消息

--incremental_sync

使用增量文档同步(测试版)

--recursion_limit

设置解析器的最大递归深度(默认值:1000)

--sort_keywords

以一致(排序)的方式显示变量关键字信息、函数/子程序定义等(默认值:不排序,按原样显示代码)

--disable_autoupdate

fortls 会自动检查 PyPi 以获取较新版本并安装它们。使用此选项禁用自动更新功能。

--preserve_keyword_order

已弃用,现在这是默认值。若要排序,请使用 sort_keywords

--debug_log

在项目根文件夹中生成调试日志

源文件解析选项

--source_dirs

包含源文件的文件夹(默认值:set())

--incl_suffixes

考虑除默认值之外的其他文件扩展名(默认值:.F、.F77、.F90、.F95、.F03、.F08、.FOR、.FPP(大小写))

--excl_suffixes

要排除的源文件扩展名(默认值:set())

--excl_paths

要从解析中排除的文件夹

自动完成选项

--autocomplete_no_prefix

不要根据变量前缀过滤自动完成结果

--autocomplete_no_snippets

不要在自动完成结果中使用带占位符的代码片段

--autocomplete_name_only

仅完成过程的名称,而不是参数

--lowercase_intrinsics

在自动完成请求中对内建函数和关键字使用小写

--use_signature_help

使用签名帮助而不是子程序/函数代码片段。这实际上设置了 –autocomplete_no_snippets

悬停选项

--variable_hover

已弃用:此选项始终开启。显示变量的悬停信息

--hover_signature

在参数的悬停中显示签名信息

--hover_language

用于悬停请求响应的语言,一个 VSCode 语言 ID(默认值:‘fortran90’)

诊断选项(错误波浪线)

--max_line_length

最大行长度(默认值:-1)

--max_comment_line_length

最大注释行长度(默认值:-1)

--disable_diagnostics

禁用诊断

预处理器选项

--pp_suffixes

仅为预处理器命令解析的文件扩展名(默认值:所有大写源文件后缀)

--include_dirs

包含具有 PP_SUFFIXES 扩展名的预处理器文件的文件夹。

--pp_defs

包含其他预处理器定义的字典。预处理器定义通常通过 INCLUDE_DIRS 包含

符号选项

--symbol_skip_mem

不要在文档符号结果中包含类型成员

代码操作选项 [有限]

--enable_code_actions

启用实验性代码操作(默认值:false)

所有以 ‘–’ 开头的选项也可以在配置文件中设置,默认名为 ‘.fortlsrc’、‘.fortls.json’ 或 ‘.fortls’(其他名称/路径可以通过 -c 或 –config 指定)。有关更多详细信息,请参阅我们的文档:https://fortls.fortran-lang.cn/options.html#available-options

使用文件进行配置

配置文件是一个 JSONC(带注释的 JSON)文件,其中包含 fortls 的项目特定设置。默认情况下,语言服务器将识别项目 root_path 下的 3 个默认名称 .fortlsrc.fortls.json.fortls(按此顺序),例如 root_path/.fortlsrc。可以使用命令行界面选项 --config 传递不同的配置文件名,例如 fortls --config my_project.json

配置文件中可以指定的设置与通过命令行界面提供的设置相同,已删除了前导 -- 字符。有关命令行界面,请参阅 使用命令行进行配置

可用选项

下面可以找到所有 fortls 设置及其默认参数

{
   "nthreads": 4,
   "notify_init": false,
   "incremental_sync": false,
   "recursion_limit": 1000,
   "sort_keywords": false,
   "disable_autoupdate": false,
   "debug_log": false,

   "source_dirs": ["./**"],
   "incl_suffixes": [],
   "excl_suffixes": [],
   "excl_paths": [],

   "autocomplete_no_prefix": false,
   "autocomplete_no_snippets": false,
   "autocomplete_name_only": false,
   "lowercase_intrinsics": false,
   "use_signature_help": false,

   "hover_signature": false,
   "hover_language": "fortran90",

   "max_line_length": -1,
   "max_comment_line_length": -1,
   "disable_diagnostics": false,

   "pp_suffixes": [],
   "include_dirs": [],
   "pp_defs": {},

   "symbol_skip_mem": false,

   "enable_code_actions": false
}

源文件解析

source_dirs

{
   "source_dirs": ["./**", "/external/fortran/src"]
}

默认情况下,当前项目下的所有目录都将被递归解析以查找 Fortran 源文件。或者,可以定义一系列目录供 fortls 查找源文件

注意

允许使用 glob fnmatch 样式模式

incl_suffixes

{
   "incl_suffixes": [".h", ".FYP", "inc"]
}

fortls 仅解析 source_dirs 中找到的具有 incl_suffixes 扩展名的文件。使用上面的示例,fortls 将通过 file.hfile.FYP 匹配文件,但不匹配 file.fypfilefyp。它也将匹配 file.incfileinc,但不匹配 file.inc2

默认情况下,incl_suffixes 定义为 .F .f .F03 .f03 .F05 .f05 .F08 .f08 .F18 .f18 .F77 .f77 .F90 .f90 .F95 .f95 .FOR .for .FPP .fpp。可以在 incl_suffixes 中定义其他源文件扩展名。

注意

默认文件扩展名不能被覆盖。incl_suffixes 仅附加到默认扩展名。

excl_suffixes

{
   "excl_suffixes": ["_tmp.f90", "_hdf5.F90"]
}

如果某些文件或后缀不需要解析,可以通过 deffining excl_suffixes 将其排除

excl_paths

可以通过将整个目录包含在 excl_paths 中将其从解析中排除。

注意

允许使用 glob fnmatch 样式模式

excl_paths 使用 glob 模式,因此如果您想排除一个目录及其所有子目录被解析,则应将其定义如下

{
   "excl_paths": ["exclude_dir/**"]
}

预处理器

pp_suffixes

{
   "pp_suffixes" : [".h", ".F90", ".fpp"]
}

默认情况下,预处理器定义将为所有具有大写扩展名的 Fortran 源文件进行解析,例如 .F90.F.F08 等。但是,可以通过定义 pp_defs 覆盖默认行为。

include_dirs

{
   "include_dirs": ["include", "preprocessor", "/usr/include"]
}

默认情况下,fortls 将扫描项目的目录以查找具有扩展名 PP_SUFFIXES 的文件,以解析 **预处理器定义**。但是,如果预处理器文件位于项目外部,则可以通过 include_dirs 指定其位置。

注意

允许使用 glob fnmatch 样式模式

警告

include_dirs 中检测到的源文件不会被解析为 Fortran 对象,除非它们也包含在 source_dirs 中。

pp_defs

{
   "pp_defs": {
      "HAVE_PETSC": ""
      "Mat": "type(tMat)"
   }
}

可以在 pp_defs 中定义在 include_dirs 中找到的文件中指定的 **预处理器定义** 之外的其他定义。

注意

pp_defs 中的定义将覆盖来自 include_dirs 的定义

限制

  • 递归替换不可用,例如:

    #define VAR1 10
    #define VAR2 VAR1
    

调试选项(仅限命令行)

用于调试语言服务器的选项

  • --debug_filepath DEBUG_FILEPATH 语言服务器测试的文件路径

  • --debug_rootpath DEBUG_ROOTPATH 语言服务器测试的根路径

  • --debug_parser 在指定的文件上测试源代码解析器

  • --debug_preproc 在指定的文件上测试预处理器

  • --debug_hover 测试指定文件和位置的 textDocument/hover 请求

  • --debug_rename RENAME_STRING 测试指定文件和位置的 textDocument/rename 请求

  • --debug_actions 测试指定文件和位置的 textDocument/codeAction 请求

  • --debug_symbols 测试指定文件的 textDocument/documentSymbol 请求

  • --debug_completion 测试指定文件和位置的 textDocument/completion 请求

  • --debug_signature 测试指定文件和位置的 textDocument/signatureHelp 请求

  • --debug_definition 测试指定文件和位置的 textDocument/definition 请求

  • --debug_references 测试指定文件和位置的 textDocument/references 请求

  • --debug_diagnostics 测试指定文件的诊断通知

  • --debug_implementation 测试指定文件和位置的 textDocument/implementation 请求

  • --debug_workspace_symbols QUERY_STRING 测试 workspace/symbol 请求

  • --debug_line INTEGER 语言服务器测试的行位置(从 1 开始索引)

  • --debug_char INTEGER 语言服务器测试的字符位置(从 1 开始索引)

  • --debug_full_result 打印完整的结果对象而不是简化版本