我是doctest的作者,它是 JavaScript 和 CoffeeScript 的快速而肮脏的doctests。我想通过使用 JavaScript 解析器而不是正则表达式来定位注释,从而使库不那么脏。
- 创建 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
用来获取评论,但我不确定如何更新树。