Tree-sitter单注释解析中comment_prefix识别异常问题求助
Tree-sitter单行注释解析:comment_prefix无法识别长注释内容
问题根源
你的解析规则中,最后一段/[^\n]*/是贪婪匹配模式,会直接吞噬//之后的所有字符——包括原本应该被comment_prefix匹配的前缀部分。当注释内容较短时,解析器还能触发comment_prefix的匹配分支;但内容变长后,贪婪正则的匹配优先级更高,直接覆盖了前缀分支,导致comment_prefix无法被识别。
修复方案
调整规则结构,让解析器优先尝试匹配包含comment_prefix的分支,只有当匹配失败时才走纯文本分支。修改后的代码如下:
seq( "//", choice( seq($.comment_prefix, optional(/[ ]*/), /[^\n]*/), /[^\n]*/ ) )
补充说明
- 确保
comment_prefix的规则仅匹配前缀部分(比如/@\s*(TODO|FIXME|NOTE)/这类正则),不要包含后续的注释文本。 choice分支会按顺序尝试匹配,第一个分支成功匹配后就不会再触发第二个分支,这样就能保证comment_prefix在符合条件时被优先识别。
内容的提问来源于stack exchange,提问作者Qiren Dong
相关产品推荐
相关产品推荐

