CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-eslint-plugin-perfectionist

ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

plugin-configuration.mddocs/

Plugin Configuration

Core plugin object and predefined configurations for ESLint integration.

Capabilities

Default Plugin Export

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;
  };
}

Predefined Configurations

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" }],
    },
  },
];

Manual Configuration

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 Metadata

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")
}

Types

Base Configuration Options

/**
 * 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;
  };
}

docs

alphabet-utility.md

class-module-rules.md

collection-rules.md

import-export-rules.md

index.md

jsx-variable-rules.md

object-rules.md

plugin-configuration.md

typescript-rules.md

tile.json