我是doctest的作者,快速和脏doctests为JavaScript和CoffeeScript。我想通过使用JavaScript解析器而不是正则表达式来定位注释,从而减少库的脏问题。替换JavaScript中的评论AST与从评论的内容派生的子树
- 创建AST
- 走的树,并为每个注释节点:
- 创建一个从评论的AST节点的文本
- 用此子树替换主树中的注释节点
输入:
!function() {
// > toUsername("Jesper Nøhr")
// "jespernhr"
var toUsername = function(text) {
return ('' + text).replace(/\W/g, '').toLowerCase()
}
}()
输出:
!function() {
doctest.input(function() {
return toUsername("Jesper Nøhr")
});
doctest.output(4, function() {
return "jespernhr"
});
var toUsername = function(text) {
return ('' + text).replace(/\W/g, '').toLowerCase()
}
}()
我不知道如何做到这一点。 Acorn提供了一个walker,它接受一个节点类型和一个函数,并在每次遇到指定类型的节点时遍历调用该函数的树。这似乎很有前途,但不适用于评论。
与Esprima我可以使用esprima.parse(input, {comment: true, loc: true}).comments
来获得评论,但我不知道如何更新树。
你试过[JSShaper](https://github.com/olov/jsshaper)吗? –
我不知道那个项目。看起来很有希望。 – davidchambers