fortls.parsers.internal 包

子模块

fortls.parsers.internal.associate 模块

class fortls.parsers.internal.associate.Associate(file_ast, line_number, name)

基类: Block

create_binding_variable(file_ast, line_number, bind_name, link_name)

创建一个新的变量,在解析时链接到包含从父作用域到 ASSOCIATE 块作用域的映射信息的真实变量。

参数:
  • file_ast (fortran_ast) – AST 文件

  • line_number (int) – 行号

  • bind_name (str) – ASSOCIATE 块变量的名称

  • link_name (str) – 父作用域变量的名称

返回值:

保存 ASSOCIATE 块变量的变量对象,等待解析

返回类型:

fortran_var

get_desc()
get_type(no_link=False)
class fortls.parsers.internal.associate.AssociateMap(var, bind_name, link_name)

基类: object

bind_name: str
var: Variable

fortls.parsers.internal.ast 模块

class fortls.parsers.internal.ast.FortranAST(file_obj=None)

基类: object

add_doc(doc_string, forward=False)
add_error(msg, sev, ln, sch, ech=None)

添加在解析过程中遇到的诊断错误,用于文档中的一个范围。

参数:
  • msg (str) – 错误信息

  • sev (int) – 严重程度,错误、警告、通知

  • ln (int) – 行号

  • sch (int) – 起始字符

  • ech (int) – 结束字符

add_include(path, line_number)
add_int_member(key)
add_private(name)
add_public(name)
add_scope(new_scope, end_scope_regex, exportable=True, req_container=False)
add_use(use_mod)
add_variable(new_var)
check_file(obj_tree)
close_file(line_number)
create_none_scope()

创建空作用域以保存非模块包含的项

end_ppif(line_number)
end_scope(line_number, check=True)
get_enc_scope_name()

获取当前封闭作用域名称

get_inner_scope(line_number)
get_object(FQSN)
get_scopes(line_number=None)

获取提供的行号中存在的所有作用域的列表。

参数:

line_number (int, 可选) – 文档行号,如果为 None 则返回所有文档作用域,默认为 None

返回值:

作用域列表

返回类型:

VariableTypeFunctionSubroutineModuleProgramInterface,BlockData

resolve_includes(workspace, path=None)
start_ppif(line_number)

fortls.parsers.internal.base 模块

class fortls.parsers.internal.base.FortranObj

基类: object

add_doc(doc_str)
check_definition(obj_tree, known_types=None, interface=False)
check_valid_parent()
end(line_number)
get_actions(sline, eline)
get_ancestors()
get_children(public_only=False)
get_desc()
get_diagnostics()
get_documentation()
get_hover(long=False, drop_arg=-1)
返回类型:

tuple[str | None, str | None]

get_hover_md(long=False, drop_arg=-1)
返回类型:

str

get_implicit()
get_interface(name_replace=None, drop_arg=-1, change_strings=None)
get_signature(drop_arg=-1)
get_snippet(name_replace=None, drop_arg=-1)
get_type(no_link=False)
get_type_obj(obj_tree)
is_abstract()
is_callable()
is_external_int()
is_mod_scope()
is_optional()
req_named_end()
require_inherit()
resolve_inherit(obj_tree, inherit_version)
set_default_vis(new_vis)
set_parent(parent_obj)
set_visibility(new_vis)
update_fqsn(enc_scope=None)

fortls.parsers.internal.block 模块

class fortls.parsers.internal.block.Block(file_ast, line_number, name)

基类:Scope

get_children(public_only=False)
get_desc()
get_type(no_link=False)
req_named_end()

fortls.parsers.internal.diagnostics 模块

class fortls.parsers.internal.diagnostics.Diagnostic(sline, message, severity=1, find_word=None)

基类: object

build(file_obj)

fortls.parsers.internal.do 模块

class fortls.parsers.internal.do.Do(file_ast, line_number, name)

基类: Block

get_desc()
get_type(no_link=False)

fortls.parsers.internal.enum 模块

class fortls.parsers.internal.enum.Enum(file_ast, line_number, name)

