跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

点击“注册GitHub”,即表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

使用ctags中的官方“libreadtags”库解析ctags文件 #3049

已合并
将4个提交合并到
2023年10月17日

对话

技术人员
复制链接
成员

我不确定我们的解析器对无效输入或更新的ctags文件格式有多强大,所以最好使用官方库的上游版本来解析ctags,这样我们就不用担心这个问题。

此外,此修补程序还更新了代码,以读取tagmanager中需要的所有ctags类型。

@技术人员 技术人员补充这个标记管理器 标签管理器相关的补丁和错误标签2021年12月9日
@多利克雷
复制链接
贡献者

在改进标记加载的同时,是否可以添加对函数参数的支持?如果我看得正确的话,这些当前不是从ctags中处理的,但Geany在它们是tagmanager格式时使用它们。

Ctags确实支持这一点,至少对于某些语言(例如:C、Python,但可能还有许多其他语言)。唯一的问题是它不是默认的ctags输出格式,必须在命令行上请求它。

@elextr公司
复制链接
成员

但Geany在tagmanager格式中使用它们

我认为tagmanager实际上并不是这样处理参数的,它将整个参数列表作为单个字符串IIRC处理,因此您无法访问参数名称。

新的C/C++解析器可以解析局部变量和参数IIUC,请参阅#3032以及相关讨论。Geany(和ctags??)无法为这些指定范围,因为范围是词汇的,不像结构和类成员那样命名。因此,它们无处不在,并不局限于适当的功能。所以#3032默认情况下禁用它们,直到问题得到解决。

@技术人员
复制链接
成员 作者

在改进标记加载的同时,是否可以添加对函数参数的支持?如果我看得正确的话,这些当前不是从ctags中处理的,但Geany在它们是tagmanager格式时使用它们。

它是“signature”字段,以前处理过,也应该由此修补程序处理。我试着浏览了ctags提供的所有旗帜,并使用了可能对Geany有用的所有信息。以前缺少的是“typeref”字段,它提供变量类型和函数返回值,现在包含在这个补丁中。

@技术人员
复制链接
成员 作者

我认为tagmanager实际上并不是这样处理参数的,它将整个参数列表作为单个字符串IIRC处理,因此您无法访问参数名称。

啊,好吧,也许我误解了这个问题——如果是关于将参数提取为单独的标记,那么这只是关于在Geany中启用此功能,但Geany方面需要做一些尚未完成的额外工作。

Geany(和ctags??)无法为这些指定范围,因为范围是词汇的,不像结构和类成员那样命名。因此,它们无处不在,并不局限于适当的功能。

范围实际上被正确地包括在内,我们只是没有考虑到它,它必须在不同的地方被固定(应该很容易)。

@埃克斯特
复制链接
成员

啊,好吧,也许我误解了这个问题

或者我做了-P(P)

该范围实际上包含正确

哦,好吧,这是一系列线条,是吗?

@技术人员
复制链接
成员 作者

哦,好吧,这是一系列线条,是吗?

函数名包含在局部变量的范围内。例如,对于

int main(无效){整数i;对于(i=0;i<10;i++){整数j;}}

的范围主要的。现在您当然不会看到任何嵌套块,所以j将具有与但至少你可以区分函数的局部性和非局部性。

@elextr公司
复制链接
成员

埃克斯特 评论2021年12月12日

我的范围是主要的。

所以Geany的问题是我们不知道main的词法范围,更不用说用它来过滤哪些名称可见了?

这可以解释为什么“范围”取自折叠而非符号???

@技术人员
复制链接
成员 作者

所以Geany的问题是我们不知道main的词法范围,更不用说用它来过滤哪些名称可见了?

