ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
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;
};
}