基类: Block

get_desc()
get_type(no_link=False)

fortls.parsers.internal.function 模块

class fortls.parsers.internal.function.Function(file_ast, line_number, name, args='', mod_flag=False, keywords=None, keyword_info=None, result_type=None, result_name=None)

基类:Subroutine

copy_interface(copy_source)
get_desc()
get_hover(long=False, drop_arg=-1)

构建 FUNCTION 的悬停消息。此处生成两种形式,long 即悬停请求的正常形式

[修饰符] FUNCTION NAME([参数]) RESULT(结果变量)

TYPE,[参数修饰符] :: [参数] TYPE,[结果修饰符] :: 结果变量

注意:内在函数的显示略有不同,结果变量 及其 TYPE 可能并不总是存在

短格式,用于函数和子程序中的函数作为参数时

FUNCTION NAME([参数]) :: 参数列表名称

参数:
  • long (bool, 可选) – 在长悬停结果和短悬停结果之间切换,默认为 False

  • drop_arg (int, 可选) – 忽略参数列表中位置为 drop_arg 的参数,默认为 -1

返回值:

悬停消息的字符串表示形式以及使用的 long 标志

返回类型:

tuple[str, bool]

get_interface(name_replace=None, drop_arg=-1, change_strings=None)
get_type(no_link=False)
is_callable()

fortls.parsers.internal.if_block 模块

class fortls.parsers.internal.if_block.If(file_ast, line_number, name)

基类: Block

get_desc()
get_type(no_link=False)

fortls.parsers.internal.imports 模块

class fortls.parsers.internal.imports.Import(name, import_type=-1, only_list=None, rename_map=None, line_number=0)

基类:Use

IMPORT 语句的 AST 节点

property scope

IMPORT 语句的父作用域,即接口的父级

class fortls.parsers.internal.imports.ImportTypes

基类: object

ALL = 1
DEFAULT = -1
NONE = 0
ONLY = 2

fortls.parsers.internal.include 模块

class fortls.parsers.internal.include.Include(file_ast, line_number, name, keywords=None)

基类:Scope

get_desc()

fortls.parsers.internal.interface 模块

class fortls.parsers.internal.interface.Interface(file_ast, line_number, name, abstract=False)

基类:Scope

get_desc()
get_type(no_link=False)
is_abstract()
is_callable()
is_external_int()

fortls.parsers.internal.intrinsics 模块

class fortls.parsers.internal.intrinsics.Intrinsic(name, type, doc_str=None, args='', parent=None)

基类: FortranObj

get_desc()
get_hover(long=False)
get_hover_md(long=False)
get_signature()
get_snippet(name_replace=None, drop_arg=-1)
get_type()
is_callable()
fortls.parsers.internal.intrinsics.get_intrinsic_keywords(statements, keywords, context=-1)
fortls.parsers.internal.intrinsics.intrinsics_case(name, args)
fortls.parsers.internal.intrinsics.load_intrinsics()
fortls.parsers.internal.intrinsics.set_lowercase_intrinsics()
fortls.parsers.internal.intrinsics.update_m_intrinsics()

fortls.parsers.internal.method 模块

class fortls.parsers.internal.method.Method(file_ast, line_number, name, var_desc, keywords, keyword_info, proc_ptr='', link_obj=None)

基类: Variable

check_definition(obj_tree, known_types=None, interface=False)
get_documentation()
get_hover(long=False, drop_arg=-1)
返回类型:

tuple[str, str]

get_interface(name_replace=None, drop_arg=-1, change_strings=None)
get_signature(drop_arg=-1)
get_snippet(name_replace=None, drop_arg=-1)
get_type(no_link=False)
is_callable()
set_parent(parent_obj)

fortls.parsers.internal.module 模块

class fortls.parsers.internal.module.Module(file_ast, line_number, name, keywords=None)

基类:Scope

check_valid_parent()
返回类型:

布尔值

get_desc()
get_hover(long=False, drop_arg=-1)
返回类型:

tuple[str, str]

get_type(no_link=False)

