Я автор doctest, быстрый и грязный доктрины для JavaScript и CoffeeScript. Я хотел бы сделать библиотеку менее грязной, используя парсер JavaScript, а не регулярные выражения для поиска комментариев.
Я хотел бы использовать Esprima или Acorn, чтобы сделать следующее:
- Создайте AST
- Пройдите дерево, и для каждого комментария node:
- Создайте AST из комментария node text
- Заменить комментарий node в главном дереве с помощью этого поддерева
Ввод:
!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, который принимает тип и функцию node и выполняет дерево, вызывающее функцию каждый раз, когда встречается node указанного типа. Это кажется многообещающим, но не относится к комментариям.
С Esprima я могу использовать esprima.parse(input, {comment: true, loc: true}).comments
для получения комментариев, но я не уверен, как обновлять дерево.