Skip to content
8 changes: 4 additions & 4 deletions .eslint-doc-generatorrc.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
'use strict';

const prettier = require('prettier');
import prettier from 'prettier';

/** @type {import('eslint-doc-generator').GenerateOptions} */
module.exports = {
const config = {
ignoreConfig: [
'all',
'all-type-checked',
Expand All @@ -29,3 +27,5 @@ module.exports = {
urlConfigs:
'https://github.com/eslint-community/eslint-plugin-eslint-plugin#presets',
};

export default config;
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ yarn.lock

# eslint-remote-tester
eslint-remote-tester-results

coverage/
4 changes: 1 addition & 3 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
'use strict';

module.exports = {
export default {
singleQuote: true,
};
4 changes: 1 addition & 3 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
'use strict';

module.exports = { extends: ['@commitlint/config-conventional'] };
export default { extends: ['@commitlint/config-conventional'] };
6 changes: 3 additions & 3 deletions configs/all-type-checked.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/all-type-checked'];

module.exports = plugin.configs['flat/all-type-checked'];
export default config;
6 changes: 3 additions & 3 deletions configs/all.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/all'];

module.exports = plugin.configs['flat/all'];
export default config;
6 changes: 3 additions & 3 deletions configs/recommended.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/recommended'];

module.exports = plugin.configs['flat/recommended'];
export default config;
6 changes: 3 additions & 3 deletions configs/rules-recommended.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/rules-recommended'];

module.exports = plugin.configs['flat/rules-recommended'];
export default config;
6 changes: 3 additions & 3 deletions configs/rules.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/rules'];

module.exports = plugin.configs['flat/rules'];
export default config;
6 changes: 3 additions & 3 deletions configs/tests-recommended.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/tests-recommended'];

module.exports = plugin.configs['flat/tests-recommended'];
export default config;
6 changes: 3 additions & 3 deletions configs/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* @author 唯然<[email protected]>
*/

'use strict';
import plugin from '../lib/index.js';

const plugin = require('../lib/index.js');
const config = plugin.configs['flat/tests'];

module.exports = plugin.configs['flat/tests'];
export default config;
19 changes: 10 additions & 9 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
'use strict';

const js = require('@eslint/js');
const { FlatCompat } = require('@eslint/eslintrc');
const markdown = require('eslint-plugin-markdown');
const pluginN = require('eslint-plugin-n');
const eslintPluginConfig = require('eslint-plugin-eslint-plugin/configs/all');
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';
import markdown from 'eslint-plugin-markdown';
import pluginN from 'eslint-plugin-n';
import eslintPluginConfig from 'eslint-plugin-eslint-plugin/configs/all';

const dirname = path.dirname(fileURLToPath(import.meta.url));
const compat = new FlatCompat({
baseDirectory: __dirname,
baseDirectory: dirname,
recommendedConfig: js.configs.recommended,
});

module.exports = [
export default [
...compat.extends(
'not-an-aardvark/node',
'plugin:@eslint-community/eslint-comments/recommended',
Expand Down
85 changes: 69 additions & 16 deletions lib/index.js
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is generated by hand now? Authors of new rules usually forget to update this kind of thing so just want to confirm tests/index.js verifies everything is included here properly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is

we could write a script to auto generate it if that helps

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's fine for now.

Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,44 @@
* @author Teddy Katz
*/

'use strict';

// ------------------------------------------------------------------------------
// Requirements
// ------------------------------------------------------------------------------

const fs = require('fs');
const path = require('path');
const packageMetadata = require('../package');
import packageMetadata from '../package.json' with { type: 'json' };
import consistentOutput from './rules/consistent-output.js';
import fixerReturn from './rules/fixer-return.js';
import metaPropertyOrdering from './rules/meta-property-ordering.js';
import noDeprecatedContextMethods from './rules/no-deprecated-context-methods.js';
import noDeprecatedReportApi from './rules/no-deprecated-report-api.js';
import noIdenticalTests from './rules/no-identical-tests.js';
import noMetaReplacedBy from './rules/no-meta-replaced-by.js';
import noMetaSchemaDefault from './rules/no-meta-schema-default.js';
import noMissingMessageIds from './rules/no-missing-message-ids.js';
import noMissingPlaceholders from './rules/no-missing-placeholders.js';
import noOnlyTests from './rules/no-only-tests.js';
import noPropertyInNode from './rules/no-property-in-node.js';
import noUnusedMessageIds from './rules/no-unused-message-ids.js';
import noUnusedPlaceholders from './rules/no-unused-placeholders.js';
import noUselessTokenRange from './rules/no-useless-token-range.js';
import preferMessageIds from './rules/prefer-message-ids.js';
import preferObjectRule from './rules/prefer-object-rule.js';
import preferOutputNull from './rules/prefer-output-null.js';
import preferPlaceholders from './rules/prefer-placeholders.js';
import preferReplaceText from './rules/prefer-replace-text.js';
import reportMessageFormat from './rules/report-message-format.js';
import requireMetaDefaultOptions from './rules/require-meta-default-options.js';
import requireMetaDocsDescription from './rules/require-meta-docs-description.js';
import requireMetaDocsRecommended from './rules/require-meta-docs-recommended.js';
import requireMetaDocsUrl from './rules/require-meta-docs-url.js';
import requireMetaFixable from './rules/require-meta-fixable.js';
import requireMetaHasSuggestions from './rules/require-meta-has-suggestions.js';
import requireMetaSchemaDescription from './rules/require-meta-schema-description.js';
import requireMetaSchema from './rules/require-meta-schema.js';
import requireMetaType from './rules/require-meta-type.js';
import testCasePropertyOrdering from './rules/test-case-property-ordering.js';
import testCaseShorthandStrings from './rules/test-case-shorthand-strings.js';

const PLUGIN_NAME = packageMetadata.name.replace(/^eslint-plugin-/, '');

const configFilters = {
Expand All @@ -31,16 +60,40 @@ const configFilters = {
// ------------------------------------------------------------------------------

// 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,
require(path.join(__dirname, 'rules', ruleName)),
]),
);
const allRules = {
'consistent-output': consistentOutput,
'fixer-return': fixerReturn,
'meta-property-ordering': metaPropertyOrdering,
'no-deprecated-context-methods': noDeprecatedContextMethods,
'no-deprecated-report-api': noDeprecatedReportApi,
'no-identical-tests': noIdenticalTests,
'no-meta-replaced-by': noMetaReplacedBy,
'no-meta-schema-default': noMetaSchemaDefault,
'no-missing-message-ids': noMissingMessageIds,
'no-missing-placeholders': noMissingPlaceholders,
'no-only-tests': noOnlyTests,
'no-property-in-node': noPropertyInNode,
'no-unused-message-ids': noUnusedMessageIds,
'no-unused-placeholders': noUnusedPlaceholders,
'no-useless-token-range': noUselessTokenRange,
'prefer-message-ids': preferMessageIds,
'prefer-object-rule': preferObjectRule,
'prefer-output-null': preferOutputNull,
'prefer-placeholders': preferPlaceholders,
'prefer-replace-text': preferReplaceText,
'report-message-format': reportMessageFormat,
'require-meta-default-options': requireMetaDefaultOptions,
'require-meta-docs-description': requireMetaDocsDescription,
'require-meta-docs-recommended': requireMetaDocsRecommended,
'require-meta-docs-url': requireMetaDocsUrl,
'require-meta-fixable': requireMetaFixable,
'require-meta-has-suggestions': requireMetaHasSuggestions,
'require-meta-schema-description': requireMetaSchemaDescription,
'require-meta-schema': requireMetaSchema,
'require-meta-type': requireMetaType,
'test-case-property-ordering': testCasePropertyOrdering,
'test-case-shorthand-strings': testCaseShorthandStrings,
};

/** @type {import("eslint").ESLint.Plugin} */
const plugin = {
Expand Down Expand Up @@ -87,4 +140,4 @@ Object.assign(
}, {}),
);

module.exports = plugin;
export default plugin;
8 changes: 4 additions & 4 deletions lib/rules/consistent-output.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
* @author Teddy Katz
*/

'use strict';

const utils = require('../utils');
import * as utils from '../utils.js';

// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
const rule = {
meta: {
type: 'suggestion',
docs: {
Expand Down Expand Up @@ -71,3 +69,5 @@ module.exports = {
};
},
};

export default rule;
10 changes: 5 additions & 5 deletions lib/rules/fixer-return.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,19 @@
* @author 薛定谔的猫<[email protected]>
*/

'use strict';

// ------------------------------------------------------------------------------
// Requirements
// ------------------------------------------------------------------------------

const utils = require('../utils');
const { getStaticValue } = require('@eslint-community/eslint-utils');
import * as utils from '../utils.js';
import { getStaticValue } from '@eslint-community/eslint-utils';

// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
const rule = {
meta: {
type: 'problem',
docs: {
Expand Down Expand Up @@ -167,3 +165,5 @@ module.exports = {
};
},
};

export default rule;
7 changes: 4 additions & 3 deletions lib/rules/meta-property-ordering.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
* @fileoverview Enforces the order of meta properties
*/

'use strict';
import * as utils from '../utils.js';

const utils = require('../utils');
const { getKeyName, getRuleInfo } = utils;

const defaultOrder = [
Expand All @@ -24,7 +23,7 @@ const defaultOrder = [
// ------------------------------------------------------------------------------

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
const rule = {
meta: {
type: 'suggestion',
docs: {
Expand Down Expand Up @@ -111,3 +110,5 @@ module.exports = {
};
},
};

export default rule;
8 changes: 4 additions & 4 deletions lib/rules/no-deprecated-context-methods.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
* @author Teddy Katz
*/

'use strict';

const utils = require('../utils');
import * as utils from '../utils.js';

const DEPRECATED_PASSTHROUGHS = {
getSource: 'getText',
Expand Down Expand Up @@ -35,7 +33,7 @@ const DEPRECATED_PASSTHROUGHS = {
// ------------------------------------------------------------------------------

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
const rule = {
meta: {
type: 'suggestion',
docs: {
Expand Down Expand Up @@ -96,3 +94,5 @@ module.exports = {
};
},
};

export default rule;
8 changes: 4 additions & 4 deletions lib/rules/no-deprecated-report-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
* @author Teddy Katz
*/

'use strict';

const utils = require('../utils');
import * as utils from '../utils.js';

// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
const rule = {
meta: {
type: 'suggestion',
docs: {
Expand Down Expand Up @@ -81,3 +79,5 @@ module.exports = {
};
},
};

export default rule;
Loading