fortls.parsers.internal 包¶
子模块¶
fortls.parsers.internal.associate 模块¶
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)¶
添加在解析过程中遇到的诊断错误,用于文档中的一个范围。
- 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)¶
获取提供的行号中存在的所有作用域的列表。
- resolve_includes(workspace, path=None)¶
- resolve_links(obj_tree, link_version)¶
- 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_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()¶
- require_link()¶
- resolve_inherit(obj_tree, inherit_version)¶
- resolve_link(obj_tree)¶
- set_default_vis(new_vis)¶
- set_parent(parent_obj)¶
- set_visibility(new_vis)¶
- update_fqsn(enc_scope=None)¶
fortls.parsers.internal.block 模块¶
fortls.parsers.internal.diagnostics 模块¶
fortls.parsers.internal.do 模块¶
fortls.parsers.internal.enum 模块¶
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([参数]) :: 参数列表名称
- get_interface(name_replace=None, drop_arg=-1, change_strings=None)¶
- get_type(no_link=False)¶
- is_callable()¶
- resolve_link(obj_tree)¶
fortls.parsers.internal.if_block 模块¶
fortls.parsers.internal.imports 模块¶
fortls.parsers.internal.include 模块¶
fortls.parsers.internal.interface 模块¶
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_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()¶
- resolve_link(obj_tree)¶
- set_parent(parent_obj)¶
fortls.parsers.internal.module 模块¶
fortls.parsers.internal.parser 模块¶
- class fortls.parsers.internal.parser.FortranFile(path=None, pp_suffixes=None)¶
基类:
object
- check_file(obj_tree, max_line_length=-1, max_comment_line_length=-1)¶
- copy()¶
将内容复制到新的文件对象(不复制对象)
- 返回类型:
- find_word_in_code_line(line_no, word, forward=True, backward=False, pp_content=False)¶
- get_code_line(line_no, forward=True, backward=True, pp_content=False, strip_comment=False)¶
从文件获取完整的代码行,包括任何相邻的续行
- get_docstring(ln, line, match, docs)¶
从当前文件位置提取完整的文档字符串
- get_fortran_definition(line)¶
- get_single_line_docstring(line)¶
获取单行文档字符串。这对于传统 Fortran 和现代 Fortran 都是一样的
- load_from_disk()¶
从磁盘读取文件,或者仅当文件内容已更改时更新文件内容。使用 MD5 哈希来确定这一点。
- parse(debug=False, pp_defs=None, include_dirs=None)¶
解析 Fortran 文件中 fortran_file 对象的内容并构建抽象语法树 (AST)。
- parse_contains(line, ln, file_ast)¶
解析包含语句。
- parse_do_fixed_format(line, ln, file_ast, line_label, block_id_stack)¶
- parse_docs(line, ln, file_ast, docs)¶
解析 Doxygen 或 FORD 样式的文档字符串。如果第一个注释以 !> 开头,则会检测到多行文档字符串;文档字符串的延续通过 !>、!< 或 !! 检测。
- parse_end_scope_word(line, ln, file_ast, match)¶
解析表示作用域结束的 END 关键字。
- parse_imp_char(line)¶
从变量中解析隐式字符长度,例如 var_name*10 或 var_name*(10)、var_name*(size(val, 1))。
- parse_imp_dim(line)¶
解析数组的隐式维度,例如 var(3,4)、var_name(size(val,1)*10)。
- parse_implicit(line, ln, file_ast)¶
从一行中解析隐式语句。
- set_contents(contents_split, detect_format=True)¶
设置文件内容。
- 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
- fortls.parsers.internal.parser.find_external_attr(file_ast, name, new_var)¶
检查此普通 Fortran 变量是否在 external_objs 中,并且其类型仅为
EXTERNAL
。用于检测分开的EXTERNAL
声明。
- fortls.parsers.internal.parser.find_external_type(file_ast, desc_string, name)¶
遇到一个类型为 EXTERNAL 的变量。尝试查找一个已定义的变量,其类型为普通 Fortran 类型。
- 返回类型:
- fortls.parsers.internal.parser.get_line_context(line)¶
获取行中结束位置的上下文(用于代码补全)。
- fortls.parsers.internal.parser.get_procedure_modifiers(line, regex)¶
尝试匹配函数和子程序的程序修饰符
- fortls.parsers.internal.parser.parse_var_keywords(test_str)¶
解析Fortran变量声明关键字
- 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定义行
- 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 type和name,变量定义仅使用函数标志调用
- 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语句
- fortls.parsers.internal.parser.read_inc_stmt(line)¶
尝试读取INCLUDE语句
- fortls.parsers.internal.parser.read_int_def(line)¶
尝试读取INTERFACE定义行
- fortls.parsers.internal.parser.read_mod_def(line)¶
尝试读取MODULE和MODULE PROCEDURE、MODULE FUNCTION定义行
- fortls.parsers.internal.parser.read_prog_def(line)¶
尝试读取PROGRAM定义行
- fortls.parsers.internal.parser.read_select_def(line)¶
尝试读取 SELECT 定义行
- fortls.parsers.internal.parser.read_sub_def(line, mod_flag=False)¶
尝试读取 SUBROUTINE 定义行
- 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 语句
- fortls.parsers.internal.parser.read_var_def(line, var_type=None, fun_only=False)¶
尝试读取变量定义行
- fortls.parsers.internal.parser.read_vis_stmnt(line)¶
尝试读取 PUBLIC/PRIVATE 语句
fortls.parsers.internal.program 模块¶
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)¶
检查作用域中的定义错误
- 返回类型:
- 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 模块¶
fortls.parsers.internal.submodule 模块¶
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()¶
- get_children(public_only=False)¶
- get_desc()¶
- get_diagnostics()¶
- get_docs_full(hover_array, long=False, drop_arg=-1)¶
构建包含代码签名、文档字符串以及任何参数文档的完整文档。
- 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()¶
- require_link()¶
- resolve_arg_link(obj_tree)¶
- resolve_link(obj_tree)¶
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_overridden(field_name)¶
- get_type(no_link=False)¶
- require_inherit()¶
- resolve_inherit(obj_tree, inherit_version)¶
fortls.parsers.internal.use 模块¶
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_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()¶
- require_link()¶
- resolve_link(obj_tree)¶
- set_dim(dim_str)¶
- set_external_attr()¶
- set_parameter_val(val)¶
- update_fqsn(enc_scope=None)¶