在Haxe项目中查找未使用的类或死代码

4
有没有一种自动获取Haxe项目中未使用类列表的方法?我没有找到相关文档,但信息应该可以在某个地方获得。就像死代码消除后的差异一样。
2个回答

3
通过使用-D dce-debug进行编译,您可以获得一个DCE日志。 (手册中的相关条目) 例如,使用haxe --interp -main Hello -D dce-debug编译class Hello { static function main() trace("Hello!"); }会产生类似以下的内容:
...
[DCE] Removed field Type.getClass
[DCE] Removed field Type.getEnum
[DCE] Removed field Type.getSuperClass
[DCE] Removed field Type.getClassName
[DCE] Removed field Type.getEnumName
[DCE] Removed field Type.resolveClass
[DCE] Removed field Type.resolveEnum
[DCE] Removed field Type.createInstance
[DCE] Removed field Type.createEmptyInstance
[DCE] Removed field Type.createEnum
[DCE] Removed field Type.createEnumIndex
[DCE] Removed field Type.getInstanceFields
[DCE] Removed field Type.getClassFields
[DCE] Removed field Type.getEnumConstructs
[DCE] Removed field Type.typeof
[DCE] Removed field Type.enumEq
[DCE] Removed field Type.enumConstructor
[DCE] Removed field Type.enumParameters
[DCE] Removed field Type.enumIndex
[DCE] Removed field Type.allEnums
[DCE] Removed class Type
[DCE] Removed enum ValueType
...

谢谢您的回答,但是-D dce-debug会在字段级别上返回日志,而不是类级别。我将使用-D dump=pretty并在源文件和转储文件列表之间进行差异比较。 - ali_o_kan
这很有道理(因为DCE显然必须在字段上工作),但这太糟糕了。 : / 无论如何,比较AST转储将是我的备选计划... - Jonas Malaco
实际上,-D dce-debug 还会输出已删除的类和其他类型:[DCE] Removed class haxe.io.Bytes。你不能使用 grep(Unix/Linux/Mac)或 find(Windows)过滤这些行吗? - Jonas Malaco
1
经过调查,dce-debug 只提供了部分答案。因为 DCE 仅分析项目中使用的代码。如果您的项目中没有对某个类的引用(从主类开始),它将不会出现在 DCE 日志中。 - ali_o_kan

2

最后,我混合了两种解决方案来得到完整的答案。

  • 第一种是在源路径中的Haxe文件和详细模式编译中解析的类之间的差异。
  • 第二种是使用dce-debug和源路径中的文件进行比较。感谢@jonasmalacofilho

您可以在gist上找到我的脚本:https://gist.github.com/aliokan/0a9abded7c079ad0260f651245964db2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接