From 2c8d15101822c49c53c8129b516c40085e4e4367 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sun, 28 Nov 2021 23:35:34 +0200 Subject: [PATCH] Drop "eslint-plugin-istanbul" and implement as internal ESLint rule It blocks us from using ESLint8, see: https://github.com/istanbuljs/eslint-plugin-istanbul/pull/17 --- .eslintrc.yml | 10 +------- package-lock.json | 20 ---------------- package.json | 1 - resources/eslint-internal-rules/index.js | 2 ++ .../require-coverage-ignore-reason.js | 24 +++++++++++++++++++ 5 files changed, 27 insertions(+), 30 deletions(-) create mode 100644 resources/eslint-internal-rules/require-coverage-ignore-reason.js diff --git a/.eslintrc.yml b/.eslintrc.yml index e13d9ee2e1..f05798462e 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -8,7 +8,6 @@ reportUnusedDisableDirectives: true plugins: - internal-rules - node - - istanbul - import settings: node: @@ -23,14 +22,7 @@ rules: internal-rules/only-ascii: error internal-rules/no-dir-import: error internal-rules/require-to-string-tag: off - - ############################################################################## - # `eslint-plugin-istanbul` rule list based on `v0.1.2` - # https://github.com/istanbuljs/eslint-plugin-istanbul#rules - ############################################################################## - - istanbul/no-ignore-file: error - istanbul/prefer-ignore-reason: error + internal-rules/require-coverage-ignore-reason: error ############################################################################## # `eslint-plugin-node` rule list based on `v11.1.x` diff --git a/package-lock.json b/package-lock.json index 52e6d27f91..c8e64dd472 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ "eslint": "7.32.0", "eslint-plugin-import": "2.25.2", "eslint-plugin-internal-rules": "file:./resources/eslint-internal-rules", - "eslint-plugin-istanbul": "0.1.2", "eslint-plugin-node": "11.1.0", "eslint-plugin-tsdoc": "0.2.14", "mocha": "9.1.3", @@ -3872,18 +3871,6 @@ "resolved": "resources/eslint-internal-rules", "link": true }, - "node_modules/eslint-plugin-istanbul": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-istanbul/-/eslint-plugin-istanbul-0.1.2.tgz", - "integrity": "sha512-lkH0DnPxdPUZ9HMG8wpcJcl481IXRHJX1Jj1SqTWtiNgeuz/s2OOJLbCEyrIoz4HJxC4OOS4tbbGOlqeovqHaw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" - } - }, "node_modules/eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -10513,13 +10500,6 @@ "eslint-plugin-internal-rules": { "version": "file:resources/eslint-internal-rules" }, - "eslint-plugin-istanbul": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-istanbul/-/eslint-plugin-istanbul-0.1.2.tgz", - "integrity": "sha512-lkH0DnPxdPUZ9HMG8wpcJcl481IXRHJX1Jj1SqTWtiNgeuz/s2OOJLbCEyrIoz4HJxC4OOS4tbbGOlqeovqHaw==", - "dev": true, - "requires": {} - }, "eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", diff --git a/package.json b/package.json index 0dba6f33d1..3cfe03367c 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "eslint": "7.32.0", "eslint-plugin-import": "2.25.2", "eslint-plugin-internal-rules": "file:./resources/eslint-internal-rules", - "eslint-plugin-istanbul": "0.1.2", "eslint-plugin-node": "11.1.0", "eslint-plugin-tsdoc": "0.2.14", "mocha": "9.1.3", diff --git a/resources/eslint-internal-rules/index.js b/resources/eslint-internal-rules/index.js index 4acc530f3a..0e55d335d1 100644 --- a/resources/eslint-internal-rules/index.js +++ b/resources/eslint-internal-rules/index.js @@ -3,11 +3,13 @@ const onlyASCII = require('./only-ascii.js'); const noDirImport = require('./no-dir-import.js'); const requireToStringTag = require('./require-to-string-tag.js'); +const requireCoverageIgnoreReason = require('./require-coverage-ignore-reason.js'); module.exports = { rules: { 'only-ascii': onlyASCII, 'no-dir-import': noDirImport, 'require-to-string-tag': requireToStringTag, + 'require-coverage-ignore-reason': requireCoverageIgnoreReason, }, }; diff --git a/resources/eslint-internal-rules/require-coverage-ignore-reason.js b/resources/eslint-internal-rules/require-coverage-ignore-reason.js new file mode 100644 index 0000000000..949c0feec3 --- /dev/null +++ b/resources/eslint-internal-rules/require-coverage-ignore-reason.js @@ -0,0 +1,24 @@ +'use strict'; + +module.exports = function requireCoverageIgnoreReason(context) { + const istanbulRegExp = /^\s*istanbul\s+ignore\s+(if|else|next|file)\s+/; + return { + Program() { + const sourceCode = context.getSourceCode(); + + for (const node of sourceCode.getAllComments()) { + const comment = node.value; + + if (comment.match(istanbulRegExp)) { + const reason = comment.replace(istanbulRegExp, ''); + if (!reason.match(/\(.+\)$/)) { + context.report({ + message: 'Add a reason why code coverage should be ignored', + node, + }); + } + } + } + }, + }; +};