fortls.parsers.internal.parser 模块

class fortls.parsers.internal.parser.FortranFile(path=None, pp_suffixes=None)

基类: object

apply_change(change)

将更改应用于文件。

返回类型:

布尔值

check_file(obj_tree, max_line_length=-1, max_comment_line_length=-1)
copy()

将内容复制到新的文件对象(不复制对象)

返回类型:

FortranFile

find_word_in_code_line(line_no, word, forward=True, backward=False, pp_content=False)
返回类型:

tuple[int, Range]

get_code_line(line_no, forward=True, backward=True, pp_content=False, strip_comment=False)

从文件获取完整的代码行,包括任何相邻的续行

返回类型:

tuple[list[str], str, list[str]]

get_comment_regexs()
返回类型:

tuple[Pattern[str], Pattern[str]]

get_docstring(ln, line, match, docs)

从当前文件位置提取完整的文档字符串

参数:
  • ln (int) – 行号

  • **line** (str) – 文档行,不一定由get_line()生成

  • **match** (Match[str]) – 正则表达式DOC匹配

  • **docs** (list[str]) – 待处理的文档字符串,例如单行文档字符串

返回值:

文档字符串末尾的新行号、文档字符串和一个布尔标志,指示文档字符串是在 AST 节点之前(Doxygen 样式)还是在 AST 节点之后(传统的 FORD 样式)。

返回类型:

tuple[int, list[str], bool]

get_fortran_definition(line)
get_line(line_no, pp_content=False)

从文件获取单行

返回类型:

str

get_single_line_docstring(line)

获取单行文档字符串。这对于传统 Fortran 和现代 Fortran 都是一样的

参数:

**line** (str) – 代码行

返回值:

包含文档字符串的列表。如果未找到匹配项或匹配项本身为空字符串,则列表为空。

返回类型:

列表[字符串]

load_from_disk()

从磁盘读取文件,或者仅当文件内容已更改时更新文件内容。使用 MD5 哈希来确定这一点。

返回值:

str:包含 IO 错误消息的字符串,否则为 None bool:布尔值,指示文件是否已更改

返回类型:

元组[字符串|None, 布尔值|None]

parse(debug=False, pp_defs=None, include_dirs=None)

解析 Fortran 文件中 fortran_file 对象的内容并构建抽象语法树 (AST)。

参数:
  • debug (布尔值, 可选) – 设置为 true 以启用调试,默认为 False

  • pp_defs (字典, 可选) – 预处理器定义及其值,默认为 None

  • include_dirs (集合, 可选) – 预处理器包含目录,默认为 None

返回值:

抽象语法树。

返回类型:

fortran_ast

parse_contains(line, ln, file_ast)

解析包含语句。

参数:
  • line (字符串) – 文档行

  • ln (int) – 行号

  • file_ast (fortran_ast) – AST 对象

返回值:

如果存在包含语句,则返回 True,否则返回 False。

返回类型:

布尔值

parse_do_fixed_format(line, ln, file_ast, line_label, block_id_stack)
parse_docs(line, ln, file_ast, docs)

解析 Doxygen 或 FORD 样式的文档字符串。如果第一个注释以 !> 开头,则会检测到多行文档字符串;文档字符串的延续通过 !>!<!! 检测。

参数:
  • line (字符串) – 文档行

  • ln (int) – 行号

  • file_ast (fortran_ast) – AST 对象

  • **docs** (list[str]) – 待处理的文档字符串,例如单行文档字符串

parse_end_scope_word(line, ln, file_ast, match)

解析表示作用域结束的 END 关键字。

参数:
  • line (字符串) – 文档行

  • ln (int) – 行号

  • file_ast (fortran_ast) – AST 对象

  • match (re.Match) – END 关键字正则表达式匹配结果。

返回值:

如果关闭了 AST 作用域,则返回 True,否则返回 False。

返回类型:

布尔值

parse_imp_char(line)

从变量中解析隐式字符长度,例如 var_name*10 或 var_name*(10)、var_name*(size(val, 1))。

参数:

line (字符串) – 包含潜在变量的行。

返回值:

截断的行,字符长度。

返回类型:

元组[字符串, 字符串]

parse_imp_dim(line)

解析数组的隐式维度,例如 var(3,4)、var_name(size(val,1)*10)。

参数:

line (字符串) – 包含变量名的行。

返回值:

截断的行,维度字符串。

返回类型:

元组[字符串, 字符串]

parse_implicit(line, ln, file_ast)

从一行中解析隐式语句。

参数:
  • line (字符串) – 文档行

  • ln (int) – 行号

  • file_ast (fortran_ast) – AST 对象

返回值:

如果存在 IMPLICIT 语句,则返回 True,否则返回 False。

返回类型:

布尔值

preprocess(pp_defs=None, include_dirs=None, debug=False)
返回类型:

元组[列表, 列表]

set_contents(contents_split, detect_format=True)

设置文件内容。

strip_comment(line)

从行中去除注释。

返回类型:

str

fortls.parsers.internal.parser.find_external(file_ast, desc_string, name, new_var)

查找已定义为 EXTERNAL 的过程、函数、子程序等。EXTERNAL 被解析为 fortran_var,因为无法知道 real, external :: val 是函数还是子程序。

此方法仅用于跨多行定义的 EXTERNAL,例如:

EXTERNAL VAR
REAL VAR

REAL VAR
EXTERNAL VAR
参数:
  • file_ast (fortran_ast) – AST

  • desc_string (字符串) – 变量类型,例如 REALINTEGEREXTERNAL

  • name (字符串) – 变量名

  • new_var (fortran_var) – 我们尝试将其与 EXTERNAL 定义匹配的行变量。

返回值:

如果变量是 EXTERNAL 并且我们设法将其链接到其其余组件,则返回 True,否则返回 False。

返回类型:

布尔值

fortls.parsers.internal.parser.find_external_attr(file_ast, name, new_var)

检查此普通 Fortran 变量是否在 external_objs 中,并且其类型仅为 EXTERNAL。用于检测分开的 EXTERNAL 声明。

参数:
  • file_ast (fortran_ast) – AST 文件

  • name (字符串) – 变量名,已去除空格。

  • new_var (fortran_var) – 要检查的 Fortran 变量。

返回值:

如果仅遇到单个 EXTERNAL 定义,则返回 True;对于其他所有情况,返回 False,这将导致引发诊断错误。

返回类型:

布尔值

fortls.parsers.internal.parser.find_external_type(file_ast, desc_string, name)

遇到一个类型为 EXTERNAL 的变量。尝试查找一个已定义的变量,其类型为普通 Fortran 类型。

返回类型:

布尔值

fortls.parsers.internal.parser.get_line_context(line)

获取行中结束位置的上下文(用于代码补全)。

参数:

line (str) – 文件行

返回值:

可能的字符串值:var_keypro_linevar_onlymod_memsmod_onlypro_linkskipimportviscalltype_onlyint_onlyfirstdefault

返回类型:

tuple[str, None]

fortls.parsers.internal.parser.get_procedure_modifiers(line, regex)

尝试匹配函数和子程序的程序修饰符

参数:
  • line (str) – 文档行

  • regex (Pattern) – 使用的正则表达式,例如函数或子程序签名

返回值:

过程名称、参数、尾随行

返回类型:

tuple[str, str, str] | tuple[None, None, None]

fortls.parsers.internal.parser.parse_var_keywords(test_str)

解析Fortran变量声明关键字

返回类型:

tuple[list[str], str]

fortls.parsers.internal.parser.preprocess_file(contents_split, file_path=None, pp_defs=None, include_dirs=None, debug=False)
fortls.parsers.internal.parser.read_associate_def(line)
fortls.parsers.internal.parser.read_block_def(line)

尝试读取BLOCK定义行

返回类型:

tuple[Literal['block'], str] | None

fortls.parsers.internal.parser.read_do_def(line)

尝试读取DO循环

返回值:

包含“do”和存在时固定的格式标签的元组

返回类型:

tuple[Literal[“do”], str] | None

fortls.parsers.internal.parser.read_enum_def(line)

尝试读取ENUM定义行

fortls.parsers.internal.parser.read_fun_def(line, result=None, mod_flag=False)

尝试读取FUNCTION定义行

为了推断result typename,变量定义仅使用函数标志调用

参数:
  • line (str) – 文件行

  • result (RESULT_sig, optional) – 包含函数结果签名的dataclass

  • mod_flag (bool, optional) – 模块和模块过程解析的标志,默认为False

返回值:

一个命名元组

返回类型:

tuple[Literal[“fun”], FUN_sig] | None

fortls.parsers.internal.parser.read_generic_def(line)

尝试读取通用过程定义行

fortls.parsers.internal.parser.read_if_def(line)

尝试读取IF条件

返回值:

一个Literal“if”和None元组

返回类型:

tuple[Literal[“if”], None] | None

fortls.parsers.internal.parser.read_imp_stmt(line)

尝试读取IMPORT语句

返回类型:

tuple[Literal['import'], Import] | None

fortls.parsers.internal.parser.read_inc_stmt(line)

尝试读取INCLUDE语句

返回类型:

tuple[Literal['inc'], str] | None

fortls.parsers.internal.parser.read_int_def(line)

尝试读取INTERFACE定义行

返回类型:

tuple[Literal['int'], InterInfo] | None

fortls.parsers.internal.parser.read_mod_def(line)

尝试读取MODULE和MODULE PROCEDURE、MODULE FUNCTION定义行

fortls.parsers.internal.parser.read_prog_def(line)

尝试读取PROGRAM定义行

返回类型:

tuple[Literal['prog'], str] | None

fortls.parsers.internal.parser.read_select_def(line)

尝试读取 SELECT 定义行

fortls.parsers.internal.parser.read_sub_def(line, mod_flag=False)

尝试读取 SUBROUTINE 定义行

参数:
  • line (str) – 文档行

  • mod_flag (bool, optional) – 模块和模块过程解析的标志,默认为False

返回值:

一个 SUB_info 数据类对象

返回类型:

元组[Literal[“sub”], SUB_info] | None

fortls.parsers.internal.parser.read_submod_def(line)

尝试读取 SUBMODULE 定义行

fortls.parsers.internal.parser.read_type_def(line)

尝试读取 TYPE 定义行

fortls.parsers.internal.parser.read_use_stmt(line)

尝试读取 USE 语句

返回类型:

tuple[Literal['use'], Use] | None

fortls.parsers.internal.parser.read_var_def(line, var_type=None, fun_only=False)

尝试读取变量定义行

fortls.parsers.internal.parser.read_vis_stmnt(line)

尝试读取 PUBLIC/PRIVATE 语句

返回类型:

tuple[Literal['vis'], VisInfo] | None

fortls.parsers.internal.parser.read_where_def(line)

尝试读取 WHERE 块

返回值:

包含“where”和一个布尔值(指示是否标记或未标记)的元组

返回类型:

元组[Literal[“where”], bool] | None

fortls.parsers.internal.program 模块

class fortls.parsers.internal.program.Program(file_ast, line_number, name, keywords=None)

基类:Module

get_desc()

fortls.parsers.internal.scope 模块

class fortls.parsers.internal.scope.Scope(file_ast, line_number, name, keywords=None)

基类: FortranObj

add_child(child)
add_member(member)
add_subroutine(interface_string, no_contains=False)
add_use(use_mod)
check_definitions(obj_tree)

检查作用域中的定义错误

返回类型:

列表[Diagnostic]

check_use(obj_tree)
copy_from(copy_source)
get_children(public_only=False)
返回类型:

列表[类型[FortranObj]]

mark_contains(line_number)
set_implicit(implicit_flag, line_number)
set_inherit(inherit_type)
set_parent(parent_obj)
update_fqsn(enc_scope=None)

fortls.parsers.internal.select 模块

class fortls.parsers.internal.select.Select(file_ast, line_number, name, select_info)

基类: Block

