配置选项¶
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.h
和 file.FYP
匹配文件,但不匹配 file.fyp
或 filefyp
。它也将匹配 file.inc
和 fileinc
,但不匹配 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
打印完整的结果对象而不是简化版本