Skip to content

Commit

Permalink
Merge pull request #245 from EricSmekens/fix-nested-new-expressions
Browse files Browse the repository at this point in the history
Fix nested 'new' expressions update correct node
  • Loading branch information
6utt3rfly authored Feb 7, 2023
2 parents b955cd5 + b1fae2b commit eab6495
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 3 deletions.
9 changes: 6 additions & 3 deletions packages/new/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ export default {
}
env.node = node.argument;

// Change CALL_EXP to NewExpression (could be a nested member)
// Change CALL_EXP to NewExpression (could be a nested member, even within a call expr)
let callNode = env.node;
while (callNode.type === 'MemberExpression') {
callNode = callNode.object;
while (callNode.type === jsep.MEMBER_EXP || (
callNode.type === jsep.CALL_EXP && callNode.callee.type === jsep.MEMBER_EXP)) {
callNode = callNode.type === jsep.MEMBER_EXP
? callNode.object
: callNode.callee.object;
}
callNode.type = 'NewExpression';
}
Expand Down
62 changes: 62 additions & 0 deletions packages/new/test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,68 @@ const { test } = QUnit;
}, assert);
});

test('should parse multiple nested new expressions', (assert) => {
testParser('new Date(new Date().setDate(new Date().getDate() - 5))', {
type: 'NewExpression',
arguments: [
{
type: 'CallExpression',
arguments: [
{
type: 'BinaryExpression',
operator: '-',
left: {
type: 'CallExpression',
arguments: [],
callee: {
type: 'MemberExpression',
computed: false,
object: {
type: 'NewExpression',
arguments: [],
callee: {
type: 'Identifier',
name: 'Date'
}
},
property: {
type: 'Identifier',
name: 'getDate'
}
}
},
right: {
type: 'Literal',
value: 5,
raw: '5'
}
}
],
callee: {
type: 'MemberExpression',
computed: false,
object: {
type: 'NewExpression',
arguments: [],
callee: {
type: 'Identifier',
name: 'Date'
}
},
property: {
type: 'Identifier',
name: 'setDate'
}
}
}
],
callee: {
type: 'Identifier',
name: 'Date'
}
}, assert);
});

[
'new A().b',
'new A()["b"].c + 2',
Expand Down

0 comments on commit eab6495

Please sign in to comment.