为 sloccount 添加语言支持

Add language support to sloccount

有没有办法告诉 sloccount 有些文件已经不是现有的语言,而是一种新的(不同的)语言(一些 DSL,sloccount、scala、go、rust 不支持的语言...)但不是基于文件扩展名,而是基于它们的内容(例如包含一些特定的关键字或特定风格的评论,我可以为该工具提供完整的令牌列表等)。

是否有更好的工具(简单)来完成这项特定任务?

提前致谢。

Op writes: Is there is a better tool (simple) for the job for this specific task ?

您需要的是一种了解多种语言的工具,可以使用文件扩展名作为提示,并使用文件内容作为完整性检查或分类(如果扩展名不存在)。

Semantic Designs'(我的公司)File Inventory 工具扫描大量文件并分类 它们。文件扩展名暗示内容。当没有文件扩展名时,一组 user-definable 正则表达式用于尝试对文件类型进行基本分类。一旦文件内容被猜测,第二遍使用语言准确的词法扫描器来确认内容是它声称的提供置信度的内容。 (它也可以在没有词法扫描器的情况下工作......你只会得到提示的类型)。

FileInventory 本身不计算源代码指标。 (它确实计算文件大小和看起来包含文本的文件的行数)。但它确实为分类文件制作了项目文件来驱动我们的Source Code Search Engine (SCSE), a tool for search large code bases in multiple languages. A side effect of SCSE scanning the code base to index it for fast access, is the computation of basic metrics: lines, SLOC, comments, Halstead, McCabe metrics (example output)。

[我们有一个特殊的词法分析器叫做"Ad Hoc Text"。这试图模拟在无数 how-to 计算机书籍中发现的随机编程语言,因此它知道典型的注释 /* ... */ -- ... ,各种引用字符串“...” '....' ....,很多数字文字类型(十进制,浮点数),典型关键字 'function' 'if' 'do' 等。使用 这个词法分析器 SCSE 可以部分地分析大多数随机选择的编程语言,但它足以计算 not-terribly 不准确的指标。对于人们经常在庞大的源代码库中找到的所有未分类的源代码,这真的很方便。]

所以 FileInventory 和源代码搜索引擎的组合似乎可以大规模地做你想做的事。就内部实现方式而言,这些工具并不是我所说的简单(做任何了解编程语言细节的事情实际上都非常复杂),但它们配置起来非常简单并且 运行.

您可以将 findwc -l 一起使用以获得与 sloccount 类似的结果。

如果您在您的项目目录中,您可以运行以下获取项目中的代码行数:

find . -name '*.scala' -print0 | wc -l --files0-from=-

注意它也计算空行,如果你想跳过空行你可以添加一个grep -v:

find -name '*.scala' -exec grep -v -e '^[[:space:]]*$' {} \; | wc -l