Skip to content

feat: add support for eslint v8 & use @eslint-community/eslint-plugin-mysticatea #20

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

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
extends:
- plugin:@mysticatea/es2015
- plugin:@mysticatea/+eslint-plugin
- plugin:@eslint-community/mysticatea/es2015
- plugin:@eslint-community/mysticatea/+eslint-plugin

overrides:
- files: "docs/.vuepress/components/*.vue"
parserOptions:
parser: babel-eslint

- files: "lib/rules/*.js"
rules:
"@mysticatea/eslint-plugin/require-meta-docs-url":
"@eslint-community/mysticatea/eslint-plugin/require-meta-docs-url":
- error
- pattern: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/{{name}}.html"
- files: ["lib/configs.js", "lib/rules.js", "lib/utils.js"]
rules:
"@eslint-community/mysticatea/node/global-require": off
- files: ["tests/**/*.js", "scripts/**/*.js"]
rules:
"@eslint-community/mysticatea/node/global-require": off
"@eslint-community/mysticatea/node/no-sync": off
48 changes: 9 additions & 39 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,37 +42,27 @@ jobs:
matrix.os }})
strategy:
matrix:
eslint: [7]
node: [10, 12.0.0, 12, 14.0.0, 14, 16.0.0, 16, 18.0.0, 18]
eslint: [8]
node: [12.22.0, 12, 14.17.0, 14, 16.0.0, 16, 18.0.0, 18]
os: [ubuntu-latest]
include:
# On other platforms
- os: windows-latest
eslint: 7
eslint: 8
node: 18
- os: macos-latest
eslint: 7
eslint: 8
node: 18
# On old ESLint versions
- eslint: 6
node: 18
os: ubuntu-latest
- eslint: 5
node: 18
os: ubuntu-latest
- eslint: 4
- eslint: 7
node: 18
os: ubuntu-latest
# On old Node.js versions
- eslint: 6
node: 8
os: ubuntu-latest
- eslint: 5
node: 6
node: 18
os: ubuntu-latest
# On the minimum supported ESLint/Node.js version
- eslint: 4.19.1
node: 6.5.0
- eslint: 6.0.0
node: 12.22.0
os: ubuntu-latest
runs-on: ${{ matrix.os }}
steps:
Expand All @@ -84,31 +74,11 @@ jobs:
with:
node-version: ${{ matrix.node }}

# - name: 📥 Install dependencies
# run: npm install
- name: 📥 Install Packages for Node v6
run: |
sudo npm i [email protected]
./node_modules/.bin/npm -v
./node_modules/.bin/npm uninstall vuepress
./node_modules/.bin/npm install
if: ${{ matrix.node == '6.5.0' || matrix.node == '6' }}
- name: 📥 Uninstall Packages for Node v8
run: |
npm uninstall vuepress
if: ${{ matrix.node == '8.O.O' || matrix.node == '8' }}
- name: 📥 Install Packages
- name: 📥 Install dependencies
run: npm install --legacy-peer-deps
if: ${{ matrix.node != '6.5.0' && matrix.node != '6' }}

# - name: 📥 Install ESLint v${{ matrix.eslint }}
# run: npm install --save-dev eslint@${{ matrix.eslint }}
- name: 📥 Install ESLint v${{ matrix.eslint }} for Node v6
run: ./node_modules/.bin/npm install --save-dev eslint@${{ matrix.eslint }}
if: ${{ matrix.node == '6.5.0' || matrix.node == '6' }}
- name: 📥 Install ESLint v${{ matrix.eslint }}
run: npm install --save-dev eslint@${{ matrix.eslint }}
if: ${{ matrix.node != '6.5.0' && matrix.node != '6' }}

