Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

esprima系統のtoolはどれも自分の仕事領域を綺麗に分割していて,

  • esprima
    • codeを受け取って, Parser API ASTを返す(tree)
  • escodegen
    • ASTを受け取って, 適切なcodeに変換する
    • この時, codegenの職務の一つとして, codeの意味を変えない形での圧縮も可能 (spaceやindentの削除など)
  • esmangle
    • ASTを受け取って, 変数名の短縮, true / falseなどを!0 / !1に変換したりなどして圧縮したASTを返す

というふうになっている. esprimaはparseしたASTにloc optionを指定するとlocation informationを付けることができる. この時, escodegenはlocation informationを用いてsource mapを出力できるようになった.

これはどのように使えるかというと, 例えば, CoffeeScriptRedux projectでは以下の様な経路を通り, compileが行われる.

CoffeeScript code => [parser] => CoffeeScript AST (CSAST) => JS AST (Parser API AST) => [escodegen] => JS code

この時, CoffeeScriptRedux compilerは, CSAST => JSAST変換時に, CoffeeScriptでのlocation informationをJSASTにつけながら変換する. 結果, JSAST上に, CoffeeScriptのsource mapping情報が保存されており, escodegenによって自動的にCoffeeScriptへのsource mapを取得することができる.

@Constellation

This comment has been minimized.

Copy link
Owner Author

@Constellation Constellation commented Sep 7, 2012

そして今esmangleでは, 圧縮や書き換えを行った際に, 元々のlocation informationをきちんと残そうという風に計画している. これがうまくいくと,

CoffeeScript code => [parser] => CoffeeScript AST (CSAST) => JS AST (Parser API AST) => [esmangle] => Compressed JS AST => [escodegen] => JS code

という風にでき, この時, 最後までちゃんとCoffeeScriptのlocation informationがescodegenに行くので, 圧縮済みscriptのoriginal coffee scriptへのmappingが得られる.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.