Core plugin object containing metadata, rules, and preset configurations for various ESLint plugin development scenarios.
The default export provides the complete ESLint plugin object with all rules and configurations.
/**
* Main ESLint plugin export with metadata, rules, and preset configurations
*/
declare const plugin: ESLintPlugin;
export default plugin;
interface ESLintPlugin {
meta: {
name: string; // "eslint-plugin-eslint-plugin"
version: string; // Plugin version from package.json
};
rules: Record<string, Rule.RuleModule>;
configs: {
all: Linter.Config;
'all-type-checked': Linter.Config;
recommended: Linter.Config;
rules: Linter.Config;
tests: Linter.Config;
'rules-recommended': Linter.Config;
'tests-recommended': Linter.Config;
};
}Usage Examples:
import eslintPlugin from 'eslint-plugin-eslint-plugin';
// Access plugin metadata
console.log(eslintPlugin.meta.name); // "eslint-plugin-eslint-plugin"
console.log(eslintPlugin.meta.version); // "7.0.0"
// Use preset configurations
export default [
eslintPlugin.configs.recommended,
eslintPlugin.configs.rules
];
// Access individual rules
const metaTypeRule = eslintPlugin.rules['require-meta-type'];Seven preset configurations targeting different aspects of ESLint plugin development.
interface Linter.Config {
name: string;
plugins: Record<string, ESLint.Plugin>;
rules: Record<string, RuleLevel>;
}
type RuleLevel = 'error' | 'warn' | 'off' | 0 | 1 | 2;Includes all rules except those requiring type checking.
const allConfig: Linter.Config;Usage:
import eslintPlugin from 'eslint-plugin-eslint-plugin';
export default [
eslintPlugin.configs.all
];Includes all rules, including those requiring TypeScript type information.
const allTypeCheckedConfig: Linter.Config;Usage:
export default [
eslintPlugin.configs['all-type-checked']
];Includes only rules marked as recommended for general ESLint plugin development.
const recommendedConfig: Linter.Config;Usage:
export default [
eslintPlugin.configs.recommended
];Includes rules specifically for linting ESLint rule files (meta.docs.category === 'Rules').
const rulesConfig: Linter.Config;Usage:
export default [
{
files: ['lib/rules/*.js'],
...eslintPlugin.configs.rules
}
];Includes rules specifically for linting ESLint test files (meta.docs.category === 'Tests').
const testsConfig: Linter.Config;Usage:
export default [
{
files: ['tests/**/*.js'],
...eslintPlugin.configs.tests
}
];Combination of recommended rules that apply to ESLint rule files.
const rulesRecommendedConfig: Linter.Config;Combination of recommended rules that apply to ESLint test files.
const testsRecommendedConfig: Linter.Config;Internal configuration creation logic (for understanding the structure).
/**
* Creates a configuration object for a specific rule set
* @param configName - Name of the configuration preset
* @returns Linter configuration object
*/
declare function createConfig(configName: ConfigName): Linter.Config;
type ConfigName =
| 'all'
| 'all-type-checked'
| 'recommended'
| 'rules'
| 'tests'
| 'rules-recommended'
| 'tests-recommended';
/**
* Filter functions that determine which rules belong to each configuration
*/
declare const configFilters: Record<ConfigName, (rule: Rule.RuleModule) => boolean>;Advanced Usage:
// Selective rule configuration
export default [
{
plugins: {
'eslint-plugin': eslintPlugin
},
rules: {
// Enable specific rules manually
'eslint-plugin/require-meta-type': 'error',
'eslint-plugin/require-meta-docs-url': 'error',
'eslint-plugin/no-deprecated-context-methods': 'warn',
// Disable problematic rules
'eslint-plugin/consistent-output': 'off'
}
}
];
// Target specific file patterns
export default [
// Rules for ESLint rule files
{
files: ['lib/rules/*.js', 'src/rules/*.ts'],
...eslintPlugin.configs.rules
},
// Rules for test files
{
files: ['tests/**/*.js', '**/*.test.js'],
...eslintPlugin.configs.tests
}
];