问题是(这并不是真正的问题,只是还没有解决):

  1. 对于正常的自动完成,我们目前包括所有标记——您需要这些标记,因为即使它们引用了嵌套在某种类型中的标记,这也是您可能希望自动完成的。现在,当您启用函数解析时,您当然不希望在您正在编辑的函数之外的其他函数中定义标记,因此必须排除这些标记。
  2. 对于标记定义/声明,它或多或少类似于(1)。
  3. 对于范围自动完成,应调整代码,以便在确定变量类型时,首先检查当前函数中定义的变量的标记,然后才查看全局变量定义(加上其他函数中定义了的排除变量)。此外,我们目前根本不使用继承信息,因此您只能从声明变量的类中获得定义的标记,而不是从超类中获得。
  4. 对于符号树,我们应该排除局部变量和函数参数。

或者换句话说,范围信息仅用于检测类型如何嵌套以及何时显示什么.输入,但当前范围(即光标所在的位置)根本不用于范围完成。我们没有这样做,因为我们在全局范围内只有标签,而且不太容易确定您在哪里(例如C++名称空间可以跨越多个文件,使用命名空间可以使用等)。但是,当启用函数解析时,您可以很容易地判断您是否在具有特定名称的函数中,以及该函数中定义了哪些标记。

上面的任何事情都不难做到(可能遍历继承树有点棘手,但可以稍后添加),它只是对Geany的某些方面产生了一些影响,我想首先解决:

  1. 添加局部变量的最简单方法是为它们引入一个新条目
    类型定义 枚举
  2. 对于某些语言,我们可能还需要更改到上述枚举成员的映射,因为此信息对于范围完成正确工作至关重要。这就是为什么我建议这么做使用uctags中的cxx解析器#3032(评论)为了能够独立于标签在侧栏中的显示方式来完成这项工作(并且要开始这项工作,需要所有的解析器都在其中,以避免修改相同的代码和引入合并冲突)。
  3. (1)和(2)的问题是,一旦我们开始修改映射,就会使二进制Geany标记文件在Geany版本之间不兼容。这就是为什么我建议切换到ctags文件格式,因为它不包含有关内部映射的信息,然后我们可以对映射执行任何操作。这并不意味着我们应该从Geany中删除标记生成-我们仍然可以保留它,但默认情况下会为用户生成ctags格式的标记(并对单元测试使用二进制格式,因为我们希望在那里看到映射的值)。

我创建了新的标记管理器标签,所以期望有几个带有此标签的pull请求;-)。

@elextr公司
复制链接
成员

问题是:1。对于正常的自动完成,我们当前包括所有标记

实际上这是这个 问题(粗体和大写P:-),这使得自动补全目前几乎没有用处。

你想要这些,因为即使它们引用了嵌套在某种类型中的标记,这也是你可能想要自动完成的

诚如你所说,目前如果没有局部变量和参数,几乎不可能推断出范围(仅全局变量),因此,将所有内容和厨房水槽都转储是唯一的解决方案,但正如你所说的,这可以通过更新的解析器进行改进。但是词法范围也是必要的,因为一些不是C语言的讨厌的语言也有来自成员函数中可见的类定义的其他名称(例如C++成员函数可以看到所有数据成员,或者Python“self”可以看到类成员)。因此,如果我正确理解您的意思,新的解析器将为我们提供一个适当的词法范围(如果不是内部范围,至少是函数级别),因此我们不再需要尝试对齐折叠和声明,然后应该可以大大减少噪音。

  1. 对于标签定义/声明,它或多或少类似于(1)。

好吧,当我们在做时,为什么不多做一些工作呢?我们可以有一种区分重载的方法吗
单个名称通常会多次声明和定义,例如大小()可能是C++中最常见的名称,几乎所有东西都有它(紧跟其后获取()设置()).

  1. 对于范围自动完成,应调整代码,以便在确定变量类型时,首先检查当前函数中定义的变量的标记,然后才查看全局变量定义(加上其他函数中定义了的排除变量)。

是的,如果语言说本地名字隐藏了全球名字,但要注意C++::name看到全球的,或者朱莉娅全局x这也是一样的。

此外,我们目前根本不使用继承信息,因此您只能从声明变量的类中获得定义的标记,而不是从超类中获得。

