112

我已经尝试过Metrics 插件,虽然它很好,但它不是我老板想要的。它只将一条线算作一条}线,他不希望将其视为“它不是一条线,它是一种风格选择”。我还需要生成某种形式的关于所提供指标的报告。有什么好的工具吗?

4

10 回答 10

281

总是有“蛮力”:

  1. 搜索->文件

  2. 在“包含文本”-> 中键入以下内容^.*$。然后选中“正则表达式”复选框

  3. 在“文件名模式”中键入以下内容 ->*.java

  4. 点击“搜索”

  5. 检查“搜索”选项卡中的匹配数。

于 2013-04-15T11:50:26.373 回答
96

安装Eclipse 指标插件。创建 HTML 报告(带有可选的 XML 和 CSV)right-click a project -> Export -> Other -> Metrics

您可以通过忽略空白行和仅注释行来调整代码行指标,或者根据需要排除 Javadoc。为此,请检查 处的选项卡Preferences -> Metrics -> LoC

就是这样。没有排除花括号的特殊选项{}

该插件为 LoC 提供了一个替代指标,称为Number of Statements。这是作者不得不说的:

该指标表示方法中的语句数。我认为它比代码行更强大,因为后者在不同的格式约定方面很脆弱。

编辑:

在您澄清问题后,我了解到您需要查看实时指标违规情况,例如编译器警告或错误。您还需要一个报告功能来为您的老板创建报告。我上面描述的插件是用于报告的,因为您必须在想要查看它们时导出指标。

于 2011-08-03T10:25:13.513 回答
23

如果在 OSX 或 *NIX 上使用

从 *.java 文件中获取所有实际的 java 代码行

find . -name "*.java" -exec grep "[a-zA-Z0-9{}]" {} \; | wc -l

从 *.java 文件中获取所有行,包括空行和注释

find . -name "*.java" -exec cat | wc -l

获取每个文件的信息,这将为您提供 [ 文件路径 + "," + 行数]

find . -name "*.java" -exec wc -l {} \;
于 2012-08-16T10:16:04.573 回答
12

在 Eclipse 中计算代码行数的一种可能方法:

使用 Search / File... 菜单,选择 File Search 选项卡,为 Containing text 指定 \n[\s]*(这不会计算空行),然后勾选 Regular expression。

帽子提示:www.monblocnotes.com/node/2030

于 2015-01-16T20:54:09.747 回答
8

另一种方法是使用另一个 loc 实用程序,例如LocMetrics
它还列出了许多其他 loc 工具。与 Eclipse 的集成并不总是存在(与Metrics2 一样,您可以查看它,因为它是比Metrics更新的版本),但至少这些工具可以根据逻辑线进行推理(通过求和计算终端分号和终端花括号)。
您还可以检查eclipse-metrics是否更适合您的期望。

于 2011-08-03T09:25:18.863 回答
7

另一个工具是Google Analytix,即使您无法构建项目以防出错,它也可以让您运行指标

于 2012-10-23T07:17:18.030 回答
1

我创建了一个 Eclipse 插件,它可以计算源代码的行数。它支持 Kotlin、Java、Java Script、JSP、XML、C/C++、C# 和许多其他文件类型。

请看一下。对于任何反馈,我们都表示感谢!

git-hub 仓库在这里

于 2016-06-14T00:50:04.663 回答
0

ProjectCodeMeter 完全按照您的描述计算 LLOC(逻辑代码行)(仅有效行)。它作为外部代码度量工具集成到eclipse 中,虽然它不是实时的,但它会生成一个报告。实际上它计算了许多源代码度量,例如复杂性、算术复杂性、硬编码字符串、数字常量.. 甚至以小时为单位估计开发时间.

于 2011-10-06T11:12:31.520 回答
0

对于静态分析,我使用并推荐了 SonarQube,它几乎可以在多种语言上运行您可能想要的所有指标,并且在基本版本中是免费的(您必须付费才能分析我想要的各种语言只用枪指着我的头输入代码)。

您必须将其安装为运行分析源代码存储库的 Web 应用程序,但它也有一个Eclipse 插件

如果您只是想一次性知道项目中有多少行代码,那就太过分了。如果您想通过时间跟踪指标、跨项目比较、超过阈值时发出警告等,这太棒了。

披露:我与 SonarSource 没有财务关系。

于 2013-10-21T12:41:25.910 回答
0

首先要做的是确定您对“代码行”(LOC)的定义。在你的两个问题中

它将只有一个 } 的行算作一行,他不希望这算作“它不是一行,它是一种样式选择”

在答案中,例如,

您可以通过忽略空白和仅注释行来调整代码行指标,或者如果需要排除 Javadoc

你可以看出人们对于一行代码的构成有不同的看法。尤其是,人们常常不清楚他们是否真的想要代码行数或语句数。例如,如果您有以下非常长的一行充满语句,您要报告什么,1 LOC 或数百个语句?

{ a = 1; b = 2; if (a==c) b++; /* etc. for another 1000 characters */ }

当有人问你叫什么 LOC 时,确保你能回答,即使它只是“我对 LOC 的定义是 Metrics2 的定义”。一般来说,对于最常用格式的代码(与我的示例不同),流行的工具会给出非常相似的数字,所以 Metrics2、SonarQube 等应该都可以,只要您始终如一地使用它们。换句话说,不要使用一种工具计算某些代码的 LOC,并将该值与使用不同工具测量的该代码的更高版本进行比较。

于 2019-10-23T19:05:05.967 回答