Skip to content

Instantly share code, notes, and snippets.

@Constellation
Created September 7, 2012 08:47
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save Constellation/3664429 to your computer and use it in GitHub Desktop.

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
Copy link
Author

そして今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