From b4232d47f88611c68a6c0f915b092b68845ecbaf Mon Sep 17 00:00:00 2001 From: TagawaHirotaka Date: Tue, 31 Aug 2021 20:31:14 +0900 Subject: [PATCH] Chore: Add test that deprecated rules display a deprecated notice (#14989) * Chore: Add tests for check deprecated rule * Chore: Fix lint and refactor * Chore: Fix RegExp * Chore: Add space * Chore: Add blank --- Makefile.js | 27 +++++++++++++++++++++++---- docs/rules/indent-legacy.md | 2 ++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Makefile.js b/Makefile.js index a4530c0045b..c2d3442f5bd 100644 --- a/Makefile.js +++ b/Makefile.js @@ -816,6 +816,20 @@ target.checkRuleFiles = function() { return idNewAtBeginningOfTitleRegExp.test(docText) || idOldAtEndOfTitleRegExp.test(docText); } + /** + * Check if deprecated information is in rule code and READNE.md. + * @returns {boolean} true if present + * @private + */ + function hasDeprecatedInfo() { + const ruleCode = cat(filename); + const deprecatedTagRegExp = /@deprecated in ESLint/u; + const docText = cat(docFilename); + const deprecatedInfoRegExp = /This rule was .+deprecated.+in ESLint/u; + + return deprecatedTagRegExp.test(ruleCode) && deprecatedInfoRegExp.test(docText); + } + // check for docs if (!test("-f", docFilename)) { console.error("Missing documentation for rule %s", basename); @@ -842,12 +856,17 @@ target.checkRuleFiles = function() { if (!ruleDef) { console.error(`Missing rule from index (./lib/rules/index.js): ${basename}. If you just added a new rule then add an entry for it in this file.`); errors++; - } + } else { + + // check deprecated + if (ruleDef.meta.deprecated && !hasDeprecatedInfo()) { + console.error(`Missing deprecated information in ${basename} rule code or README.md. Please write @deprecated tag in code or 「This rule was deprecated in ESLint ...」 in README.md.`); + errors++; + } - // check eslint:recommended - const recommended = require("./conf/eslint-recommended"); + // check eslint:recommended + const recommended = require("./conf/eslint-recommended"); - if (ruleDef) { if (ruleDef.meta.docs.recommended) { if (recommended.rules[basename] !== "error") { console.error(`Missing rule from eslint:recommended (./conf/eslint-recommended.js): ${basename}. If you just made a rule recommended then add an entry for it in this file.`); diff --git a/docs/rules/indent-legacy.md b/docs/rules/indent-legacy.md index 45ef1a62f7e..2711ccc6987 100644 --- a/docs/rules/indent-legacy.md +++ b/docs/rules/indent-legacy.md @@ -1,5 +1,7 @@ # enforce consistent indentation (indent-legacy) +This rule was **deprecated** in ESLint v4.0.0. + ESLint 4.0.0 introduced a rewrite of the [`indent`](/docs/rules/indent) rule, which now reports more errors than it did in previous versions. To ease the process of migrating to 4.0.0, the `indent-legacy` rule was introduced as a snapshot of the `indent` rule from ESLint 3.x. If your build is failing after the upgrade to 4.0.0, you can disable `indent` and enable `indent-legacy` as a quick fix. Eventually, you should switch back to the `indent` rule to get bugfixes and improvements in future versions. ---