¶静态分析
¶cloc
统计代码行数,由perl实现。
cloc {{file/directory}}
--by-file
:按文件统计,而不是按语言--exclude-list-file=<file>
--exclude-dir=<D1>[,D2,]
¶diff
¶git diff
git diff --no-index --word-diff=color file1 file2
--word-diff-regex=.
可以以字符为单位进行比较,默认情况下word-diff
以word为单位,即连续的非空白字符。
¶git-delta
1 | git diff | delta # 配置.gitconfig中的pager就不需要再管道传到delta |
¶difft
基于语法进行diff
。
1 | difft --help |
¶bat
just replace cat
¶fd
查找文件,由rust实现,是find的替代品。
fd {{pattern}} [directory]
:默认为正则匹配,可以指定目录,不指定则搜索当前目前--extension
:查找扩展名--exclude
:排除某些文件或目录--no-ignore
:默认会遵守目录下的.gitignore
,指定该选项则不遵守
¶rg
查找文件内容,由rust实现,是grep的替代品。
rg {{pattern}} [path ...]
:搜索文本为正则匹配--type {{filetype}}
:指定要查找的文件类型-i
:大小写不敏感--glob {{pattern}}
:仅查找匹配glob模式的文件--files-with-matches
:只列出存在匹配的文件名-A/-B/-C N
:打印匹配行以及后/前/前后N行--files
:查找文件名
¶ast-grep
基于Tree-sitter进行代码搜索、替换,由rust实现。它基于AST节点(其实是CST,AST是抽象语法树,而Ts生成的CST是具体语法树,它为每个token都存储了一个对应的节点,即使是逗号、括号等字符串字面量,而AST则会去掉这些无意义的节点;这里称作命名节点和匿名节点)进行结构匹配,而不是简单的文本匹配。
ast-grep [OPTIONS] --p <PATTERN> [PATHS]...
:- PATTERN:AST模式
- 元变量:
$
开头后跟大写字母、下划线或数字1-9,匹配单个AST节点(类比正则中的.
) - 多元变量:
$$$
来匹配零个或多个AST节点(类比正则中的*
) - 元变量捕获:可以重复使用同名变量,此时它们被要求匹配相同的内容,可以用下划线开头来抑制该行为
- 匿名节点:
$$
开头,即CST中直接用字符串字面量定义的,比如+/,/;
等
- 元变量:
-l
:指定语言--rewrite
:改写替换--interactive
:交互模式-A/-B/-C