Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change not to use ESLint internal modules #1322

Merged
merged 3 commits into from Oct 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/.vuepress/components/eslint-code-block.vue
Expand Up @@ -124,11 +124,11 @@ export default {
// Load linter.
const [
{ default: Linter },
{ default: noUndefRule },
{ default: coreRules },
{ parseForESLint }
] = await Promise.all([
import('eslint4b/dist/linter'),
import('eslint/lib/rules/no-undef'),
import('eslint4b/dist/core-rules'),
import('espree').then(() => import('vue-eslint-parser'))
])

Expand All @@ -137,7 +137,7 @@ export default {
for (const ruleId of Object.keys(rules)) {
linter.defineRule(`vue/${ruleId}`, rules[ruleId])
}
linter.defineRule('no-undef', noUndefRule)
linter.defineRule('no-undef', coreRules['no-undef'])

linter.defineParser('vue-eslint-parser', { parseForESLint })
}
Expand Down
4 changes: 3 additions & 1 deletion docs/.vuepress/config.js
Expand Up @@ -5,6 +5,7 @@
'use strict'

const rules = require('../../tools/lib/rules')
const path = require('path')

const uncategorizedRules = rules.filter(
(rule) =>
Expand Down Expand Up @@ -122,7 +123,8 @@ module.exports = {
return {
resolve: {
alias: {
module: require.resolve('./shim/module')
module: require.resolve('./shim/module'),
eslint: path.resolve(__dirname, './shim/eslint')
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions docs/.vuepress/shim/eslint/index.js
@@ -0,0 +1,2 @@
const Linter = require('eslint4b')
module.exports = { Linter }
Empty file.
4 changes: 4 additions & 0 deletions docs/rules/no-textarea-mustache.md
Expand Up @@ -27,11 +27,15 @@ This rule reports mustaches in `<textarea>`.

</eslint-code-block>

<div v-pre>

::: warning Note
Interpolation on textareas (`<textarea>{{text}}</textarea>`) won't work. Use `v-model` instead.
[https://v3.vuejs.org/guide/forms.html#multiline-text](https://v3.vuejs.org/guide/forms.html#multiline-text)
:::

</div>

## :wrench: Options

Nothing.
Expand Down
2 changes: 1 addition & 1 deletion docs/rules/no-unused-vars.md
Expand Up @@ -33,7 +33,7 @@ This rule report variable definitions of v-for directives or scope attributes if

## :wrench: Options

```js
```json
{
"vue/no-unused-vars": ["error", {
"ignorePattern": "^_"
Expand Down
7 changes: 3 additions & 4 deletions lib/rules/array-bracket-spacing.js
Expand Up @@ -6,7 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(
require('eslint/lib/rules/array-bracket-spacing'),
{ skipDynamicArguments: true }
)
module.exports = wrapCoreRule('array-bracket-spacing', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/arrow-spacing.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/arrow-spacing'))
module.exports = wrapCoreRule('arrow-spacing')
2 changes: 1 addition & 1 deletion lib/rules/block-spacing.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/block-spacing'), {
module.exports = wrapCoreRule('block-spacing', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/brace-style.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/brace-style'), {
module.exports = wrapCoreRule('brace-style', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/camelcase.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/camelcase'))
module.exports = wrapCoreRule('camelcase')
2 changes: 1 addition & 1 deletion lib/rules/comma-dangle.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/comma-dangle'))
module.exports = wrapCoreRule('comma-dangle')
2 changes: 1 addition & 1 deletion lib/rules/comma-spacing.js
Expand Up @@ -6,7 +6,7 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/comma-spacing'), {
module.exports = wrapCoreRule('comma-spacing', {
skipDynamicArguments: true,
skipDynamicArgumentsReport: true
})
2 changes: 1 addition & 1 deletion lib/rules/comma-style.js
Expand Up @@ -6,7 +6,7 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/comma-style'), {
module.exports = wrapCoreRule('comma-style', {
create(_context, { coreHandlers }) {
return {
VSlotScopeExpression(node) {
Expand Down
2 changes: 1 addition & 1 deletion lib/rules/dot-location.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/dot-location'))
module.exports = wrapCoreRule('dot-location')
2 changes: 1 addition & 1 deletion lib/rules/dot-notation.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/dot-notation'))
module.exports = wrapCoreRule('dot-notation')
2 changes: 1 addition & 1 deletion lib/rules/eqeqeq.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/eqeqeq'))
module.exports = wrapCoreRule('eqeqeq')
2 changes: 1 addition & 1 deletion lib/rules/func-call-spacing.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/func-call-spacing'), {
module.exports = wrapCoreRule('func-call-spacing', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/key-spacing.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/key-spacing'), {
module.exports = wrapCoreRule('key-spacing', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/keyword-spacing.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/keyword-spacing'), {
module.exports = wrapCoreRule('keyword-spacing', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/no-empty-pattern.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/no-empty-pattern'))
module.exports = wrapCoreRule('no-empty-pattern')
2 changes: 1 addition & 1 deletion lib/rules/no-extra-parens.js
Expand Up @@ -7,7 +7,7 @@ const { isParenthesized } = require('eslint-utils')
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/no-extra-parens'), {
module.exports = wrapCoreRule('no-extra-parens', {
skipDynamicArguments: true,
create: createForVueSyntax
})
Expand Down
2 changes: 1 addition & 1 deletion lib/rules/no-restricted-syntax.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/no-restricted-syntax'))
module.exports = wrapCoreRule('no-restricted-syntax')
2 changes: 1 addition & 1 deletion lib/rules/no-sparse-arrays.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/no-sparse-arrays'))
module.exports = wrapCoreRule('no-sparse-arrays')
2 changes: 1 addition & 1 deletion lib/rules/no-useless-concat.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/no-useless-concat'))
module.exports = wrapCoreRule('no-useless-concat')
7 changes: 3 additions & 4 deletions lib/rules/object-curly-newline.js
Expand Up @@ -6,7 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(
require('eslint/lib/rules/object-curly-newline'),
{ skipDynamicArguments: true }
)
module.exports = wrapCoreRule('object-curly-newline', {
skipDynamicArguments: true
})
7 changes: 3 additions & 4 deletions lib/rules/object-curly-spacing.js
Expand Up @@ -6,7 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(
require('eslint/lib/rules/object-curly-spacing'),
{ skipDynamicArguments: true }
)
module.exports = wrapCoreRule('object-curly-spacing', {
skipDynamicArguments: true
})
7 changes: 3 additions & 4 deletions lib/rules/object-property-newline.js
Expand Up @@ -6,7 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(
require('eslint/lib/rules/object-property-newline'),
{ skipDynamicArguments: true }
)
module.exports = wrapCoreRule('object-property-newline', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/operator-linebreak.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/operator-linebreak'))
module.exports = wrapCoreRule('operator-linebreak')
2 changes: 1 addition & 1 deletion lib/rules/prefer-template.js
Expand Up @@ -6,4 +6,4 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/prefer-template'))
module.exports = wrapCoreRule('prefer-template')
2 changes: 1 addition & 1 deletion lib/rules/space-in-parens.js
Expand Up @@ -6,7 +6,7 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/space-in-parens'), {
module.exports = wrapCoreRule('space-in-parens', {
skipDynamicArguments: true,
skipDynamicArgumentsReport: true
})
2 changes: 1 addition & 1 deletion lib/rules/space-infix-ops.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/space-infix-ops'), {
module.exports = wrapCoreRule('space-infix-ops', {
skipDynamicArguments: true
})
2 changes: 1 addition & 1 deletion lib/rules/space-unary-ops.js
Expand Up @@ -6,6 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(require('eslint/lib/rules/space-unary-ops'), {
module.exports = wrapCoreRule('space-unary-ops', {
skipDynamicArguments: true
})
7 changes: 3 additions & 4 deletions lib/rules/template-curly-spacing.js
Expand Up @@ -6,7 +6,6 @@
const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
module.exports = wrapCoreRule(
require('eslint/lib/rules/template-curly-spacing'),
{ skipDynamicArguments: true }
)
module.exports = wrapCoreRule('template-curly-spacing', {
skipDynamicArguments: true
})
17 changes: 15 additions & 2 deletions lib/utils/index.js
Expand Up @@ -108,6 +108,18 @@ const { findVariable } = require('eslint-utils')
*/
const componentComments = new WeakMap()

/** @type { Map<string, RuleModule> | null } */
let ruleMap = null
/**
* Get the core rule implementation from the rule name
* @param {string} name
* @returns {RuleModule}
*/
function getCoreRule(name) {
const map = ruleMap || (ruleMap = new (require('eslint').Linter)().getRules())
return map.get(name) || require(`eslint/lib/rules/${name}`)
}

/**
* Wrap the rule context object to override methods which access to tokens (such as getTokenAfter).
* @param {RuleContext} context The rule context object.
Expand Down Expand Up @@ -225,15 +237,16 @@ module.exports = {

/**
* Wrap a given core rule to apply it to Vue.js template.
* @param {RuleModule} coreRule The core rule implementation to wrap.
* @param {string} coreRuleName The name of the core rule implementation to wrap.
* @param {Object} [options] The option of this rule.
* @param {string[]} [options.categories] The categories of this rule.
* @param {boolean} [options.skipDynamicArguments] If `true`, skip validation within dynamic arguments.
* @param {boolean} [options.skipDynamicArgumentsReport] If `true`, skip report within dynamic arguments.
* @param { (context: RuleContext, options: { coreHandlers: RuleListener }) => TemplateListener } [options.create] If define, extend core rule.
* @returns {RuleModule} The wrapped rule implementation.
*/
wrapCoreRule(coreRule, options) {
wrapCoreRule(coreRuleName, options) {
const coreRule = getCoreRule(coreRuleName)
const {
categories,
skipDynamicArguments,
Expand Down
1 change: 0 additions & 1 deletion package.json
Expand Up @@ -13,7 +13,6 @@
"cover:report": "nyc report --reporter=html",
"lint": "eslint . --rulesdir eslint-internal-rules",
"lint:fix": "eslint . --rulesdir eslint-internal-rules --fix",
"pretsc": "node ./tools/setup-eslint-rule-types.js",
"tsc": "tsc",
"preversion": "npm test && npm run update && git add .",
"version": "npm run lint -- --fix && git add .",
Expand Down
52 changes: 0 additions & 52 deletions tools/setup-eslint-rule-types.js

This file was deleted.

3 changes: 3 additions & 0 deletions typings/eslint/index.d.ts
Expand Up @@ -357,6 +357,9 @@ export namespace Rule {
}

export class RuleTester extends ESLintRuleTester {}
export class Linter {
getRules(): Map<string, Rule.RuleModule>
}

export namespace Linter {
type LintMessage = ESLintLinter.LintMessage
Expand Down