Core plugin object and predefined configurations for ESLint integration.
The main plugin object that exports all rules, configurations, and metadata.
/**
* Main ESLint plugin export containing rules, configs, and metadata
*/
interface PerfectionistPlugin {
rules: {
"sort-variable-declarations": Rule.RuleModule;
"sort-intersection-types": Rule.RuleModule;
"sort-heritage-clauses": Rule.RuleModule;
"sort-array-includes": Rule.RuleModule;
"sort-named-imports": Rule.RuleModule;
"sort-named-exports": Rule.RuleModule;
"sort-object-types": Rule.RuleModule;
"sort-union-types": Rule.RuleModule;
"sort-switch-case": Rule.RuleModule;
"sort-interfaces": Rule.RuleModule;
"sort-decorators": Rule.RuleModule;
"sort-jsx-props": Rule.RuleModule;
"sort-modules": Rule.RuleModule;
"sort-classes": Rule.RuleModule;
"sort-imports": Rule.RuleModule;
"sort-exports": Rule.RuleModule;
"sort-objects": Rule.RuleModule;
"sort-enums": Rule.RuleModule;
"sort-sets": Rule.RuleModule;
"sort-maps": Rule.RuleModule;
};
configs: {
"recommended-alphabetical-legacy": Linter.LegacyConfig;
"recommended-line-length-legacy": Linter.LegacyConfig;
"recommended-natural-legacy": Linter.LegacyConfig;
"recommended-custom-legacy": Linter.LegacyConfig;
"recommended-alphabetical": Linter.Config;
"recommended-line-length": Linter.Config;
"recommended-natural": Linter.Config;
"recommended-custom": Linter.Config;
};
meta: {
version: string;
name: string;
};
}Eight predefined ESLint configurations for different sorting strategies and ESLint versions.
/**
* Predefined configurations for different sorting strategies
*/
interface PredefinedConfigs {
// Legacy ESLint format configurations
"recommended-alphabetical-legacy": Linter.LegacyConfig;
"recommended-line-length-legacy": Linter.LegacyConfig;
"recommended-natural-legacy": Linter.LegacyConfig;
"recommended-custom-legacy": Linter.LegacyConfig;
// Modern ESLint flat config format
"recommended-alphabetical": Linter.Config;
"recommended-line-length": Linter.Config;
"recommended-natural": Linter.Config;
"recommended-custom": Linter.Config;
}Usage Examples:
// Using modern flat config
import perfectionistPlugin from "eslint-plugin-perfectionist";
export default [
perfectionistPlugin.configs["recommended-alphabetical"],
];
// Using legacy config
module.exports = {
extends: ["plugin:perfectionist/recommended-natural-legacy"],
};
// Custom configuration with specific rules
export default [
{
plugins: {
perfectionist: perfectionistPlugin,
},
rules: {
"perfectionist/sort-objects": ["error", { type: "line-length", order: "desc" }],
"perfectionist/sort-imports": ["error", { type: "natural" }],
},
},
];For custom configurations, you can manually configure the plugin with individual rules and options.
/**
* Manual configuration approach using individual rules
*/
interface ManualConfiguration {
plugins: {
perfectionist: PerfectionistPlugin;
};
rules: {
[ruleName: `perfectionist/${string}`]: "error" | "warn" | "off" | [
"error" | "warn" | "off",
RuleOptions
];
};
}
interface RuleOptions {
type?: "alphabetical" | "line-length" | "natural" | "custom";
order?: "asc" | "desc";
ignoreCase?: boolean;
// ... other rule-specific options
}Usage Examples:
import perfectionistPlugin from "eslint-plugin-perfectionist";
// Custom configuration with specific rule settings
export default [
{
plugins: {
perfectionist: perfectionistPlugin,
},
rules: {
"perfectionist/sort-objects": ["error", {
type: "line-length",
order: "desc"
}],
"perfectionist/sort-imports": ["error", {
type: "natural",
ignoreCase: false
}],
"perfectionist/sort-named-imports": "error",
},
},
];
// Using all rules with same base configuration
const baseConfig = { type: "alphabetical", order: "asc" };
export default [
{
plugins: {
perfectionist: perfectionistPlugin,
},
rules: Object.fromEntries(
Object.keys(perfectionistPlugin.rules).map(ruleName => [
`perfectionist/${ruleName}`,
["error", baseConfig]
])
),
},
];Plugin version and name information.
/**
* Plugin metadata containing version and name
*/
interface PluginMeta {
version: string; // Plugin version (e.g., "4.15.0")
name: string; // Plugin name (e.g., "eslint-plugin-perfectionist")
}/**
* Core sorting strategy options used across all rules
*/
interface BaseOptions {
/** Sorting algorithm to use */
type: "alphabetical" | "line-length" | "natural" | "custom";
/** Sort direction */
order: "asc" | "desc";
}
/**
* Plugin configuration interface defining the complete plugin structure
*/
interface PluginConfig {
rules: Record<string, Rule.RuleModule>;
configs: Record<string, Linter.Config | Linter.LegacyConfig>;
meta: {
version: string;
name: string;
};
}