@@ -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 * \* /
@@ -552,7 +552,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
552
552
}
553
553
return true
554
554
}
555
- if ( t === 'CallExpression' || t === 'NewExpression' ) {
555
+ if ( t === 'CallExpression' || t === 'NewExpression' || t === 'OptionalCallExpression' ) {
556
556
const openParen = tokenStore . getTokenAfter ( parent . callee , isNotRightParen )
557
557
return parent . arguments . some ( param =>
558
558
getFirstAndLastTokens ( param , openParen . range [ 1 ] ) . firstToken . range [ 0 ] === token . range [ 0 ]
@@ -1065,7 +1065,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1065
1065
}
1066
1066
} ,
1067
1067
1068
- CallExpression ( node ) {
1068
+ ' CallExpression, OptionalCallExpression' ( node ) {
1069
1069
const firstToken = tokenStore . getFirstToken ( node )
1070
1070
const rightToken = tokenStore . getLastToken ( node )
1071
1071
const leftToken = tokenStore . getTokenAfter ( node . callee , isLeftParen )
@@ -1074,6 +1074,15 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1074
1074
processNodeList ( node . arguments , leftToken , rightToken , 1 )
1075
1075
} ,
1076
1076
1077
+ ImportExpression ( node ) {
1078
+ const firstToken = tokenStore . getFirstToken ( node )
1079
+ const rightToken = tokenStore . getLastToken ( node )
1080
+ const leftToken = tokenStore . getTokenAfter ( firstToken , isLeftParen )
1081
+
1082
+ setOffset ( leftToken , 1 , firstToken )
1083
+ processNodeList ( [ node . source ] , leftToken , rightToken , 1 )
1084
+ } ,
1085
+
1077
1086
CatchClause ( node ) {
1078
1087
const firstToken = tokenStore . getFirstToken ( node )
1079
1088
const bodyToken = tokenStore . getFirstToken ( node . body )
@@ -1185,12 +1194,16 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1185
1194
1186
1195
'ForInStatement, ForOfStatement' ( node ) {
1187
1196
const forToken = tokenStore . getFirstToken ( node )
1188
- const leftParenToken = tokenStore . getTokenAfter ( forToken )
1197
+ const awaitToken = ( node . await && tokenStore . getTokenAfter ( forToken ) ) || null
1198
+ const leftParenToken = tokenStore . getTokenAfter ( awaitToken || forToken )
1189
1199
const leftToken = tokenStore . getTokenAfter ( leftParenToken )
1190
1200
const inToken = tokenStore . getTokenAfter ( leftToken , isNotRightParen )
1191
1201
const rightToken = tokenStore . getTokenAfter ( inToken )
1192
1202
const rightParenToken = tokenStore . getTokenBefore ( node . body , isNotLeftParen )
1193
1203
1204
+ if ( awaitToken != null ) {
1205
+ setOffset ( awaitToken , 0 , forToken )
1206
+ }
1194
1207
setOffset ( leftParenToken , 1 , forToken )
1195
1208
setOffset ( leftToken , 1 , leftParenToken )
1196
1209
setOffset ( inToken , 1 , leftToken )
@@ -1367,7 +1380,7 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti
1367
1380
setOffset ( [ colonToken , bodyToken ] , 1 , labelToken )
1368
1381
} ,
1369
1382
1370
- 'MemberExpression, MetaProperty' ( node ) {
1383
+ 'MemberExpression, MetaProperty, OptionalMemberExpression ' ( node ) {
1371
1384
const objectToken = tokenStore . getFirstToken ( node )
1372
1385
if ( node . computed ) {
1373
1386
const leftBracketToken = tokenStore . getTokenBefore ( node . property , isLeftBracket )
0 commit comments