estools / escodegen

ECMAScript code generator
BSD 2-Clause "Simplified" License
2.64k stars 334 forks source link

Comment(s) in parenthesis statement being removed #426

Open lucivpav opened 3 years ago

lucivpav commented 3 years ago

Problem with escodegen.attachComments (and maybe also with esprima.parse). See https://github.com/estools/escodegen/blob/master/test/comment.js or #427 PR for reproduction.

Input:

function foo(a, b, c) {
    return (
        (a >= b && a <= c)

        // lorem
        // ipsum
        || a === 42 || a === 666
    );
}

Output:

function foo(a, b, c) {
    return a >= b && a <= c || a === 42 || a === 666;
}

Suggested output:

function foo(a, b, c) {
    // lorem
    // ipsum
    return a >= b && a <= c || a === 42 || a === 666;
}
Meir017 commented 3 years ago

the more problematic scenario is when having an arrow function returning an object expression in this scenario the generated code is actually invalid

() => (
// comment
{
  a: 1, b: 2
})

output:

() => // comment
{
    a: 1,
    b: 2
});

suggested output:

() => ( // comment
{
    a: 1,
    b: 2
)});
lucivpav commented 3 years ago

@Meir017 looks like this belongs to the related issue #365. Nice catch!

Itazulay commented 3 years ago

@lucivpav we also need to support this syntax: var a = b => ({}.hasOwnProperty.call(b, "c")); which actually translates to a CallExpression