正如我前面所说的那样,我们也没有看到在类中定义的成员,这些类在考虑继承之前就在成员函数中自动可见(对于C++,或者对于Python或Rust使用“self”)。当然,这意味着识别一个函数是成员函数/方法还是“普通函数”。

  1. 对于符号树,我们应该排除局部变量和函数参数。

是的,同意了。

上面的一切都不难做到

克朗兄弟听到这个会很惊讶;-)

(遍历继承树可能有点棘手,但可以稍后添加),它只是对Geany的某些方面产生了一些影响,我想首先解决:

请注意,我不仅仅是因为提出上述困难、例外和问题而感到恼火,我想确保首先考虑各种语言的所有奇怪之处,以便它可以逐步实现,否则,第一个看似简单的解决方案将在您添加它们时阻止一些稍后更微妙的功能,并且必须撤消或重新生成内容,从而再次导致大量PR,所有这些都是标记管理器标签😁

也许我们应该把这部分讨论转移到一个单独的问题或github讨论中,而不是把它分散到几个像这样只有切点关系的PR中。

@技术人员
复制链接
成员 作者

因此,如果我正确理解您的意思,新的解析器将为我们提供一个适当的词法范围(如果不是内部范围,至少是函数级别),因此我们不再需要尝试对齐折叠和声明,然后应该可以大大减少噪音。

明确地说,我认为现在只有C/C++解析器解析函数体,它可能是唯一一个会这样做的解析器。我认为这是没有必要的,因为没有它们,C/C++就不可能正确地解析(某些东西@多利克雷也遇到了Kotlin解析器)。然后加入局部变量作为奖励。但我不认为这是ctags中其他解析器通常计划的功能。例如,即使Python解析器开始解析函数体,我们对动态类型语言中的类型或多或少是盲目的,这些类型对于范围完成来说是无用的。

好吧,当我们在做的时候,为什么不把更多的工作交给你呢?我们能有一种区分过载的方法吗?-)

由于带有自动补全功能的弹出窗口只显示名称而不显示参数,并且此列表不包含重复项,因此对我来说没有任何工作:-)。打开大括号后,可以在工具提示中切换备选方案)。

如果语言说本地名称隐藏了全局名称,那么是的,但要注意看到全局名称的C++::name,或者朱莉娅全局x。
正如我前面所说的那样,我们也没有看到在类中定义的成员,这些类在考虑继承之前就在成员函数中自动可见(对于C++,或者对于Python或Rust使用“self”)。当然,这意味着识别一个函数是成员函数/方法还是“普通函数”。

这只是语言太具体了,恐怕在范围完成代码中有太多类似的东西需要处理。

克朗兄弟听到这个会很惊讶;-)

让我们明确一点,我们在这里谈论的Geany是愚蠢和幼稚的范围完成(虽然这并没有表现出令人讨厌的方式)。我自己不打算做任何高级的事情,因为我认为(1)使用普通标记列表而不是带有语义注释的语法树来实现非常复杂(2)https://microsoft.github.io/language-server-protocol网站/我们应该在Geany中支持它,以便在安装时接管所有标签管理器的工作,这样会取得更好的结果。

但是,尽管我们既愚蠢又天真,但我认为在许多情况下,我们仍然可以展示一些有用的结果。

请注意,我不只是因为提出上述困难、例外和问题而感到恼火,我想确保首先考虑各种语言的所有奇怪之处,以便它可以逐步实现,否则,第一个看似简单的解决方案将在您添加它们时阻止一些稍后更微妙的功能,并且必须撤消或重新生成内容,从而再次导致大量PR,所有这些都带有标记管理器标签😁

再一次,我不打算自己在这方面做太多——除了添加继承信息之外,我只想确保其他函数的标记不会出现在结果中。

首先,我想做一些关于标记管理器的“感觉正确”的事情,这样可以很容易地添加和更新解析器,添加新类型,在一个地方做一些特定于语言的事情,从而避免再次陷入维护灾难。如果Geany能够轻松地更新Scintilla和ctags并轻松添加新语言支持,那么即使我们没有太多时间自己做某事,我们也可以“免费”发布新版本。

