@@ -14,7 +14,7 @@ const assert = require('assert')
14
14
// Helpers
15
15
// ------------------------------------------------------------------------------
16
16
17
- const KNOWN_NODES = new Set ( [ 'ArrayExpression' , 'ArrayPattern' , 'ArrowFunctionExpression' , 'AssignmentExpression' , 'AssignmentPattern' , 'AwaitExpression' , 'BinaryExpression' , 'BlockStatement' , 'BreakStatement' , 'CallExpression' , 'CatchClause' , 'ClassBody' , 'ClassDeclaration' , 'ClassExpression' , 'ConditionalExpression' , 'ContinueStatement' , 'DebuggerStatement' , 'DoWhileStatement' , 'EmptyStatement' , 'ExperimentalRestProperty' , 'ExperimentalSpreadProperty' , 'ExportAllDeclaration' , 'ExportDefaultDeclaration' , 'ExportNamedDeclaration' , 'ExportSpecifier' , 'ExpressionStatement' , 'ForInStatement' , 'ForOfStatement' , 'ForStatement' , 'FunctionDeclaration' , 'FunctionExpression' , 'Identifier' , 'IfStatement' , 'ImportDeclaration' , 'ImportDefaultSpecifier' , 'ImportNamespaceSpecifier' , 'ImportSpecifier' , 'LabeledStatement' , 'Literal' , 'LogicalExpression' , 'MemberExpression' , 'MetaProperty' , 'MethodDefinition' , 'NewExpression' , 'ObjectExpression' , 'ObjectPattern' , 'Program' , 'Property' , 'RestElement' , 'ReturnStatement' , 'SequenceExpression' , 'SpreadElement' , 'Super' , 'SwitchCase' , 'SwitchStatement' , 'TaggedTemplateExpression' , 'TemplateElement' , 'TemplateLiteral' , 'ThisExpression' , 'ThrowStatement' , 'TryStatement' , 'UnaryExpression' , 'UpdateExpression' , 'VariableDeclaration' , 'VariableDeclarator' , 'WhileStatement' , 'WithStatement' , 'YieldExpression' , 'VAttribute' , 'VDirectiveKey' , 'VDocumentFragment' , 'VElement' , 'VEndTag' , 'VExpressionContainer' , 'VFilter' , 'VFilterSequenceExpression' , 'VForExpression' , 'VIdentifier' , 'VLiteral' , 'VOnExpression' , 'VSlotScopeExpression' , 'VStartTag' , 'VText' ] )
17
+ const KNOWN_NODES = new Set ( [ 'ArrayExpression' , 'ArrayPattern' , 'ArrowFunctionExpression' , 'AssignmentExpression' , 'AssignmentPattern' , 'AwaitExpression' , 'BinaryExpression' , 'BlockStatement' , 'BreakStatement' , 'CallExpression' , 'CatchClause' , 'ClassBody' , 'ClassDeclaration' , 'ClassExpression' , 'ConditionalExpression' , 'ContinueStatement' , 'DebuggerStatement' , 'DoWhileStatement' , 'EmptyStatement' , 'ExperimentalRestProperty' , 'ExperimentalSpreadProperty' , 'ExportAllDeclaration' , 'ExportDefaultDeclaration' , 'ExportNamedDeclaration' , 'ExportSpecifier' , 'ExpressionStatement' , 'ForInStatement' , 'ForOfStatement' , 'ForStatement' , 'FunctionDeclaration' , 'FunctionExpression' , 'Identifier' , 'IfStatement' , 'ImportDeclaration' , 'ImportDefaultSpecifier' , 'ImportExpression' , 'ImportNamespaceSpecifier' , 'ImportSpecifier' , 'LabeledStatement' , 'Literal' , 'LogicalExpression' , 'MemberExpression' , 'MetaProperty' , 'MethodDefinition' , 'NewExpression' , 'ObjectExpression' , 'ObjectPattern' , 'OptionalCallExpression' , 'OptionalMemberExpression' , 'Program' , 'Property' , 'RestElement' , 'ReturnStatement' , 'SequenceExpression' , 'SpreadElement' , 'Super' , 'SwitchCase' , 'SwitchStatement' , 'TaggedTemplateExpression' , 'TemplateElement' , 'TemplateLiteral' , 'ThisExpression' , 'ThrowStatement' , 'TryStatement' , 'UnaryExpression' , 'UpdateExpression' , 'VariableDeclaration' , 'VariableDeclarator' , 'WhileStatement' , 'WithStatement' , 'YieldExpression' , 'VAttribute' , 'VDirectiveKey' , 'VDocumentFragment' , 'VElement' , 'VEndTag' , 'VExpressionContainer' , 'VFilter' , 'VFilterSequenceExpression' , 'VForExpression' , 'VIdentifier' , 'VLiteral' , 'VOnExpression' , 'VSlotScopeExpression' , 'VStartTag' , 'VText' ] )
18
18
const LT_CHAR = / [ \r \n \u2028 \u2029 ] /
19
19
const LINES = / [ ^ \r \n \u2028 \u2029 ] + (?: $ | \r \n | [ \r \n \u2028 \u2029 ] ) / g
20
20
const BLOCK_COMMENT_PREFIX = / ^ \s * \* /
@@ -539,7 +539,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
539
539
if ( t === 'VExpressionContainer' ) {
540
540
return node . range [ 0 ] === token . range [ 0 ]
541
541
}
542
- if ( t === 'CallExpression' || t === 'NewExpression' ) {
542
+ if ( t === 'CallExpression' || t === 'NewExpression' || t === 'OptionalCallExpression' ) {
543
543
const openParen = tokenStore . getTokenAfter ( parent . callee , isNotRightParen )
544
544
return parent . arguments . some ( param =>
545
545
getFirstAndLastTokens ( param , openParen . range [ 1 ] ) . firstToken . range [ 0 ] === token . range [ 0 ]
@@ -1051,7 +1051,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1051
1051
}
1052
1052
} ,
1053
1053
1054
- CallExpression ( node ) {
1054
+ ' CallExpression, OptionalCallExpression' ( node ) {
1055
1055
const firstToken = tokenStore . getFirstToken ( node )
1056
1056
const rightToken = tokenStore . getLastToken ( node )
1057
1057
const leftToken = tokenStore . getTokenAfter ( node . callee , isLeftParen )
@@ -1060,6 +1060,15 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1060
1060
processNodeList ( node . arguments , leftToken , rightToken , 1 )
1061
1061
} ,
1062
1062
1063
+ ImportExpression ( node ) {
1064
+ const firstToken = tokenStore . getFirstToken ( node )
1065
+ const rightToken = tokenStore . getLastToken ( node )
1066
+ const leftToken = tokenStore . getTokenAfter ( firstToken , isLeftParen )
1067
+
1068
+ setOffset ( leftToken , 1 , firstToken )
1069
+ processNodeList ( [ node . source ] , leftToken , rightToken , 1 )
1070
+ } ,
1071
+
1063
1072
CatchClause ( node ) {
1064
1073
const firstToken = tokenStore . getFirstToken ( node )
1065
1074
const bodyToken = tokenStore . getFirstToken ( node . body )
@@ -1171,12 +1180,16 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1171
1180
1172
1181
'ForInStatement, ForOfStatement' ( node ) {
1173
1182
const forToken = tokenStore . getFirstToken ( node )
1174
- const leftParenToken = tokenStore . getTokenAfter ( forToken )
1183
+ const awaitToken = ( node . await && tokenStore . getTokenAfter ( forToken ) ) || null
1184
+ const leftParenToken = tokenStore . getTokenAfter ( awaitToken || forToken )
1175
1185
const leftToken = tokenStore . getTokenAfter ( leftParenToken )
1176
1186
const inToken = tokenStore . getTokenAfter ( leftToken , isNotRightParen )
1177
1187
const rightToken = tokenStore . getTokenAfter ( inToken )
1178
1188
const rightParenToken = tokenStore . getTokenBefore ( node . body , isNotLeftParen )
1179
1189
1190
+ if ( awaitToken != null ) {
1191
+ setOffset ( awaitToken , 0 , forToken )
1192
+ }
1180
1193
setOffset ( leftParenToken , 1 , forToken )
1181
1194
setOffset ( leftToken , 1 , leftParenToken )
1182
1195
setOffset ( inToken , 1 , leftToken )
@@ -1353,7 +1366,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1353
1366
setOffset ( [ colonToken , bodyToken ] , 1 , labelToken )
1354
1367
} ,
1355
1368
1356
- 'MemberExpression, MetaProperty' ( node ) {
1369
+ 'MemberExpression, MetaProperty, OptionalMemberExpression ' ( node ) {
1357
1370
const objectToken = tokenStore . getFirstToken ( node )
1358
1371
if ( node . computed ) {
1359
1372
const leftBracketToken = tokenStore . getTokenBefore ( node . property , isLeftBracket )
0 commit comments