#comments #parser #incremental

tree-sitter-comment

为 tree-sitter 解析库中的 TODO:, FIXME(user): 等代码标签的语法

1 个不稳定版本

0.1.0 2023年6月4日

文本编辑器 中排名 #287

Download history 20/week @ 2024-03-12 8/week @ 2024-03-19 6/week @ 2024-03-26 28/week @ 2024-04-02 46/week @ 2024-04-09 11/week @ 2024-04-16 1/week @ 2024-04-23 6/week @ 2024-05-28 14/week @ 2024-06-04 54/week @ 2024-06-11 3/week @ 2024-06-18 15/week @ 2024-06-25

每月下载量 87
syntastica-parsers 中使用

MIT 许可证

45KB
1.5K SLoC

C 1K SLoC // 0.0% comments JavaScript 81 SLoC // 0.2% comments Rust 34 SLoC // 0.4% comments

tree-sitter-comment

Tree-sitter 的语法,用于像 TODO:FIXME(user): 等注释标签。适用于嵌入在注释中。

请在 https://stsewd.dev/tree-sitter-comment/ 检查 playground。

语法

由于注释标签既不是编程语言也没有标准,我选择了遵循流行的语法约定。

注释标签

  • 注释标签可以包含
    • 大写 ASCII 字母
    • 数字(不能以数字开头)
    • -_(这些字符不能作为开头或结尾)
  • 可选地可以在括号内链接用户到标签中 ()
  • 名称必须后跟 : 和一个空格

URI

  • 识别 http 和 https 链接

如果您认为还有其他流行的语法约定,这个语法没有涵盖,请随时提交 issue。

示例

TODO: something needs to be done
TODO(stsewd): something needs to be done by @stsewd

XXX: fix something else.
XXX:    extra white spaces.

(NOTE: this works too).

NOTE-BUG (stsewd): tags can be separated by `-`
NOTE_BUG: or by `_`.

This will be recognized as a URI
https://github.com/stsewd/

常见问题解答

我可以匹配不以 : 结尾的标签,如 TODO 吗?

这个语法没有提供特定的标记,但您可以使用这个查询来匹配它

("text" @todo
 (#eq? @todo "TODO"))

我可以高亮显示对问题、PR、MR 的引用,如 #10!10 吗?

这个语法没有提供特定的标记,但您可以使用这个查询来匹配它

("text" @issue
 (#match? @issue "^#[0-9]+$"))

;; NOTE: This matches `!10` and `! 10`.
("text" @symbol . "text" @issue
 (#eq? @symbol "!")
 (#match? @issue "^[0-9]+$"))

为什么选择 C?

Tree-sitter 是一个上下文无关语法的 LR 解析器,这意味着它非常适合不需要回溯或保持空白状态(如缩进)的语法。因此,对于需要保持状态或回退到通用标记的 语言,它需要在 C 中进行一些手动解析。

其他语法

依赖项

~2.7–4MB
~71K SLoC