dav*_*ers 5 javascript evaluation abstract-syntax-tree node.js
我维护doctest。该库使用 ECMAScript 解析器 (Esprima) 从 JavaScript 源文件中提取注释,然后在这些注释中识别 \xe2\x80\x9cdoctests\xe2\x80\x9d。例如:
\n\'use strict\';\n\n// identity :: a -> a\n//\n// > identity (42)\n// 42\nconst identity = x => x;\nRun Code Online (Sandbox Code Playgroud)\n然后 AST 被丢弃,JavaScript 代码被拼接到原始源文本中代替文档测试。想象一下类似下面的事情:
\n\'use strict\';\n\n// identity :: a -> a\n//\n__doctest.enqueue (() => {\n assert.strictEqual (identity (42), 42);\n});\nconst identity = x => x;\nRun Code Online (Sandbox Code Playgroud)\n然后,修改后的源文本将保存到文件系统中。最后,新创建的文件通过 导入require。
这种方法有效,但比较迂回:
\nSourceFile -> SourceText -> AST -> SourceText -> SourceFile -> SourceText -> AST -> Result\n=(foo.js)= (original) --------> (modified) =(tmp.js)= ====(require)====\nRun Code Online (Sandbox Code Playgroud)\n相反,我想这样做:
\nSourceFile -> SourceText -> AST -> AST -> Result\nRun Code Online (Sandbox Code Playgroud)\n我知道如何进行AST -> AST转变。我不知道如何评估修改后的 AST。当然,没有必要将 AST 转换为 JavaScript 源文本,只是让 Node.js 读取源文本并重新创建 AST!
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |