"错误-6ren"> "错误-尝试编译自动生成的示例测试(使用标准 haxelib run munit gen 制作,然后使用 haxelib run munit t 运行,带或不带 -coverage)用于 HaxeFlixel-6ren">
gpt4 book ai didi

compiler-errors - MUnit 和 MOver "Invalid package...should be "错误

转载 作者:行者123 更新时间:2023-12-02 14:33:24 26 4
gpt4 key购买 nike

尝试编译自动生成的示例测试(使用标准 haxelib run munit gen 制作,然后使用 haxelib run munit t 运行,带或不带 -coverage)用于 HaxeFlixel 游戏(flash 目标),在 Windows 7 上使用 MUnit 2.1.2 和 Haxe 3.2.1。我得到:

HaxeWrapper.hx:73: --macro:1: character 0 : Invalid package : subfolder should be <empty>

...其中 subfolder 是我的主 source 目录的子文件夹。游戏本身编译得很好,到处都引用了 subfolder.* (和 subfolder.nestedsubfolder.* 等)包,还有 中的一些类source 本身与命名空间只是 package;

给出的行号并没有准确地告诉我我的项目中可能需要修复什么...在我尝试(在我的头脑中)挖掘 HaxeWrapper.hx 之前,这是具有子文件夹/不同包的已知问题项目中的名称或其他什么?

顺便说一句,我有另一个项目,这种情况不会发生,但在该项目中,source 仅包含一个子文件夹,并且其中的所有内容都共享相同的包命名空间(即 package subfolder; )。 (这就是我的问题。)

更新

我之前也让 mcover 参与我的项目,只是为了手动测试指标。从那时起,它增长了很多,因此,我将内容组织到包子文件夹中。同时我没有在启用 mcover 的情况下尝试它,因为它使调试过程中的单步执行更加麻烦。现在,当我重新启用 mcover 时,我的项目将无法编译,并给出与上述相同的错误消息,但没有 HaxeWrapper.hx:73: 前缀。

最佳答案

我认为这意味着您正在将文件自动生成到 subfolder 中,而其中没有 package subfolder; 。我以前从未听说过 mcover,但似乎在某些代码导致 Haxe 在文件系统中查找 Haxe 类文件并且 Haxe 发现该文件没有 package< 时,会产生类似的错误消息 语句与 Haxe 找到它的路径相匹配。但是,它会产生与您预期不同的错误。

预期错误示例

子文件夹/MyClass.hx:

class MyClass {
public static function main() {
Sys.println("hi");
}
}

输出:

>haxe -cpp x.cpp subfolder.MyClass
Invalid commandline class : subfolder.MyClass should be MyClass

这是我在尝试访问 MyClass 时希望看到的错误。但是,似乎只有当 Haxe 最初尝试解析指定为入口点的类名时,才会出现此有用的错误消息。

相同的原因,不同的错误

假设您仍然有如上所述的 subfolder/MyClass.hx,请使用正确的 package 语句添加一个新类:

子文件夹/AnotherClass.hx:

package subfolder;

class AnotherClass {
static function main() {
MyClass.main();
}
}

输出:

>haxe -cpp x.cpp subfolder.AnotherClass
subfolder/AnotherClass.hx:5: characters 4-11 : Invalid package : subfolder should be <empty>

如果我转到 AnotherClass.hx:5:5 (字符 4-11 似乎是 0 索引?),我会看到 MyClass.所以真正令人窒息的是它期望加载 subfolder.MyClass 但在加载模块后,模块声称其完全限定名称是 MyClass 因为它没有package 语句。

问题的应用

因此,据我猜测,您的 mcover 东西正在生成缺少 package 语句的文件。如果它有像​​ -namespace-root-package 这样的选项,或者您可以告诉它分析 . 目录而不是 ./subfolder,它可能会表现得更好。您是否向 mcover 工具传递了与传递给 haxe -cp 的值不同的值?

基于 mcover 所做的另一个想法是,它引用项目中缺少 package subfolder; 的 .hx 文件。如果我将 AnotherClass.hx 更改为不调用 MyClass.main(),我可以使用 subfolder.AnotherClass 作为入口点成功编译。看起来,如果 Haxe 正在分析的其他代码没有引用它,它甚至不会尝试解析/读取 MyClass.hx。使用覆盖工具,该工具可能会尝试包装/自动生成引用它发现的所有文件的代码,甚至是 Haxe 本身通常不会编译的文件。当然,这样做的目的是找出哪些代码永远不会被覆盖/永远不会运行;-)。

总而言之,如果您可以在错误消息引用的源代码位置找到类名,然后检查 Haxe 根据类名加载的 .hx 文件,您可能会发现缺少 package 语句。虽然我不确定当错误没有源代码位置时你能做什么。

关于compiler-errors - MUnit 和 MOver "Invalid package...should be <empty>"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com