diff --git a/.eslintrc.js b/.eslintrc.js index 352444a0..5c84bfcc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -35,7 +35,13 @@ module.exports = { extends: ['plugin:self/all'], rules: { 'self/report-message-format': ['error', '^[^a-z].*.$'], - 'self/require-meta-docs-url': 'off', + 'self/require-meta-docs-url': [ + 'error', + { + pattern: + 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/{{name}}.md', + }, + ], }, }, { diff --git a/lib/index.js b/lib/index.js index 32e427a6..4ee38c96 100644 --- a/lib/index.js +++ b/lib/index.js @@ -13,7 +13,6 @@ const fs = require('fs'); const path = require('path'); const packageMetadata = require('../package'); const PLUGIN_NAME = packageMetadata.name.replace(/^eslint-plugin-/, ''); -const PLUGIN_VERSION = packageMetadata.version; const configFilters = { all: () => true, @@ -28,26 +27,13 @@ const configFilters = { // Plugin Definition // ------------------------------------------------------------------------------ -/** - * Loads a given rule from the filesystem and generates its documentation URL - * @param {string} ruleName The name of the rule - * @returns {Rule} The ESLint rule to export - */ -function loadRule (ruleName) { - const rule = require(path.join(__dirname, 'rules', ruleName)); - - rule.meta.docs.url = - `https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/v${PLUGIN_VERSION}/docs/rules/${ruleName}.md`; - - return rule; -} - // import all rules in lib/rules const allRules = Object.fromEntries(fs .readdirSync(`${__dirname}/rules`) .filter(fileName => fileName.endsWith('.js') && /^[^._]/.test(fileName)) .map(fileName => fileName.replace(/\.js$/, '')) - .map(ruleName => [ruleName, loadRule(ruleName)])); + .map(ruleName => [ruleName, require(path.join(__dirname, 'rules', ruleName))]) +); module.exports.rules = allRules; diff --git a/lib/rules/consistent-output.js b/lib/rules/consistent-output.js index bdb0b69c..c8d6f5c0 100644 --- a/lib/rules/consistent-output.js +++ b/lib/rules/consistent-output.js @@ -18,6 +18,7 @@ module.exports = { description: 'enforce consistent use of `output` assertions in rule tests', category: 'Tests', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/consistent-output.md', }, fixable: null, // or "code" or "whitespace" schema: [ diff --git a/lib/rules/fixer-return.js b/lib/rules/fixer-return.js index 787dfecb..54371889 100644 --- a/lib/rules/fixer-return.js +++ b/lib/rules/fixer-return.js @@ -23,6 +23,7 @@ module.exports = { description: 'require fixer functions to return a fix', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/fixer-return.md', }, fixable: null, schema: [], diff --git a/lib/rules/meta-property-ordering.js b/lib/rules/meta-property-ordering.js index 40a6791a..77b550e3 100644 --- a/lib/rules/meta-property-ordering.js +++ b/lib/rules/meta-property-ordering.js @@ -17,6 +17,7 @@ module.exports = { description: 'enforce the order of meta properties', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/meta-property-ordering.md', }, fixable: 'code', schema: [{ diff --git a/lib/rules/no-deprecated-context-methods.js b/lib/rules/no-deprecated-context-methods.js index 58fa3e4f..c3f96f02 100644 --- a/lib/rules/no-deprecated-context-methods.js +++ b/lib/rules/no-deprecated-context-methods.js @@ -41,6 +41,7 @@ module.exports = { description: 'disallow usage of deprecated methods on rule context objects', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-deprecated-context-methods.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/no-deprecated-report-api.js b/lib/rules/no-deprecated-report-api.js index d20fbb3c..f6532f12 100644 --- a/lib/rules/no-deprecated-report-api.js +++ b/lib/rules/no-deprecated-report-api.js @@ -18,6 +18,7 @@ module.exports = { description: 'disallow the version of `context.report()` with multiple arguments', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-deprecated-report-api.md', }, fixable: 'code', // or "code" or "whitespace" schema: [], diff --git a/lib/rules/no-identical-tests.js b/lib/rules/no-identical-tests.js index e32f7188..4b546336 100644 --- a/lib/rules/no-identical-tests.js +++ b/lib/rules/no-identical-tests.js @@ -18,6 +18,7 @@ module.exports = { description: 'disallow identical tests', category: 'Tests', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-identical-tests.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/no-missing-placeholders.js b/lib/rules/no-missing-placeholders.js index 1f66c2bb..d0259591 100644 --- a/lib/rules/no-missing-placeholders.js +++ b/lib/rules/no-missing-placeholders.js @@ -19,6 +19,7 @@ module.exports = { description: 'disallow missing placeholders in rule report messages', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-missing-placeholders.md', }, fixable: null, schema: [], diff --git a/lib/rules/no-only-tests.js b/lib/rules/no-only-tests.js index 56ca29a2..f680961a 100644 --- a/lib/rules/no-only-tests.js +++ b/lib/rules/no-only-tests.js @@ -10,6 +10,7 @@ module.exports = { description: 'disallow the test case property `only`', category: 'Tests', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-only-tests.md', }, hasSuggestions: true, schema: [], diff --git a/lib/rules/no-unused-placeholders.js b/lib/rules/no-unused-placeholders.js index 9cfc158d..61c6faba 100644 --- a/lib/rules/no-unused-placeholders.js +++ b/lib/rules/no-unused-placeholders.js @@ -19,6 +19,7 @@ module.exports = { description: 'disallow unused placeholders in rule report messages', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-unused-placeholders.md', }, fixable: null, schema: [], diff --git a/lib/rules/no-useless-token-range.js b/lib/rules/no-useless-token-range.js index 0a8a35df..cbabf1a5 100644 --- a/lib/rules/no-useless-token-range.js +++ b/lib/rules/no-useless-token-range.js @@ -18,6 +18,7 @@ module.exports = { description: 'disallow unnecessary calls to `sourceCode.getFirstToken()` and `sourceCode.getLastToken()`', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/no-useless-token-range.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/prefer-message-ids.js b/lib/rules/prefer-message-ids.js index e6a0dc50..832ed42a 100644 --- a/lib/rules/prefer-message-ids.js +++ b/lib/rules/prefer-message-ids.js @@ -14,6 +14,7 @@ module.exports = { description: 'require using `messageId` instead of `message` to report rule violations', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/prefer-message-ids.md', }, fixable: null, schema: [], diff --git a/lib/rules/prefer-object-rule.js b/lib/rules/prefer-object-rule.js index 445e1a19..e5f5a461 100644 --- a/lib/rules/prefer-object-rule.js +++ b/lib/rules/prefer-object-rule.js @@ -17,6 +17,7 @@ module.exports = { description: 'disallow rule exports where the export is a function', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/prefer-object-rule.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/prefer-output-null.js b/lib/rules/prefer-output-null.js index f622f00d..8e34617c 100644 --- a/lib/rules/prefer-output-null.js +++ b/lib/rules/prefer-output-null.js @@ -18,6 +18,7 @@ module.exports = { description: 'disallow invalid RuleTester test cases where the `output` matches the `code`', category: 'Tests', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/prefer-output-null.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/prefer-placeholders.js b/lib/rules/prefer-placeholders.js index 666d23b1..de53adb3 100644 --- a/lib/rules/prefer-placeholders.js +++ b/lib/rules/prefer-placeholders.js @@ -19,6 +19,7 @@ module.exports = { description: 'require using placeholders for dynamic report messages', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/prefer-placeholders.md', }, fixable: null, schema: [], diff --git a/lib/rules/prefer-replace-text.js b/lib/rules/prefer-replace-text.js index a39419d0..685f9cf1 100644 --- a/lib/rules/prefer-replace-text.js +++ b/lib/rules/prefer-replace-text.js @@ -18,6 +18,7 @@ module.exports = { description: 'require using `replaceText()` instead of `replaceTextRange()`', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/prefer-replace-text.md', }, fixable: null, schema: [], diff --git a/lib/rules/report-message-format.js b/lib/rules/report-message-format.js index c8deecfb..cd620e54 100644 --- a/lib/rules/report-message-format.js +++ b/lib/rules/report-message-format.js @@ -19,6 +19,7 @@ module.exports = { description: 'enforce a consistent format for rule report messages', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/report-message-format.md', }, fixable: null, schema: [ diff --git a/lib/rules/require-meta-docs-description.js b/lib/rules/require-meta-docs-description.js index 808b3627..f1c029c7 100644 --- a/lib/rules/require-meta-docs-description.js +++ b/lib/rules/require-meta-docs-description.js @@ -16,6 +16,7 @@ module.exports = { description: 'require rules to implement a `meta.docs.description` property with the correct format', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-docs-description.md', }, fixable: null, schema: [ diff --git a/lib/rules/require-meta-docs-url.js b/lib/rules/require-meta-docs-url.js index ed7d67a7..6b692d3a 100644 --- a/lib/rules/require-meta-docs-url.js +++ b/lib/rules/require-meta-docs-url.js @@ -23,6 +23,7 @@ module.exports = { description: 'require rules to implement a `meta.docs.url` property', category: 'Rules', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-docs-url.md', }, fixable: 'code', schema: [{ diff --git a/lib/rules/require-meta-fixable.js b/lib/rules/require-meta-fixable.js index 3223dedd..0569fc53 100644 --- a/lib/rules/require-meta-fixable.js +++ b/lib/rules/require-meta-fixable.js @@ -19,6 +19,7 @@ module.exports = { description: 'require rules to implement a `meta.fixable` property', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-fixable.md', }, schema: [ { diff --git a/lib/rules/require-meta-has-suggestions.js b/lib/rules/require-meta-has-suggestions.js index 73885b62..f62a9b0b 100644 --- a/lib/rules/require-meta-has-suggestions.js +++ b/lib/rules/require-meta-has-suggestions.js @@ -14,6 +14,7 @@ module.exports = { description: 'require suggestable rules to implement a `meta.hasSuggestions` property', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-has-suggestions.md', }, fixable: 'code', schema: [], diff --git a/lib/rules/require-meta-schema.js b/lib/rules/require-meta-schema.js index a4d2f88d..e838d85d 100644 --- a/lib/rules/require-meta-schema.js +++ b/lib/rules/require-meta-schema.js @@ -14,6 +14,7 @@ module.exports = { description: 'require rules to implement a `meta.schema` property', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-schema.md', }, hasSuggestions: true, schema: [ diff --git a/lib/rules/require-meta-type.js b/lib/rules/require-meta-type.js index fb7f33e9..88c22f98 100644 --- a/lib/rules/require-meta-type.js +++ b/lib/rules/require-meta-type.js @@ -20,6 +20,7 @@ module.exports = { description: 'require rules to implement a `meta.type` property', category: 'Rules', recommended: true, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/require-meta-type.md', }, fixable: null, schema: [], diff --git a/lib/rules/test-case-property-ordering.js b/lib/rules/test-case-property-ordering.js index 65ce61c3..f1d3c02d 100644 --- a/lib/rules/test-case-property-ordering.js +++ b/lib/rules/test-case-property-ordering.js @@ -18,6 +18,7 @@ module.exports = { description: 'require the properties of a test case to be placed in a consistent order', category: 'Tests', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/test-case-property-ordering.md', }, fixable: 'code', schema: [{ diff --git a/lib/rules/test-case-shorthand-strings.js b/lib/rules/test-case-shorthand-strings.js index 540571b1..e09febe9 100644 --- a/lib/rules/test-case-shorthand-strings.js +++ b/lib/rules/test-case-shorthand-strings.js @@ -18,6 +18,7 @@ module.exports = { description: 'enforce consistent usage of shorthand strings for test cases with no options', category: 'Tests', recommended: false, + url: 'https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/tree/HEAD/docs/rules/test-case-shorthand-strings.md', }, fixable: 'code', schema: [{ enum: ['as-needed', 'never', 'consistent', 'consistent-as-needed'] }], diff --git a/tests/lib/index.js b/tests/lib/index.js index 986b6a10..e56c83db 100644 --- a/tests/lib/index.js +++ b/tests/lib/index.js @@ -6,12 +6,12 @@ const plugin = require('../..'); const RULE_NAMES = Object.keys(plugin.rules); describe('exported plugin', () => { - describe('adds a meta.docs.url property to each rule', () => { + describe('has a meta.docs.url property on each rule', () => { RULE_NAMES.forEach(ruleName => { it(ruleName, () => { assert.match( plugin.rules[ruleName].meta.docs.url, - /^https:\/\/github.com\/not-an-aardvark\/eslint-plugin-eslint-plugin\/tree\/v\d+\.\d+\.\d+(-\d+)?\/docs\/rules\/[\w-]+\.md$/ + /^https:\/\/github.com\/not-an-aardvark\/eslint-plugin-eslint-plugin\/tree\/HEAD\/docs\/rules\/[\w-]+\.md$/ ); }); });