create_binding_variable(file_ast, line_number, var_desc, case_type)
get_desc()
get_type(no_link=False)
is_type_binding()
is_type_region()

fortls.parsers.internal.submodule 模块

class fortls.parsers.internal.submodule.Submodule(file_ast, line_number, name, ancestor_name='')

基类:Module

get_ancestors()
get_desc()
get_type(no_link=False)
require_inherit()
resolve_inherit(obj_tree, inherit_version)

fortls.parsers.internal.subroutine 模块

class fortls.parsers.internal.subroutine.Subroutine(file_ast, line_number, name, args='', mod_flag=False, keywords=None)

基类:Scope

check_valid_parent()
copy_interface(copy_source)
返回类型:

list[str]

get_children(public_only=False)
get_desc()
get_diagnostics()
get_docs_full(hover_array, long=False, drop_arg=-1)

构建包含代码签名、文档字符串以及任何参数文档的完整文档。

参数:
  • hover_array (列表[字符串]) – 要追加文档的字符串列表。

  • long (布尔值, 可选) – 是否获取参数的文档,默认为 False

  • drop_arg (整数, 可选) – 是否从结果中删除某些参数,默认为 -1

返回值:

包含应位于代码块中的 Fortran 签名和应位于普通 Markdown 中的文档字符串的元组。

返回类型:

元组[列表[字符串], 列表[字符串]]

get_hover(long=False, drop_arg=-1)
get_hover_md(long=False, drop_arg=-1)
get_interface(name_replace=None, drop_arg=-1, change_strings=None)
get_interface_array(keywords, signature, drop_arg=-1, change_strings=None)
get_signature(drop_arg=-1)
get_snippet(name_replace=None, drop_arg=-1)
get_type(no_link=False)
is_callable()
is_mod_scope()

fortls.parsers.internal.type 模块

class fortls.parsers.internal.type.Type(file_ast, line_number, name, keywords)

基类:Scope

check_valid_parent()
get_actions(sline, eline)
get_children(public_only=False)
get_desc()
get_diagnostics()
get_hover(long=False, drop_arg=-1)
返回类型:

tuple[str, str]

get_overridden(field_name)
get_type(no_link=False)
require_inherit()
resolve_inherit(obj_tree, inherit_version)

fortls.parsers.internal.use 模块

class fortls.parsers.internal.use.Use(mod_name, only_list=None, rename_map=None, line_number=0)

基类: object

USE 语句的 AST 节点

property line_number
rename(only_list=None)

重命名 ONLY: 语句

fortls.parsers.internal.utilities 模块

fortls.parsers.internal.utilities.climb_type_tree(var_stack, curr_scope, obj_tree)

遍历用户定义类型序列以确定最终字段类型

fortls.parsers.internal.utilities.find_in_scope(scope, var_name, obj_tree, interface=False, local_only=False, var_line_number=None)
fortls.parsers.internal.utilities.find_in_workspace(obj_tree, query, filter_public=False, exact_match=False)
fortls.parsers.internal.utilities.get_use_tree(scope, use_dict, obj_tree, only_list=None, rename_map=None, curr_path=None)

fortls.parsers.internal.variable 模块

class fortls.parsers.internal.variable.Variable(file_ast, line_number, name, var_desc, keywords, keyword_info=None, kind=None, link_obj=None)

基类: FortranObj

check_definition(obj_tree, known_types=None, interface=False)
get_desc(no_link=False)
get_hover(long=False, drop_arg=-1)
返回类型:

tuple[str, str]

get_hover_md(long=False, drop_arg=-1)
get_keywords()
get_snippet(name_replace=None, drop_arg=-1)
get_type(no_link=False)
get_type_obj(obj_tree)
is_callable()
is_optional()
is_parameter()
set_dim(dim_str)
set_external_attr()
set_parameter_val(val)
update_fqsn(enc_scope=None)

fortls.parsers.internal.where 模块

class fortls.parsers.internal.where.Where(file_ast, line_number, name)

基类: Block

get_desc()
get_type(no_link=False)

模块内容