#代码搜索 #搜索 #代码 #空白字符 #处理 #解析器 #comby

app comby-search

使用Comby进行结构化代码搜索

5个版本

0.2.1 2023年3月16日
0.2.0 2023年3月14日
0.1.2 2023年3月14日
0.1.1 2023年3月14日
0.1.0 2023年3月13日

#716开发工具

BSD-3-Clause

425KB
72 代码行

Comby Search

Comby Search是一个方便的包装器,围绕Comby提供代码搜索功能。

为什么选择Comby Search?为什么选择Comby?

因为Comby默认提供了代码重写功能,在执行-match-only时没有漂亮的输出。Comby Search围绕Comby并解析-match-only输出,使其更容易搜索和查看结果。

为什么使用Comby?更多详情请见:https://github.com/comby-tools/comby#isnt-a-regex-approach-like-sed-good-enough

但简而言之:Comby提供的搜索功能比正则表达式更好。它自动处理空白字符(如果你曾经尝试在正则表达式中搜索多行代码,你就会知道),具有上下文感知(例如,它不会匹配注释代码)...

依赖项

Comby Search依赖于以下工具,您应该先安装它们

安装

您可以使用cargo安装

cargo install comby-search

或者从源代码编译。

用法

Usage: cb [OPTIONS] <QUERY>

Arguments:
  <QUERY>  Your code search query

Options:
  -f, --filter <PATTERN>      File filter pattern, for example: '*.ts,!*.spec.ts'
  -l, --line-margin <MARGIN>  Number of lines to display before and after the matched search result
  -h, --help                  Print help

要启动新的搜索,请运行以下命令。有关搜索语法的更多信息,请参阅Comby文档

$ cb '<search query>'

例如

$ cb 'struct :[A] { :[B] }'

您还可以使用以下命令限制搜索范围到一些特定的文件

$ cb -f '*.ts,*.java,!*.js' 'struct :[A] { :[B] }'

默认情况下,匹配结果将显示在前后各有3行边距,您可以使用--line-margin-l选项来更改此设置

$cb -l 10 'foo'

示例

以下是一些使用cb的搜索示例。

  1. 在TSX文件中查找所有箭头函数
$ cb -f '*.tsx,*.jsx' 'const :[1] = (:[2]) => { :[3] }'
  1. 是否有调用superFoo函数且参数为空字符串的调用?
$ cb 'superFoo(:[2] "" :[3])'
  1. 在所有Java文件中查找所有for循环,但不包括测试文件
$ cb -f '!*Test.java' 'for ([:1]) { :[2] }'
  1. 查找所有返回String的Rust函数
$ cb -f '*.rs' 'fn :[1] (:[2]) -> String'
  1. 查找Rust特质(你能区分吗?)
$ cb 'trait :[1] { fn :[2](:[3]); }'

# and

$ cb 'trait :[1] { fn :[2](:[3]) -> :[4]; }'

依赖项

~1–11MB
~75K SLoC