Skip to content

Commit

Permalink
chore: add jsdoc type annotation to rules (#15291)
Browse files Browse the repository at this point in the history
  • Loading branch information
bmish committed Nov 24, 2021
1 parent ce14ff1 commit 1e32ee5
Show file tree
Hide file tree
Showing 287 changed files with 304 additions and 6 deletions.
21 changes: 18 additions & 3 deletions Makefile.js
Expand Up @@ -789,6 +789,8 @@ target.checkRuleFiles = function() {
RULE_FILES.forEach(filename => {
const basename = path.basename(filename, ".js");
const docFilename = `docs/rules/${basename}.md`;
const docText = cat(docFilename);
const ruleCode = cat(filename);

/**
* Check if basename is present in rule-types.json file.
Expand All @@ -806,7 +808,6 @@ target.checkRuleFiles = function() {
* @private
*/
function hasIdInTitle(id) {
const docText = cat(docFilename);
const idOldAtEndOfTitleRegExp = new RegExp(`^# (.*?) \\(${id}\\)`, "u"); // original format
const idNewAtBeginningOfTitleRegExp = new RegExp(`^# ${id}: `, "u"); // new format is same as rules index
/*
Expand All @@ -824,14 +825,23 @@ target.checkRuleFiles = function() {
* @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 if the rule code has the jsdoc comment with the rule type annotation.
* @returns {boolean} true if present
* @private
*/
function hasRuleTypeJSDocComment() {
const comment = "/** @type {import('../shared/types').Rule} */";

return ruleCode.includes(comment);
}

// check for docs
if (!test("-f", docFilename)) {
console.error("Missing documentation for rule %s", basename);
Expand Down Expand Up @@ -880,6 +890,11 @@ target.checkRuleFiles = function() {
errors++;
}
}

if (!hasRuleTypeJSDocComment()) {
console.error(`Missing rule type JSDoc comment from ${basename} rule code.`);
errors++;
}
}

// check for tests
Expand Down
4 changes: 1 addition & 3 deletions docs/developer-guide/working-with-rules.md
Expand Up @@ -24,9 +24,7 @@ Here is the basic format of the source file for a rule:
// Rule Definition
//------------------------------------------------------------------------------

/**
* @type {import('eslint').Rule.RuleModule}
*/
/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/accessor-pairs.js
Expand Up @@ -134,6 +134,7 @@ function isPropertyDescriptor(node) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/array-bracket-newline.js
Expand Up @@ -11,6 +11,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/array-bracket-spacing.js
Expand Up @@ -10,6 +10,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/array-callback-return.js
Expand Up @@ -133,6 +133,7 @@ function getArrayMethodName(node) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "problem",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/array-element-newline.js
Expand Up @@ -11,6 +11,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/arrow-body-style.js
Expand Up @@ -14,6 +14,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/arrow-parens.js
Expand Up @@ -27,6 +27,7 @@ function hasBlockBody(node) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/arrow-spacing.js
Expand Up @@ -14,6 +14,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/block-scoped-var.js
Expand Up @@ -8,6 +8,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/block-spacing.js
Expand Up @@ -11,6 +11,7 @@ const util = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/brace-style.js
Expand Up @@ -11,6 +11,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/callback-return.js
Expand Up @@ -9,6 +9,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
deprecated: true,
Expand Down
1 change: 1 addition & 0 deletions lib/rules/camelcase.js
Expand Up @@ -9,6 +9,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/capitalized-comments.js
Expand Up @@ -99,6 +99,7 @@ function createRegExpForIgnorePatterns(normalizedOptions) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/class-methods-use-this.js
Expand Up @@ -15,6 +15,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/comma-dangle.js
Expand Up @@ -70,6 +70,7 @@ function normalizeOptions(optionValue, ecmaVersion) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/comma-spacing.js
Expand Up @@ -10,6 +10,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/comma-style.js
Expand Up @@ -11,6 +11,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/complexity.js
Expand Up @@ -17,6 +17,7 @@ const { upperCaseFirst } = require("../shared/string-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/computed-property-spacing.js
Expand Up @@ -10,6 +10,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/consistent-return.js
Expand Up @@ -40,6 +40,7 @@ function isClassConstructor(node) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/consistent-this.js
Expand Up @@ -8,6 +8,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/constructor-super.js
Expand Up @@ -116,6 +116,7 @@ function isPossibleConstructor(node) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "problem",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/curly.js
Expand Up @@ -14,6 +14,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/default-case-last.js
Expand Up @@ -9,6 +9,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/default-case.js
Expand Up @@ -10,6 +10,7 @@ const DEFAULT_COMMENT_PATTERN = /^no default$/iu;
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/default-param-last.js
Expand Up @@ -5,6 +5,7 @@

"use strict";

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/dot-location.js
Expand Up @@ -11,6 +11,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/dot-notation.js
Expand Up @@ -20,6 +20,7 @@ const validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/u;
// `null` literal must be handled separately.
const literalTypesToCheck = new Set(["string", "boolean"]);

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/eol-last.js
Expand Up @@ -8,6 +8,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/eqeqeq.js
Expand Up @@ -15,6 +15,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/for-direction.js
Expand Up @@ -9,6 +9,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "problem",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/func-call-spacing.js
Expand Up @@ -15,6 +15,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/func-name-matching.js
Expand Up @@ -68,6 +68,7 @@ const optionsObject = {
additionalProperties: false
};

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/func-names.js
Expand Up @@ -24,6 +24,7 @@ function isFunctionName(variable) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/func-style.js
Expand Up @@ -8,6 +8,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/function-call-argument-newline.js
Expand Up @@ -9,6 +9,7 @@
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/function-paren-newline.js
Expand Up @@ -14,6 +14,7 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/generator-star-spacing.js
Expand Up @@ -25,6 +25,7 @@ const OVERRIDE_SCHEMA = {
]
};

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "layout",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/getter-return.js
Expand Up @@ -29,6 +29,7 @@ function isReachable(segment) {
// Rule Definition
//------------------------------------------------------------------------------

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "problem",
Expand Down
1 change: 1 addition & 0 deletions lib/rules/global-require.js
Expand Up @@ -48,6 +48,7 @@ function isShadowed(scope, node) {
return reference && reference.resolved && reference.resolved.defs.length > 0;
}

/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
deprecated: true,
Expand Down

0 comments on commit 1e32ee5

Please sign in to comment.