最近のASTパーサの動き
自己紹介
azu
@azu_re
Web scratch, JSer.info
Esprima
- Owner: @ariya
- Spidermonkey Parser APIのASTを元に実装したJavaScriptパーサ
- JavaScriptパーサのデファクト的な立ち位置
Esprimaの問題
- Spidermonkey AST自体にはES6等の対応がない(ES6はまだだったので)
- Harmony Branchで実装FirstでES6対応をやっていた
- 微妙にパーサ間でES6のASTに齟齬がでてきた
- 加えて@ariyaが忙しいので対応に遅れがでてきた
- (@ariyaは後述するShift ASTを推奨する方向)
Esprima-FB
- Owner: Facebook
- JSX/FlowTypeサポート
- Esprima/Harmony Branchのfork
- Esprima/HarmonyへContributeしてる
- ECMAScript6についても一部サポート
espree
espree
- Owner: ESLint
- ESLintプロジェクトの一つ
- Esprima(not Harmony branch)のfork
- 目的
- ECMAScript 6のopt-inサポート
- 対応する機能を
ecmaFeatures
で指定出来る
- 対応する機能を
- JSXのオプショナルサポート
- ECMAScript 6のopt-inサポート
espree進捗
- Add ECMAScript 6 features · Issue #10 · eslint/espree
- Esprima-FB >= espree > Shift-ASTという感じの進捗
FAQ of espree | Esprima
- Why Esprima fork?
- Esprimaの進捗が遅い
- Bug登録とかしたけど、反応がなかった
I've also been filing bugs on the Esprima bug tracker and getting no updates and no indication if a fix is forthcoming. -- Investigate supporting ES6/JSX · Issue #1291 · eslint/eslint
FAQ of espree | Esprima-fb
- Why don't use Esprima-fb fork?
- Esprima-fbはharmoneyベース
- Harmony由来の問題があるのでパス(Esprimaの進捗の問題を引きずってしまう)
- Is there a reason why you don't contribute to esprima-fb
FAQ of espree | acorn
- Why don't use Acorn?
- ESLintはASTだけではなく詳細度の高い
token
にも依存してる tokens
はAcornとEsprimaで大きく異なるためパス- (コメントとかwhite spaceみたいなASTでは表現できない部分の違い)
- ESLintはASTだけではなく詳細度の高い
(Why not use Shift AST)?
- (個人の感想 :thought_balloon:)
- 今はmoving forwardを優先
- Shift ASTもまだES6対応は未完ではある
- Acorn-jsx or Esprima-fbで消耗したので、自分でコントロール出来る場所にあったほうがいいという結論?
- Shift ASTの完成度が変わるとespreeの動きがあるかも?
:memo: espree
- acorn Pluggable extensions support? · Issue #168 · marijnh/acorn
- jQuery Fundation jQuery Foundation adopts Esprima · Issue #42 · eslint/espree
- Start point: Investigate supporting ES6/JSX · Issue #1291 · eslint/eslint
- espree & Shift AST
Shift AST
- Shift AST Specification by Sharp Security
- Sharp Securityは@ariya/@michaelficarraがいる会社
- Shape Security Labs: Announcing the Shift JavaScript AST Specification
Shift Family
Create
- Shift Parser
- Shift AST Constructors
- Shift-SpiderMonkey Converter
- SpiderMonkey AST -> Shift AST
Shift Family
Transform
Shift Family
Analyse
Shift AST & ES6
- add support for ES6 · Issue #8 · shapesecurity/shift-parser-js (Implementation)
- まだES6の仕様策定も完全ではない
- Shape Security Labs: A Technical Comparison of the Shift and SpiderMonkey AST Formats
Thought on Shift AST
- Ariya/Esprima
This is not in the plan anymore. For the alternative syntax tree, check out https://github.com/shapesecurity/shift-spec.
- Esprimaの後継はShift AST
Shift ASTトリビア
- 元の名前は"LaserBat AST"
- change name to laserbat-spidermonkey-converter-js · Issue #1 · shapesecurity/shift-spidermonkey-converter-js
- Renamed to Shift AST by dwightmulcahy · Pull Request #4 · shapesecurity/shift-java
acorn
acorn
- Owner: @marijnh (CodeMirror/tern)
- Esprimaとは別起源のJavaScriptパーサ
- ASTレベルではEsprimaだと大体の互換性がある
- Spidermonkey AST + ES6(こっちは空気感的な互換)
acorn-jsx & acorn-6to5
- どちらも6to5の向け(パーサのみ)
- ジェネレータについては用意してない
- コンテキストが6to5に優先される
- 仕様とはあまり関わりがない
- :memo: Project scope and future · Issue #568 · 6to5/6to5
jQuery/Esprima?
- Airya -> jQuery Fundationに移管された
- jQuery Foundation adopts Esprima | Official jQuery Blog
今後の見どころ
- jQuery/Esprimaとなった事で開発方式はどうなるか?
- espree < 方向性が一緒ならばマージ出来るよう協力する
- jQuery Foundation adopts Esprima · Issue #42 · eslint/espree
- espree, 6to5はプロダクトがあるので開発急いでる感がある
- Shift AST的な仕様の話にどうやって巻き込むかが大切そう
- Haha, Hasbro sending a cease and desist to an open source project would make a good headline.
今後の見どころ
- Shift AST Specification
- 実装と仕様があるのは良い
- 勢いが少し足りない
- 他のASTを使ったプロダクトはちょっと勢いを求めてる感じ
- 他が勢いのまま進んで、振り出しに戻る事ないようなポジションが必要そう
Keep Track of People
- The list of JavaScript AST-related person.
- AST周りに関係ありそうな人たちのリスト