`@babel/generator`の`experimental_preserveFormat`オプション
DRANK

というものを見つけて、個人的に大変学びだったので。名前こそ実験的って言ってるけど、追加されたのはもう2年も前だった。Add experimental format-preserving mode to @babel/generator majorであるv8になっても、prefixが取れなかったということにはなる。どういうオプションか端的にいうと、まずコード文字列をASTにするそのASTをtransformしたりしてASTをまた文字列に戻すこの最後の段階で、できるだけ“元コード文字列に近い状態に復元するのをがんばる”よっていうオプション。がんばらない場合たとえば、const x = [ 1, 2 ];というコードをASTにすると、基本的には、constで宣言された変数で、名前はx中身は配列で、数字の1と2という情報だけが残る。なのでASTを文字列に戻すと、たいていこうなる。const x = [1, 2];スペースとか改行とか、意味のないものたちは消える。コメントが絡むと自体はより複雑になる。たとえば、// c0 for /*c1*/ (;/*c2*/;) { /*c3*/ }この手の実装では、コメントの所有をそれぞれASTのノードにattachする。しかしこの場合は、c0: ForStatementの前、leadingなコメントとわかるc1: ForStatementの内側ではあるな?.initよりは前かな…

leaysgur.github.io
Related Topics: JavaScript
1 comments