对话
技术人员
评论 2022年4月29日
|
|
|
|
|
src/符号。 c(c)
过时的
|
||
|
||
|
||
|
||
|
选择隐藏此评论的原因
选择隐藏此评论的原因
这里应该调用tm_parser_var_valid_before_declare(),不是吗?
此外,整个条件基本上是is_valid_autocomplete_tag()中相同条件的重复。 可以从这里调用is_valid_autocomplete_tag()吗(可能使用不同的名称)?
|
|||
|
|||
|
|||
|
选择隐藏此评论的原因
选择隐藏此评论的原因
|
||
|
||
|
||
|
选择隐藏此评论的原因
选择隐藏此评论的原因
选择隐藏此评论的原因
选择隐藏此评论的原因
选择隐藏此评论的原因
选择隐藏此评论的原因
选择隐藏此评论的原因
不管顺序如何,IMO对is_autocomplete_tag()的调用不需要在每个谓词函数中重复,但可以在此处的一个位置调用,特别是当编译器要内联它时。
copy_tags(dst、found、count、name_table、max_num-dst->len、is_local_tag、info); copy_tags(dst、found、count、name_table、max_num-dst->len、is_current_file_tag、info); copy_tags(dst、found、count、name_table、max_num-dst->len、is_header_file_tag、info);
|
|
|
|
|
|
|
|
|
|
|
|
|
tm_tag_file_t在Geany中未使用(我们可能永远不需要标签 对于文件),让我们将其用于局部变量标记。
允许为局部变量和函数生成这些标记 参数-这些参数与我们将要使用的参数大致相同 的本地标记,以便将它们映射到相同的类型。 本地标记对标记文件不感兴趣,因此当 生成这些(但这也意味着我们不能创建单元测试 为他们)。
我们必须忽略以下局部变量: 1.来自不同的文件 2.在文件中声明的时间晚于当前光标所在的位置 3.与当前功能范围不同
该代码从其他函数及其后面删除无效的局部变量 当前位置。 此外,它对找到的对应标签进行排序 到编辑器中执行范围完成的名称,以便 首先搜索局部变量的成员,然后搜索标记 从当前文件,然后是工作区标记,最后使用 全局标记。
我们只想在当前函数中使用局部变量 跳转。 这意味着我们要筛选出以下局部变量标记: 1.来自不同的文件 2.在文件中声明的时间晚于当前光标所在的位置 3.与当前功能范围不同 基本上与(非范围)自动完成的要求相同。
我们对纯类型名和ctags返回类型感兴趣,包括 指针、引用、数组、模板参数和关键字,例如 “const”或“struct”。 剥去所有这些。 还可以将strip_type()移到上面,以便其他函数可以使用它。
代码只是检查继承的类,去掉不需要的东西 像模板等,从继承的类中检测多重继承 通过使用“,”拆分字符串并调用tm_workspace_get_parents() 在每个父类上递归并收集返回的标记。 代码将递归深度限制为10,以避免可能的继承 循环和无限递归。 还要从TM中删除#if 0的旧代码来实现我们 保留以供参考,因为我们现在有了更好的实现。
执行范围完成时 无效A::foo(){ 巴。//<-- } 我们需要确定什么是“bar”。它可以是一个全局变量,其中 如果我们应该查找变量标记,那么它也可以是成员 在这种情况下,我们应该查找成员标记。 为了确定这一点,前面的代码检查了是否有标记 命名为“bar”,范围与方法标记相同。 这有一个缺点 方法是它不采用名称空间操作函数 比如将“using namespace”放入帐户以便用于头 命名空间X{ A级{ Baz酒吧; }; }; 和来源 使用名称空间X; 无效A::foo(){ 巴。//<-- } 它找不到“bar”,因为ctags报告foo()具有范围A 和条的范围为X::A。 这种方法的另一个缺点是它不需要继承 以便在超类中定义时不会找到“bar”, 例如 B类{ Baz酒吧; }; A:B级{ void foo(); } 为了避免这些问题,此修补程序重写了member_at_method_scope() (并将其重命名为member_accessible()),以便从中获取类名 我们所处方法的范围(上例中为A)以及 返回A的所有成员(包括超类成员)。 然后,它检查其中一个成员是否真的是成员标记 我们对(上例中的“bar”)感兴趣。
要在列表顶部显示更相关的结果,请按 顺序如下: 局部变量 当前文件中的标记 工作空间标记 全局标记 按字母顺序排列在一个组中。 此外,我们需要从显示的名称列表中删除重复项。 最后,由于条目不是按字母顺序排序的,我们需要调用 SSM(sci,sci_AUTOCSETORDER,SC_ORDER_CUSTOM,0); 所以Scintilla知道它不应该按字母顺序排列列表。
在将当前文件作为参数传递的函数中,我们可以得到 文件中使用的语言和这个额外的参数是不必要的。
|
|