or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

alphabet-utility.mdclass-module-rules.mdcollection-rules.mdimport-export-rules.mdindex.mdjsx-variable-rules.mdobject-rules.mdplugin-configuration.mdtypescript-rules.md
tile.json

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