@eslint/plugin-kit
Version:
Utilities for building ESLint plugins.
82 lines (73 loc) • 2.11 kB
text/typescript
/**
* @fileoverview Types for the plugin-kit package.
* @author Nicholas C. Zakas
*/
//------------------------------------------------------------------------------
// Imports
//------------------------------------------------------------------------------
import type {
RuleDefinition,
RuleDefinitionTypeOptions,
RuleVisitor,
} from "@eslint/core";
//------------------------------------------------------------------------------
// Exports
//------------------------------------------------------------------------------
/**
* Defaults for non-language-related `RuleDefinition` options.
*/
export interface CustomRuleTypeDefinitions {
RuleOptions: unknown[];
MessageIds: string;
ExtRuleDocs: Record<string, unknown>;
}
/**
* A helper type to define language specific specializations of the `RuleDefinition` type.
*
* @example
* ```ts
* type YourRuleDefinition<
* Options extends Partial<CustomRuleTypeDefinitions> = {},
* > = CustomRuleDefinitionType<
* {
* LangOptions: YourLanguageOptions;
* Code: YourSourceCode;
* Visitor: YourRuleVisitor;
* Node: YourNode;
* },
* Options
* >;
* ```
*/
export type CustomRuleDefinitionType<
LanguageSpecificOptions extends Omit<
RuleDefinitionTypeOptions,
keyof CustomRuleTypeDefinitions
>,
Options extends Partial<CustomRuleTypeDefinitions>,
> = RuleDefinition<
// Language specific type options (non-configurable)
LanguageSpecificOptions &
Required<
// Rule specific type options (custom)
Options &
// Rule specific type options (defaults)
Omit<CustomRuleTypeDefinitions, keyof Options>
>
>;
/**
* Adds matching `:exit` selector properties for each key of a `RuleVisitor`.
*/
export type CustomRuleVisitorWithExit<RuleVisitorType extends RuleVisitor> = {
[Key in keyof RuleVisitorType as
| Key
| `${Key & string}:exit`]: RuleVisitorType[Key];
};
/**
* A map of names to string values, or `null` when no value is provided.
*/
export type StringConfig = Record<string, string | null>;
/**
* A map of names to boolean flags.
*/
export type BooleanConfig = Record<string, boolean>;