@@ -56,23 +56,28 @@ function parseOption(option) {
5656 return parsed
5757}
5858
59+ /**
60+ * @typedef {object } NameWithLoc
61+ * @property {string } name
62+ * @property {SourceLocation } loc
63+ * @property {Range } range
64+ */
5965/**
6066 * Get the name param node from the given CallExpression
6167 * @param {CallExpression } node CallExpression
62- * @returns { Literal & { value: string } | null }
68+ * @returns { NameWithLoc | null }
6369 */
6470function getNameParamNode ( node ) {
6571 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+ }
7377 }
7478
75- return /** @type {Literal & { value: string } } */ ( nameLiteralNode )
79+ // cannot check
80+ return null
7681}
7782/**
7883 * Get the callee member node from the given CallExpression
@@ -134,32 +139,32 @@ module.exports = {
134139 const options = context . options . map ( parseOption )
135140
136141 /**
137- * @param { Literal & { value: string } } nameLiteralNode
142+ * @param { NameWithLoc } nameWithLoc
138143 */
139- function verify ( nameLiteralNode ) {
140- const name = nameLiteralNode . value
144+ function verify ( nameWithLoc ) {
145+ const name = nameWithLoc . name
141146
142147 for ( const option of options ) {
143148 if ( option . test ( name ) ) {
144149 const message =
145150 option . message || `Using \`${ name } \` event is not allowed.`
146151 context . report ( {
147- node : nameLiteralNode ,
152+ loc : nameWithLoc . loc ,
148153 messageId : 'restrictedEvent' ,
149154 data : { message } ,
150155 suggest : option . suggest
151156 ? [
152157 {
153158 fix ( fixer ) {
154159 const sourceCode = context . getSourceCode ( )
155- return fixer . replaceText (
156- nameLiteralNode ,
160+ return fixer . replaceTextRange (
161+ nameWithLoc . range ,
157162 `${
158- sourceCode . text [ nameLiteralNode . range [ 0 ] ]
163+ sourceCode . text [ nameWithLoc . range [ 0 ] ]
159164 } ${ JSON . stringify ( option . suggest )
160165 . slice ( 1 , - 1 )
161166 . replace ( / ' / gu, "\\'" ) } ${
162- sourceCode . text [ nameLiteralNode . range [ 1 ] - 1 ]
167+ sourceCode . text [ nameWithLoc . range [ 1 ] - 1 ]
163168 } `
164169 )
165170 } ,
@@ -179,13 +184,13 @@ module.exports = {
179184 {
180185 CallExpression ( node ) {
181186 const callee = node . callee
182- const nameLiteralNode = getNameParamNode ( node )
183- if ( ! nameLiteralNode ) {
187+ const nameWithLoc = getNameParamNode ( node )
188+ if ( ! nameWithLoc ) {
184189 // cannot check
185190 return
186191 }
187192 if ( callee . type === 'Identifier' && callee . name === '$emit' ) {
188- verify ( nameLiteralNode )
193+ verify ( nameWithLoc )
189194 }
190195 }
191196 } ,
@@ -239,8 +244,8 @@ module.exports = {
239244 } )
240245 } ,
241246 CallExpression ( node , { node : vueNode } ) {
242- const nameLiteralNode = getNameParamNode ( node )
243- if ( ! nameLiteralNode ) {
247+ const nameWithLoc = getNameParamNode ( node )
248+ if ( ! nameWithLoc ) {
244249 // cannot check
245250 return
246251 }
@@ -254,7 +259,7 @@ module.exports = {
254259 emitReferenceIds . has ( node . callee )
255260 ) {
256261 // verify setup(props,{emit}) {emit()}
257- verify ( nameLiteralNode )
262+ verify ( nameWithLoc )
258263 } else {
259264 const emit = getCalleeMemberNode ( node )
260265 if (
@@ -264,7 +269,7 @@ module.exports = {
264269 contextReferenceIds . has ( emit . member . object )
265270 ) {
266271 // verify setup(props,context) {context.emit()}
267- verify ( nameLiteralNode )
272+ verify ( nameWithLoc )
268273 }
269274 }
270275 }
@@ -275,16 +280,16 @@ module.exports = {
275280 } ) ,
276281 {
277282 CallExpression ( node ) {
278- const nameLiteralNode = getNameParamNode ( node )
279- if ( ! nameLiteralNode ) {
283+ const nameWithLoc = getNameParamNode ( node )
284+ if ( ! nameWithLoc ) {
280285 // cannot check
281286 return
282287 }
283288 const emit = getCalleeMemberNode ( node )
284289 // verify $emit
285290 if ( emit && emit . name === '$emit' ) {
286291 // verify this.$emit()
287- verify ( nameLiteralNode )
292+ verify ( nameWithLoc )
288293 }
289294 }
290295 }
0 commit comments