@多利克雷
复制链接
贡献者

在改进标记加载的同时,是否可以添加对函数参数的支持?如果我看得正确的话,这些当前不是从ctags中处理的,但Geany在它们是tagmanager格式时使用它们。

它是“signature”字段,以前处理过,也应该由此修补程序处理。

是的,我指的是函数签名,它应该被解析为标记->参数列表。我一定是瞎了,现在我在新旧代码中都看到了。对不起,我很困惑。

@elextr公司
复制链接
成员

像这样的事情是浪费时间https://microsoft.github.io/language-server-protocol网站/我们应该在Geany中支持它,以便在安装时接管所有标签管理器的工作,这样会取得更好的结果。

同意,但如果有一种方法可以让它真正接管的话,因为这么多东西都是硬连接到tagmanager的,很难做到这一点,看看以前的libclang实验。

@elextr公司
复制链接
成员

由于带有自动补全功能的弹出窗口只显示名称而不显示参数,并且此列表不包含重复项,因此对我来说没有任何工作:-)。打开大括号后,可以在工具提示中切换备选方案)。

啊,我的意思是goto声明/定义不是自动完成。

@技术人员
复制链接
成员 作者

同意,但如果有一种方法可以让它真正接管的话,因为这么多东西都是硬连接到tagmanager的,很难做到这一点,看看以前的libclang实验。

我不认为这有那么糟糕——之前尝试的最大问题是他们没有首先清理标签管理器本身的混乱,并试图在现有的基础上实现它。最大的罪犯是符号。c(c)其中许多东西可以直接移动到标记管理器中,并隐藏在适当的API后面。我认为最好的方法是为某些事情向标记管理器引入一个类似LSP的API,然后在标记管理器LSP和真正的LSP之间切换不会那么困难。TMTag可以被标签管理器和LSP用来传递符号数据(如果我们需要来自LSP的一些额外信息,我们可以添加一些私人指向可以存储额外详细信息的位置的指针)。此外,为了简化事情,我认为即使启用了LSP,我们也可以保持标记管理器运行,只是不要将其标记用于符号树、自动完成、导航等。

@elextr公司
复制链接
成员

最大的冒犯是symbols.c,其中许多东西可以直接移动到标记管理器中,并隐藏在适当的API后面。我认为最好的方法是在标签管理器中引入类似LSP的API

听起来似乎有道理。

TMTag可用于标记管理器和LSP传递符号数据

嗯,一个名为TMTag的结构,但它包含的内容可能不同:-)

我认为即使启用了LSP,我们也可以保持标签管理器运行

那么,使用ctags/tm或LSP的决定应该根据文档而定,IIUC并不是所有语言都有可用的LSP。您认为静态ctags解析使用LSP的文档会带来什么好处?

@技术人员
复制链接
成员 作者

嗯,一个名为TMTag的结构,但它包含的内容可能不同:-)

好吧,即使使用LSP,我们现在存储在那里的东西也可能是类似的(并且应该是类似的,以使其与Geany中的现有代码兼容)。但肯定会有(而且应该)一些额外的信息存储在那里。

那么,使用ctags/tm或LSP的决定应该根据文档而定,IIUC并不是所有语言都有可用的LSP。您认为静态ctags解析使用LSP的文档会带来什么好处?

例如,标签管理器现在对插件公开,插件希望标签管理器能够工作。或者可能有一些次要的功能,比如状态栏中的范围信息,我认为在LSP中没有对应的功能(但API很大,我可能会错过它)。

但最重要的是,我认为,如果将此功能作为一个巨大的拉请求引入,从而改变Geany上千条线路,那么它就不可能被合并。它必须一件一件地发生。例如,它可以从改变标记管理器->获取符号_for_symbol_tree()LSP->get_symbols_for_symbol_tree()并确保此特定功能正常工作,然后转到下一个功能。基本上,我们最感兴趣的LSP中的API是