- name: ▶️ Run test script
run: npm run test
Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ npm install --save-dev eslint @eslint-community/eslint-plugin-eslint-comments
```

::: tip Requirements
- Node.js `6.5.0` or newer.
- ESLint `4.19.1` or newer.
- Node.js `^12.22.0 || ^14.17.0 || >=16.0.0`
- ESLint `^6.0.0 || ^7.0.0`
:::

## 📖 Usage
Expand Down
5 changes: 3 additions & 2 deletions lib/internal/get-linters.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ const needle = `${path.sep}node_modules${path.sep}eslint${path.sep}`
module.exports = () => {
const eslintPaths = new Set(
Object.keys(require.cache)
.filter(id => id.includes(needle))
.map(id => id.slice(0, id.indexOf(needle) + needle.length))
.filter((id) => id.includes(needle))
.map((id) => id.slice(0, id.indexOf(needle) + needle.length))
)
const linters = []

for (const eslintPath of eslintPaths) {
try {
// eslint-disable-next-line @eslint-community/mysticatea/node/global-require
const linter = require(eslintPath).Linter

if (linter) {
Expand Down
3 changes: 2 additions & 1 deletion lib/internal/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
const escapeStringRegexp = require("escape-string-regexp")
const LINE_PATTERN = /[^\r\n\u2028\u2029]*(?:\r\n|[\r\n\u2028\u2029]|$)/gu

const DIRECTIVE_PATTERN = /^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u
const DIRECTIVE_PATTERN =
/^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u
const LINE_COMMENT_PATTERN = /^eslint-disable-(next-)?line$/u

module.exports = {
Expand Down
14 changes: 9 additions & 5 deletions lib/rules/disable-enable-pair.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@ module.exports = {
"require a `eslint-enable` comment for every `eslint-disable` comment",
category: "Best Practices",
recommended: true,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/disable-enable-pair.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/disable-enable-pair.html",
},
fixable: null,
messages: {
missingRulePair:
"Requires 'eslint-enable' directive for '{{ruleId}}'.",
missingPair: "Requires 'eslint-enable' directive.",
},
schema: [
{
type: "object",
Expand Down Expand Up @@ -57,9 +61,9 @@ module.exports = {

context.report({
loc: utils.toRuleIdLocation(area.comment, area.ruleId),
message: area.ruleId
? "Requires 'eslint-enable' directive for '{{ruleId}}'."
: "Requires 'eslint-enable' directive.",
messageId: area.ruleId
? "missingRulePair"
: "missingPair",
data: area,
})
}
Expand Down
10 changes: 6 additions & 4 deletions lib/rules/no-aggregating-enable.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@ module.exports = {
"disallow a `eslint-enable` comment for multiple `eslint-disable` comments",
category: "Best Practices",
recommended: true,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-aggregating-enable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-aggregating-enable.html",
},
fixable: null,
messages: {
aggregatingEnable:
"This `eslint-enable` comment affects {{count}} `eslint-disable` comments. An `eslint-enable` comment should be for an `eslint-disable` comment.",
},
schema: [],
type: "suggestion",
},
Expand All @@ -35,8 +38,7 @@ module.exports = {
if (count >= 2) {
context.report({
loc: utils.toForceLocation(comment.loc),
message:
"This `eslint-enable` comment affects {{count}} `eslint-disable` comments. An `eslint-enable` comment should be for an `eslint-disable` comment.",
messageId: "aggregatingEnable",
data: { count },
})
}
Expand Down
11 changes: 6 additions & 5 deletions lib/rules/no-duplicate-disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ module.exports = {
description: "disallow duplicate `eslint-disable` comments",
category: "Best Practices",
recommended: true,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-duplicate-disable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-duplicate-disable.html",
},
fixable: null,
messages: {
duplicateRule: "'{{ruleId}}' rule has been disabled already.",
duplicate: "ESLint rules have been disabled already.",
},
schema: [],
type: "problem",
},
Expand All @@ -30,9 +33,7 @@ module.exports = {
for (const item of disabledArea.duplicateDisableDirectives) {
context.report({
loc: utils.toRuleIdLocation(item.comment, item.ruleId),
message: item.ruleId
? "'{{ruleId}}' rule has been disabled already."
: "ESLint rules have been disabled already.",
messageId: item.ruleId ? "duplicateRule" : "duplicate",
data: item,
})
}
Expand Down
8 changes: 5 additions & 3 deletions lib/rules/no-restricted-disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ module.exports = {
"disallow `eslint-disable` comments about specific rules",
category: "Stylistic Issues",
recommended: false,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-restricted-disable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-restricted-disable.html",
},
fixable: null,
messages: {
disallow: "Disabling '{{ruleId}}' is not allowed.",
},
schema: {
type: "array",
items: { type: "string" },
Expand Down Expand Up @@ -49,7 +51,7 @@ module.exports = {
area.comment,
area.ruleId
),
message: "Disabling '{{ruleId}}' is not allowed.",
messageId: "disallow",
data: {
ruleId: area.ruleId || String(context.options),
},
Expand Down
15 changes: 8 additions & 7 deletions lib/rules/no-unlimited-disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ module.exports = {
"disallow `eslint-disable` comments without rule names",
category: "Best Practices",
recommended: true,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unlimited-disable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unlimited-disable.html",
},
fixable: null,
messages: {
unexpected:
"Unexpected unlimited '{{kind}}' comment. Specify some rule names to disable.",
},
schema: [],
type: "suggestion",
},
Expand All @@ -27,9 +30,8 @@ module.exports = {
return {
Program() {
for (const comment of sourceCode.getAllComments()) {
const directiveComment = utils.parseDirectiveComment(
comment
)
const directiveComment =
utils.parseDirectiveComment(comment)
if (directiveComment == null) {
continue
}
Expand All @@ -45,8 +47,7 @@ module.exports = {
if (!directiveComment.value) {
context.report({
loc: utils.toForceLocation(comment.loc),
message:
"Unexpected unlimited '{{kind}}' comment. Specify some rule names to disable.",
messageId: "unexpected",
data: { kind: directiveComment.kind },
})
}
Expand Down
5 changes: 3 additions & 2 deletions lib/rules/no-unused-disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ module.exports = {
description: "disallow unused `eslint-disable` comments",
category: "Best Practices",
recommended: false,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unused-disable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unused-disable.html",
},
fixable: null,
// eslint-disable-next-line @eslint-community/mysticatea/eslint-plugin/prefer-message-ids
messages: {},
schema: [],
type: "problem",
},
Expand Down
12 changes: 7 additions & 5 deletions lib/rules/no-unused-enable.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@ module.exports = {
description: "disallow unused `eslint-enable` comments",
category: "Best Practices",
recommended: true,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unused-enable.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-unused-enable.html",
},
fixable: null,
messages: {
unusedRule:
"'{{ruleId}}' rule is re-enabled but it has not been disabled.",
unused: "ESLint rules are re-enabled but those have not been disabled.",
},
schema: [],
type: "problem",
},
Expand All @@ -30,9 +34,7 @@ module.exports = {
for (const item of disabledArea.unusedEnableDirectives) {
context.report({
loc: utils.toRuleIdLocation(item.comment, item.ruleId),
message: item.ruleId
? "'{{ruleId}}' rule is re-enabled but it has not been disabled."
: "ESLint rules are re-enabled but those have not been disabled.",
messageId: item.ruleId ? "unusedRule" : "unused",
data: item,
})
}
Expand Down
13 changes: 7 additions & 6 deletions lib/rules/no-use.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ module.exports = {
description: "disallow ESLint directive-comments",
category: "Stylistic Issues",
recommended: false,
url:
"https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-use.html",
url: "https://eslint-community.github.io/eslint-plugin-eslint-comments/rules/no-use.html",
},
fixable: null,
messages: {
disallow: "Unexpected ESLint directive comment.",
},
schema: [
{
type: "object",
Expand Down Expand Up @@ -54,17 +56,16 @@ module.exports = {
return {
Program() {
for (const comment of sourceCode.getAllComments()) {
const directiveComment = utils.parseDirectiveComment(
comment
)
const directiveComment =
utils.parseDirectiveComment(comment)
if (directiveComment == null) {
continue
}

if (!allowed.has(directiveComment.kind)) {
context.report({
loc: utils.toForceLocation(comment.loc),
message: "Unexpected ESLint directive comment.",
messageId: "disallow",
})
}
}
Expand Down
Loading