1 个稳定版本
| 1.0.0 | 2024年2月25日 |
|---|
#7 在 #ripgrep
33KB
653 行
仅代码
一个 ripgrep 预处理器,它从您的代码中去除注释和字符串,让您能够搜索 仅代码,有时可以极大地减少搜索结果中的噪声
左侧:原始文件。右侧:just-the-code 的输出。
它相较于其他方法的主要优点是
- 它非常高效,因为它不需要构建语法树或编译您的代码
- 它在您的终端中运行,因此可以与其他 CLI 工具集成
- 它可以很容易地定制以满足您的需求:您只需要指定注释和字符串的样式,它就可以与您选择的语言一起工作
- 准确处理嵌套注释、字符串和不同类型注释之间的交互
- 与
ripgrep原生集成,因此使用它就像传递一个额外的参数一样简单
安装
如果您已经安装了 cargo,则只需运行
cargo install just-the-code
如果您希望修改源代码或将它安装在其他位置,则可以运行以下命令
# Grab the code
git clone https://github.com/adri326/just-the-code/
# Navigate to the correct repository
cd just-the-code/
# Build the code
cargo build --release
# The built binary will be ./target/release/just-the-code
使用方法
要使用此工具与 ripgrep 一起使用,只需将 --pre just-the-code 添加到您的命令中。例如
# Noisy, since a lot of "hello"s are present in strings in the code:
rg "hello"
# No more noise :)
rg --pre just-the-code "hello"
或者,您也可以以独立模式使用此工具。例如
just-the-code src/parse.rs | bat --language rust
有几个选项可以自定义 just-the-code 的行为,这些选项可以通过运行 just-the-code --help 来查看。要使这些选项与 ripgrep 一起工作,您需要创建自定义的 bash 脚本,这些脚本本身会使用所需的选项调用 just-the-code。您可以在 ripgrep 指南中找到更多信息。
配置
要配置 just-the-code,您需要创建文件 ~/.config/just-the-code/config.toml。其中包含一些全局选项,但大多数将是特定于语言的
# Whether or not to keep strings in the output
keep_strings = false
[lang.rust]
# Single-line comment tokens
line_comments = ["//"]
# Multi-line comment tokens, grouped as pairs
multiline_comments = [["/*", "*/"]]
# String delimiters
strings = ["\"", "'"]
# Tokens to ignore
blacklist = ["\\\"", "\\\\"]
# Whether or not to allow nested comments
nested_comments = false
just-the-code 的主要逻辑已经足够通用,以至于你只需要告诉它字符串和注释的样式,它就可以与你的选择语言一起工作。要做到这一点,你需要指定以下内容:
- 单行注释标记(
line_comments):例如//或#;在其后的任何内容都将被视为注释的一部分,并且在其后不能打开多行注释。 - 多行注释分隔符(
multiline_comments):例如/*和*/;它们之间的单行注释将被忽略。它们被分组为开/闭对。 - 字符串分隔符(
strings):在字符串中的注释标记将被忽略,在注释中的字符串分隔符也将被忽略。 - 黑名单标记(
blacklist):如果指定的标记与黑名单标记重叠,则不会匹配。这让你可以在字符串中黑名单",例如。 - 是否允许嵌套注释(
nested_comments):如果启用,那么a /* /* */ */ b将变为a b。如果禁用(默认情况下),相同的代码将变为a */ b。
" 的注意事项
如果你的语言使用 " 作为字符串,并且允许通过输入 \ 来在字符串中转义引号,那么简单地添加 \ 到黑名单是不够的:"\ 将解析错误,因为 " 将被视为一个转义的引号。
为了解决这个问题,黑名单标记被设计为相互排斥的:两个黑名单标记不能重叠。这意味着如果你还把 \ 添加到黑名单,那么 "\ 现在将正确解析:\ 被视为一个黑名单标记,阻止 " 被解释为转义的引号。
已知问题
当添加 --pre 时,ripgrep 的性能会显著下降,因为 ripgrep 实际上需要为每个搜索的文件执行一次 fork。将来有可能直接在 ripgrep 中集成 just-the-code,这样所有操作都可以在同一个进程中完成。
依赖项
~2–12MB
~103K SLoC