如果我们在标记管理器中有类似的API(这实际上只是将一些代码从Geany移动到标记管理器的问题),那么对Geany代码的更改将是最小的,以便在保持Geany其余部分不变和稳定的情况下开始与相应的LSP对等方进行交互。如果将来我们确定可以对LSP管理的文件禁用标记管理器,我们当然可以这样做(但在此之前,我们必须为插件引入相应的API,并确保标记管理器中确实没有任何依赖项)。

@库格尔-
复制链接
成员

似乎LSP和Scintilla之间也有重叠?

如果我们这样做(我希望看到至少有一个可用的原型作为决策的基础),我们可能应该通过Github项目跟踪进度。

@elextr公司
复制链接
成员

例如,标签管理器现在对插件公开,插件期望标签管理器工作。

是的,这是一个问题,也许需要随着时间的推移迁移到通用API。当然,使用LSP,项目插件需要做的工作大大减少😛

状态栏中的范围信息

Vscode显示当前作用域(在顶部栏中)的方式与Geany显示状态的方式相同,并且它使用cpptools LSP服务器IIUC,所以这可能是可能的。

我认为,如果将此功能作为一个巨大的拉请求引入,从而改变Geany上千条线路,那么它就不可能被合并。它必须一件一件地发生。

公平地说,允许逐步实施是一个合理的理由。

我们可能应该通过Github项目跟踪进度。

是的,并且在主存储库中的一个单独分支中,而不是个人(Github)分支。

@技术人员
复制链接
成员 作者

是的,并且在主存储库中的一个单独分支中,而不是个人(Github)分支。

很好,计划在这里。也许还有一个小细节——我们可能还需要一个做这项工作的人:-)。虽然这是我很想做的事情,但这是一个相当大的项目,我自己肯定不会在短期内开始这方面的工作。

@技术人员
复制链接
成员 作者

似乎LSP和Scintilla之间也有重叠?

是的,似乎有。但我们将使用或不使用LSP的哪些特定功能取决于我们。

@技术人员
复制链接
成员 作者

如果我们这样做(我希望看到至少有一个可用的原型作为决策的基础),我们可能应该通过Github项目跟踪进度。

要实现协议本身,最简单的方法是窃取其他编辑器的代码。然后必须将一些事件从Geany传播到LSP——最重要的是关于当前文档更改的通知。这些信息可以是增量的,但对于这样的原型来说,可能会在每一封键入的信件之后强行将整个文档发送给LSP。

@elextr公司
复制链接
成员

要实现协议本身,最简单的方法是窃取其他编辑器的代码。

MS没有列出任何,但是否有客户端SDK/库?

@elextr公司
复制链接
成员

还有一个可能有点问题的是,LSP是异步的,而Geany是绝对同步的。

@技术人员
复制链接
成员 作者

MS没有列出任何,但是否有客户端SDK/库?

下面列出了一些客户https://langserver.org

还有一个可能有点问题的是,LSP是异步的,而Geany是绝对同步的。

可以转换为同步-即阻塞,直到收到服务器的响应。当然,问题是这是否足够快。

@elextr公司
复制链接
成员

可以转换为同步-即阻塞,直到收到服务器的响应。当然,问题是这是否足够快。

由于vscode是电子,所以很难判断可见延迟是由于电子、服务器还是计时器(比如我们的ctag)造成的。有些事情很快,比如显示一个带有符号定义的弹出窗口,如果速度那么快,可能没问题,尽管这只是一个查找,而且只在一个文件中使用200行C++示例。但是有些事情很慢,比如高亮显示,可能需要一两秒钟,这可能是一个计时器,也可能只是服务器对语法和语义进行适当的编译器分析和响应所需的时间。无论哪种方式,如果是同步的,输入使用都太慢。

当然,我是在一台中速机器上运行的,值得在你的Rpi上试试。

但这些都与使用libreadtags无关,这似乎是个好主意。

@elextr公司
复制链接
成员

