estools / escodegen

ECMAScript code generator
BSD 2-Clause "Simplified" License
2.65k stars 335 forks source link

Bug on ExportDefatultDeclaration's sourcemap generation #373

Open clark-t opened 6 years ago

clark-t commented 6 years ago

Bug description

raw code like:

export default {
  a() {}
}

escodegen generates sourcemap now is:

{
  mappings: 'AAAA;AAAA;AAAA;AAAA',
  // other properties
}

the correct sourcemap should be:

{
  mappings: 'AAAA,eAAe;AAAA,IACdA,CAAA,GAAI;AAAA,KADU;AAAA,CAAf'
}

Reason

I found out that L1213 cause this problem, which this.generateExpression(xxx) + this.semicolon(flags) turns SourceNode tree into string and lost sourcemap information.

I think the correct code should be:

// LINE 1213
result = join(result, this.generateExpression(stmt.declaration, Precedence.Assignment, E_TTT));
result.push(this.semicolon(flags));