@@ -56,23 +56,28 @@ function parseOption(option) {
56
56
return parsed
57
57
}
58
58
59
+ /**
60
+ * @typedef {object } NameWithLoc
61
+ * @property {string } name
62
+ * @property {SourceLocation } loc
63
+ * @property {Range } range
64
+ */
59
65
/**
60
66
* Get the name param node from the given CallExpression
61
67
* @param {CallExpression } node CallExpression
62
- * @returns { Literal & { value: string } | null }
68
+ * @returns { NameWithLoc | null }
63
69
*/
64
70
function getNameParamNode ( node ) {
65
71
const nameLiteralNode = node . arguments [ 0 ]
66
- if (
67
- ! nameLiteralNode ||
68
- nameLiteralNode . type !== 'Literal' ||
69
- typeof nameLiteralNode . value !== 'string'
70
- ) {
71
- // cannot check
72
- return null
72
+ if ( nameLiteralNode && utils . isStringLiteral ( nameLiteralNode ) ) {
73
+ const name = utils . getStringLiteralValue ( nameLiteralNode )
74
+ if ( name != null ) {
75
+ return { name, loc : nameLiteralNode . loc , range : nameLiteralNode . range }
76
+ }
73
77
}
74
78
75
- return /** @type {Literal & { value: string } } */ ( nameLiteralNode )
79
+ // cannot check
80
+ return null
76
81
}
77
82
/**
78
83
* Get the callee member node from the given CallExpression
@@ -134,32 +139,32 @@ module.exports = {
134
139
const options = context . options . map ( parseOption )
135
140
136
141
/**
137
- * @param { Literal & { value: string } } nameLiteralNode
142
+ * @param { NameWithLoc } nameWithLoc
138
143
*/
139
- function verify ( nameLiteralNode ) {
140
- const name = nameLiteralNode . value
144
+ function verify ( nameWithLoc ) {
145
+ const name = nameWithLoc . name
141
146
142
147
for ( const option of options ) {
143
148
if ( option . test ( name ) ) {
144
149
const message =
145
150
option . message || `Using \`${ name } \` event is not allowed.`
146
151
context . report ( {
147
- node : nameLiteralNode ,
152
+ loc : nameWithLoc . loc ,
148
153
messageId : 'restrictedEvent' ,
149
154
data : { message } ,
150
155
suggest : option . suggest
151
156
? [
152
157
{
153
158
fix ( fixer ) {
154
159
const sourceCode = context . getSourceCode ( )
155
- return fixer . replaceText (
156
- nameLiteralNode ,
160
+ return fixer . replaceTextRange (
161
+ nameWithLoc . range ,
157
162
`${
158
- sourceCode . text [ nameLiteralNode . range [ 0 ] ]
163
+ sourceCode . text [ nameWithLoc . range [ 0 ] ]
159
164
} ${ JSON . stringify ( option . suggest )
160
165
. slice ( 1 , - 1 )
161
166
. replace ( / ' / gu, "\\'" ) } ${
162
- sourceCode . text [ nameLiteralNode . range [ 1 ] - 1 ]
167
+ sourceCode . text [ nameWithLoc . range [ 1 ] - 1 ]
163
168
} `
164
169
)
165
170
} ,
@@ -179,13 +184,13 @@ module.exports = {
179
184
{
180
185
CallExpression ( node ) {
181
186
const callee = node . callee
182
- const nameLiteralNode = getNameParamNode ( node )
183
- if ( ! nameLiteralNode ) {
187
+ const nameWithLoc = getNameParamNode ( node )
188
+ if ( ! nameWithLoc ) {
184
189
// cannot check
185
190
return
186
191
}
187
192
if ( callee . type === 'Identifier' && callee . name === '$emit' ) {
188
- verify ( nameLiteralNode )
193
+ verify ( nameWithLoc )
189
194
}
190
195
}
191
196
} ,
@@ -239,8 +244,8 @@ module.exports = {
239
244
} )
240
245
} ,
241
246
CallExpression ( node , { node : vueNode } ) {
242
- const nameLiteralNode = getNameParamNode ( node )
243
- if ( ! nameLiteralNode ) {
247
+ const nameWithLoc = getNameParamNode ( node )
248
+ if ( ! nameWithLoc ) {
244
249
// cannot check
245
250
return
246
251
}
@@ -254,7 +259,7 @@ module.exports = {
254
259
emitReferenceIds . has ( node . callee )
255
260
) {
256
261
// verify setup(props,{emit}) {emit()}
257
- verify ( nameLiteralNode )
262
+ verify ( nameWithLoc )
258
263
} else {
259
264
const emit = getCalleeMemberNode ( node )
260
265
if (
@@ -264,7 +269,7 @@ module.exports = {
264
269
contextReferenceIds . has ( emit . member . object )
265
270
) {
266
271
// verify setup(props,context) {context.emit()}
267
- verify ( nameLiteralNode )
272
+ verify ( nameWithLoc )
268
273
}
269
274
}
270
275
}
@@ -275,16 +280,16 @@ module.exports = {
275
280
} ) ,
276
281
{
277
282
CallExpression ( node ) {
278
- const nameLiteralNode = getNameParamNode ( node )
279
- if ( ! nameLiteralNode ) {
283
+ const nameWithLoc = getNameParamNode ( node )
284
+ if ( ! nameWithLoc ) {
280
285
// cannot check
281
286
return
282
287
}
283
288
const emit = getCalleeMemberNode ( node )
284
289
// verify $emit
285
290
if ( emit && emit . name === '$emit' ) {
286
291
// verify this.$emit()
287
- verify ( nameLiteralNode )
292
+ verify ( nameWithLoc )
288
293
}
289
294
}
290
295
}
0 commit comments