JavaScript AST Walker

JavaScript ASTを見て回る

Agenda

JavaScript ASTとは

SpiderMonkey Parser API: A Standard For Structured JS Representations // Speaker Deck を参照

JS AST Structure

AST Image

JS AST as JSON

AST Image

Try JavaScript AST

パーサ

JavaScriptのコードから JS ASTを生成する

ジェネレーター

JS Code -> esprima -> AST -> escodegen -> JS Code

    parse(generate(parse(code))) === parse(code)

ここまでのまとめ

More detail

どんなもので使われてるの?

コードカバレッジツール

JS ASTを変換して、コード上にカバレッジ検出コードを埋め込んでいく

istanbul-html

istanbul-karma

blanket

ESLint

reQUnit

reQunit : before

Qunit

reQunit : after

Jasmine

regenerator

grasp

$ grasp -e "return __.length > __" lib/reQUnit.js
58:        return node.expression["arguments"].length > 1;

esgraph + graphviz

DEMO

esgraph + graphviz

detail

どうやってツールを書くの

TreeWalker

JavaScript AST Traversal lib

Traversal


ASTセレクタ

AST変換

Rephrase example

/* forall a f g. */
/* a.map(f).map(g) */
/* a.map(compose(f, g)) */

[1, 2, 3].map(add(1)).map(add(2));
// =>
[1, 2, 3].map(compose(add(1), add(2)));

Other

Nitraにより皆様はパーサーや言語実装のエキスパートでなくても独自のDSLを開発することが出来るようになり、同時にエラーチェックやシンタックスハイライトといったIDEの機能を活用することができます