Skip to content

Commit

Permalink
Change not to use ESLint internal modules (#1322)
Browse files Browse the repository at this point in the history
* Change not to use ESLint internal modules

* update

* remove unused scrip
  • Loading branch information
ota-meshi committed Oct 18, 2020
1 parent 0e5480c commit d44fb18
Show file tree
Hide file tree
Showing 38 changed files with 69 additions and 103 deletions.
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

0 comments on commit d44fb18

Please sign in to comment.