这里列出了一些客户

是的,我希望使用库,不必调整客户端内部,tagmanager 2.0有人吗??

@技术人员
复制链接
成员 作者

但是有些事情很慢,比如高亮显示,可能需要一两秒钟,这可能是一个计时器,也可能只是服务器对语法和语义进行适当的编译器分析和响应所需的时间。

取决于我们使用语言服务器的目的。在我看来,目前标签管理器唯一真正让人讨厌的是自动完成,其余的都很好。所以最初LSP的使用可以集中于此。

是的,我希望使用库,不必调整客户端内部,tagmanager 2.0有人吗??

从标签管理器集成中恢复过来只花了大约15年的时间,我们就快到了。我们应该开始考虑再过15年该做什么:-)。

但如果LSP的使用仅限于某些功能,那么将其实现为插件就足够了。我认为,虽然对于一些工作原型来说,最好直接将其破解到Geany中,以了解可能缺少的API,并基于此做出决定。

无论我们是从某处获取一些客户端代码还是实现自己的代码,其核心中都必须有一些JSON解析器/序列化器(JSON-glib似乎是一个自然的选择),这些解析器或序列化器必须是绑定的,或是一个外部依赖项-不确定这对Geany是否合适,对于插件来说,这将是一个更容易的决定。

但这些都与使用libreadtags无关,这似乎是一个好主意。

是的,回到地球上,标签管理器就是我们所拥有的。对我来说,LSP自动完成的美好世界只是一个借口,为什么不大幅改进可怕的基于tag-manager的范围完成:-)。

@库格尔-
复制链接
成员

我想知道为什么像这样的公关开放或这么长时间,然后匆忙发布。没有足够的ping?

src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_tag。小时 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
@b4n型
复制链接
成员

我不确定我们的解析器对无效输入的鲁棒性如何

大部分都是我写的,应该很完美😁

或更新的ctags文件格式

理论上,该格式定义良好且稳定(只需添加新的扩展字段),因此应该是fine™。但实际上,uctags添加了对转义序列的支持,我们的解析器不理解,所以它不理解。

因此,最好使用官方库的上游版本来解析ctags文件,这样我们就不用担心这个问题。

是的,这是一个非常大的差异,但我想使用规范实现值得额外复制。

@技术人员
复制链接
成员 作者

大部分都是我写的,应该很完美😁

哦,我把它同步到错误的方向了-我应该用你的代码更新ctags:-)。

我发现了另一个问题——所有解析器都使用typeref:类型名但我在查看Enrico的php标记文件和php使用的php解析器后才发现typeref:未知出于某种原因,用于字体名称。所以我更新了代码以允许未知的后面typeref(类型参考)也是。

@技术人员
复制链接
成员 作者

也许我应该为这次公关获取最新版本的libreadtags库吗?我注意到你在春天也提交了一些补丁。

@b4n型
复制链接
成员

大部分都是我写的,应该很完美😁

哦,我把它同步到错误的方向了-我应该用你的代码更新ctags:-)。

嗯,我也写了其中的一些,所以无论哪种方法都有效😀

我又发现了一个问题——所有解析器都使用typeref:类型名但我在查看Enrico的php标记文件和php使用的php解析器后才发现typeref:未知出于某种原因,需要输入类型名。所以我更新了代码以允许未知的后面typeref(类型参考)也是。

接得好。也许值得向该解析器提交一个更新,以便更符合约定。

也许我还应该为这个公共关系获取最新版本的libreadtags库?我注意到你在春天也提交了一些补丁。

我没有检查diff,但我在那里的最新更改并不重要,它们修复了C stdlib的使用,以及处理一些非ASCII字节的一些非常理论性的问题。

@技术人员
复制链接
成员 作者

接得好。也许值得向该解析器提交一个更新,以便更符合约定。

不幸的是,我们仍然需要“未知”检查来支持旧的ctags二进制文件。

可以在master上重新设置这个分支的基址,以便可以更容易地使用php和py标记文件进行测试吗?我还会稍微压缩提交。

