You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.0 KiB
69 lines
2.0 KiB
/** |
|
* @fileoverview disallow using deprecated events api |
|
* @author yoyo930021 |
|
*/ |
|
'use strict' |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Requirements |
|
// ------------------------------------------------------------------------------ |
|
|
|
const utils = require('../utils') |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Rule Definition |
|
// ------------------------------------------------------------------------------ |
|
|
|
module.exports = { |
|
meta: { |
|
type: 'problem', |
|
docs: { |
|
description: 'disallow using deprecated events api (in Vue.js 3.0.0+)', |
|
categories: ['vue3-essential'], |
|
url: 'https://eslint.vuejs.org/rules/no-deprecated-events-api.html' |
|
}, |
|
fixable: null, |
|
schema: [], |
|
messages: { |
|
noDeprecatedEventsApi: |
|
'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.' |
|
} |
|
}, |
|
/** @param {RuleContext} context */ |
|
create(context) { |
|
return utils.defineVueVisitor(context, { |
|
/** @param {MemberExpression & ({parent: CallExpression} | {parent: ChainExpression & {parent: CallExpression}})} node */ |
|
'CallExpression > MemberExpression, CallExpression > ChainExpression > MemberExpression'( |
|
node |
|
) { |
|
const call = |
|
node.parent.type === 'ChainExpression' |
|
? node.parent.parent |
|
: node.parent |
|
|
|
if (call.optional) { |
|
// It is OK because checking whether it is deprecated. |
|
// e.g. `this.$on?.()` |
|
return |
|
} |
|
|
|
if ( |
|
utils.skipChainExpression(call.callee) !== node || |
|
!['$on', '$off', '$once'].includes( |
|
utils.getStaticPropertyName(node) || '' |
|
) |
|
) { |
|
return |
|
} |
|
if (!utils.isThis(node.object, context)) { |
|
return |
|
} |
|
|
|
context.report({ |
|
node: node.property, |
|
messageId: 'noDeprecatedEventsApi' |
|
}) |
|
} |
|
}) |
|
} |
|
}
|
|
|