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