@b4n型
复制链接
成员

不幸的是,我们仍然需要“未知”检查来支持旧的ctags二进制文件。

当然,但这仍然会使它更加连贯。除非我们担心它会在某种程度上破坏兼容性…

可以在master上重新设置这个分支的基址,以便可以更容易地使用php和py标记文件进行测试吗?我还会稍微压缩提交。

当然,对我来说很好。

由于TM_DEBUG未定义,此函数无法正常编译并且它在头中的声明与其实现不同。
@超高速16
复制链接
成员

不幸的是,我们仍然需要“未知”检查来支持旧的ctags二进制文件。

至少我们可以在需要时轻松地更改PHP标记生成脚本。

@技术人员
复制链接
成员 作者

至少我们可以在需要时轻松更改PHP标记生成脚本。

但我们仍然需要支持可能由较旧的ctags版本生成的用户标记文件,因此即使我们更新php解析器,它也应该在那里保留一段时间。

复制链接
成员

@elextr公司 elextr公司 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

有几个变化。

文档/geany.txt 过时的 显示已解决 隐藏已解决
文档/geany.txt 过时的 显示已解决 隐藏已解决
文档/geany.txt 过时的 显示已解决 隐藏已解决
文档/geany.txt 过时的 显示已解决 隐藏已解决
复制链接
成员

@b4n型 b4n型 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

第一次通过仅基于代码审查,尚未进行实际测试。

src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
src/tagmanager/tm_source_file。c(c) 过时的 显示已解决 隐藏已解决
复制链接
成员

@b4n型 b4n型 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

除了小的文档更改外,LGTM。有限的测试表明它运行良好,包括标签文件中的混合语言。我使用Pipe或Tagmanager格式放置的旧标记文件似乎仍能正常工作。我没有任何旧的ctags标签文件带有现在不支持的标题,但将其添加到新的标题中会产生警告,但似乎仍然可以正常工作。

文档/geany.txt 过时的 显示已解决 隐藏已解决
复制链接
成员

@库格尔- 库格尔- 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

LGBI,但我只了解其中的一小部分

@技术人员
复制链接
成员 作者

除了小的文档更改外,LGTM。

现在承诺。

好的,我等着@elextr公司如果他对文档有更多的注释,则稍稍压缩提交,然后合并结果。

复制链接
成员

@elextr公司 elextr公司 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

LGBI,文档还好,不幸的是,在发布之前,我不能在家测试任何东西

技术人员 和其他补充2提交 2023年10月17日01:08
在中使用ctags到解析器文件的官方“readtags”库ctags文件格式。这使我们不必担心解析本身只需从我们需要的ctags文件中提取信息。此外,此补丁还读取了一些我们感兴趣的额外ctags字段它还根据给定语言使用的类型检测范围键(不是仅对C/C++有效的硬编码值)。最后,此修补程序还检测指定如果标记文件包含来自多种语言的标记。以这种方式加载语言时,我们必须推迟更新scope(的ctags字段),直到我们得到language字段,因为它的键是特定于所用语言的种类名称。请注意,即使在此更改标记之后,文件仍必须这样命名它们包含文件扩展名中的语言,因为这是用于Geany支持的其他标记文件格式。然而,它会,被“language”字段覆盖。合著者:Colomban Wendling<lists.ban@herbesfulles.org>
合著者:Colomban Wendling<lists.ban@herbesfulles.org>
@技术人员
复制链接
成员 作者

太好了,所以我只是重新推了一下压扁的版本,以防有人想看它。我明天会合并它(好吧,实际上是今天晚些时候),但如果你想的话,可以提前合并。

@b4n型 b4n型合并提交a7479cd进入之内 杰尼:主人 2023年10月17日
通过了4项检查
免费注册 在GitHub上加入此对话.已经有账户了吗?登录以发表评论
标签
标记管理器 标签管理器相关的补丁和错误
项目
还没有
开发

成功合并此请求可能会解决这些问题。

6名参与者