(编辑:请参阅底部的正确使用部分。 )
主要问题
你如何cloc
使用它的--exclude-list-file=<file>
选项?本质上,我试图给它一个.clocignore
文件。
预期行为
cloc
文档说明如下:
--exclude-list-file=<file> Ignore files and/or directories whose names
appear in <file>. <file> should have one entry
per line. Relative path names will be resolved
starting from the directory where cloc is
invoked. See also --list-file.
尝试
以下命令按预期工作:
cloc --exclude-dir=node_modules .
但是这个命令不排除任何东西:
cloc --exclude-list-file=myignorefile .
这是的内容myignorefile
:
node_modules
node_modules/
node_modules/*
node_modules/**
./node_modules
./node_modules/
./node_modules/*
./node_modules/**
/full/path/to/current/directory/node_modules
/full/path/to/current/directory/node_modules/
/full/path/to/current/directory/node_modules/*
/full/path/to/current/directory/node_modules/**
cloc
如果不存在就不会出错,所以我对它在做什么没有任何反馈。myignorefile
(我正在运行 OS X 并cloc
通过 Homebrew 安装 v1.60。)
正确使用
tl;dr ——@Raman 的答案中指定的方法既不需要指定,.clocignore
也运行得更快。
在@Raman 的回答的推动下,我调查了源代码:cloc
实际上尊重--exclude-list-file
但处理它的方式与--exclude-dir
两种重要方式不同。
确切的文件名与“路径的一部分”
首先,while--exclude-dir
将忽略路径包含指定字符串的任何文件,--exclude-list-file
只会排除.clocignore
.
如果你有这样的目录结构:
.clocignore
node_modules/foo/first.js
app/node_modules/bar/second.js
而内容.clocignore
只是
node_modules
然后cloc --exclude-list-file=.clocignore .
将成功忽略first.js
但计数second.js
。而cloc --exclude-dir=node_modules .
将忽略两者。
为了处理这个,.clocignore
需要包含这个:
node_modules
app/node_modules
表现
其次, 的源代码cloc
似乎将 中指定的目录添加--exlude-dir
到列表中,然后在计算文件之前查阅该列表。--exclude-list-file
而在对文件进行计数后会查询由发现的目录列表。
意思--exclude-list-file
是,在忽略最终报告中的结果之前,仍然会处理可能很慢的文件。实验证明了这一点:在示例代码库中,使用 运行需要半秒,使用等效运行需要 11cloc
秒。--exclude-dir
--exclude-list-file