私はdoctest、JavaScript および CoffeeScript の迅速で汚いdoctestの作成者です。コメントの検索に正規表現ではなく JavaScript パーサーを使用して、ライブラリの汚れを軽減したいと考えています。
EsprimaまたはAcornを使用して、次のことを行いたいと考えています。
- 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 は、ノード タイプと関数を受け取るウォーカーを提供し、指定されたタイプのノードに遭遇するたびに関数を呼び出してツリーをウォークします。これは有望に思えますが、コメントには当てはまりません。
Esprima を使用esprima.parse(input, {comment: true, loc: true}).comments
するとコメントを取得できますが、ツリーを更新する方法がわかりません。