虽然可能有其他用例可以在运行时直接在 Node 中要求 PEGJS 文件,但此问题的主要目的是代码覆盖(例如,用于 Mocha 测试)。
后一种代码覆盖用例首先需要首先实现#93(提供源映射)。 如果实施,可以避免需要一个单独的测试副本 + peg 代码。
我看到 Node 的require.extensions
用于为ts-node
完成此操作,尽管根据围绕https://stackoverflow.com/的讨论,在 Node 中技术上不推荐使用require.extensions
questions/28884377/better-way-to-require-extensions-with-node-js (特别是在这个答案的脉络中),这似乎是这里唯一实用的机制,根据评论,我不认为我们不得不担心 Node 会破坏 Babel。
我宁愿不允许这样。
@ExE-Boss:对于我们的用例,它只是用于测试(另外,不确定您是否注意到这是 pegjs 存储库。)
我知道这是PEG.js 存储库,这正是我反对在这里实现它的原因。
好的,很酷......(我有时可以点击另一个仓库的链接而不会注意到它不是一个单独的问题,所以只需确保):)
直到 2017 年让我们使用 es6 模块和箭头的两行代码出来之前,没有更多的功能。
此外,看起来您真正想要的是测试
您不会将覆盖挂钩放在库中。 你把它们放在测试文件中。
如果你想要覆盖,你可以安装jest
就可以了。 它自动包含您需要的所有内容,无需对库进行任何修改。 覆盖工具旨在从外部添加,而不是从内部添加。
这个解析器生成器不应该突然作为内部功能与node.js
包生态系统联系在一起。
此外,覆盖是解析器的错误愿望。 考虑以下:
Food
/ "Peanuts"
/ "Shellfish"
/ "Rice"
现在,只需为大米写一个测试。 peg
将首先尝试Peanuts
,然后当它不起作用时peg
将尝试Shellfish
,然后peg
将尝试Rice
请注意,您只为Rice
编写了一个测试,但是您错误地显示了所有三个的覆盖率
Packrat 解析器的工作方式(老实说,我能想到的解析器的方式)意味着覆盖是假的
不要浪费你的时间
至于将覆盖挂钩放入库中,通常会将它们放入测试中,是的,但是当解析器自动生成时,一些分支相关而一些不相关,那么自动生成器产生这个是有意义的这样那些不想忽略其解析器文件的项目就可以这样做。 它与 pegjs 库的覆盖率无关(它有自己的覆盖率要求),而是与生成的解析器对语法的使用的覆盖率有关。
在您的示例中,生成的解析器有几行代码来检查“花生”、“贝类”和“大米”,如果它们没有被覆盖,它们确实可以被报告。
像ruleA = ruleB / ruleC
这样的规则是否应该检查“ruleA”是否同时具有“ruleB”和“ruleC”的情况,或者检查“ruleA”、“ruleB”是否足以成为一个开放的问题, 和 "ruleC" 都以某种方式被覆盖(例如,如果有一个ruleD = ruleB / ruleF
,它对ruleB
的覆盖可能会被某些项目视为足以避免检查它是否被覆盖的需要“ruleA”,尤其是在有很多替代方案和组合的情况下)。
就这个问题而言,可能有一个入口文件添加了该功能,而另一个没有。
@brettz9 - 我正要说“我正在和其他人谈论同样的事情”,然后我意识到是你,所以,我将停止这个讨论的例子,转而支持我们的类似例子在#633 上,如果你觉得还可以的话
我现在在那里写很长的东西
最有用的评论
@brettz9 - 我正要说“我正在和其他人谈论同样的事情”,然后我意识到是你,所以,我将停止这个讨论的例子,转而支持我们的类似例子在#633 上,如果你觉得还可以的话
我现在在那里写很长的东西