# types/eslint.types.ts

> 87 lines of code and 18 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-types-eslint-types-ts
Source text: https://banes-lab.com/source/quality/types/eslint.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/quality/types.md), after [types/emitter.types.ts](https://banes-lab.com/source/quality/types/emitter.types.ts.md) and before [types/exclusions.types.ts](https://banes-lab.com/source/quality/types/exclusions.types.ts.md).

## Definitions

- `RuleOptionValue` (type_alias_declaration, line 7, exported)
- `RuleOptions` (type_alias_declaration, line 9, exported)
- `EslintRuleEntry` (type_alias_declaration, line 11, exported)
- `EmitExclude` (interface_declaration, line 13)
- `EmitPolicy` (interface_declaration, line 18, exported)
- `ValueContext` (interface_declaration, line 27, exported)
- `EmitContext` (interface_declaration, line 33, exported)
- `GovlabRuleDocs` (interface_declaration, line 42, exported)
- `GovlabRuleSpec` (interface_declaration, line 49, exported)
- `GovlabSettings` (type_alias_declaration, line 61, exported)
- `SettingsCarrier` (interface_declaration, line 63, exported)
- `FilenameCarrier` (interface_declaration, line 67, exported)
- `ScopeCarrier` (interface_declaration, line 71, exported)
- `InstalledPlugin` (interface_declaration, line 73, exported)
- `LoadedPlugin` (interface_declaration, line 78, exported)
- `BaseContext` (interface_declaration, line 83, exported)
- `TsTestScopeOptions` (interface_declaration, line 91, exported)
- `CoreState` (interface_declaration, line 98, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/quality/folder-quality-types.md)

## Source

```typescript
import type { ConcernConfig, ResolvedConcern } from "#types/concern.types";
import type { ESLint, Linter, Rule } from "eslint";
import type { GovlabEslintSettings } from "#types/config.types";
import type { InstallRecord } from "#types/dependency.types";
import type { QualityRuleRecord } from "#types/catalog.types";

export type RuleOptionValue = number[] | boolean | number | string;

export type RuleOptions = Record<string, RuleOptionValue>;

export type EslintRuleEntry = "error" | ["error", RuleOptions];

interface EmitExclude {
    rule?: string[];
    category?: string[];
}

export interface EmitPolicy {
    rules?: string[];
    exclude?: EmitExclude;
    concerns?: ConcernConfig;
    activePlugins?: string[];
    overrides?: Record<string, number>;
    options?: Record<string, Record<string, number[] | boolean | number>>;
}

export interface ValueContext {
    overrides: Record<string, number>;
    conceptOverride: Map<string, number>;
    conceptMin: Map<string, number>;
}

export interface EmitContext {
    ruleByKey: Map<string, QualityRuleRecord>;
    concernMap: Map<string, ResolvedConcern>;
    valueCtx: ValueContext;
    extraOptions: Record<string, Record<string, number[] | boolean | number>>;
    excludeRules: Set<string>;
    excludeCategories: Set<string>;
}

export interface GovlabRuleDocs {
    description: string;
    canonical: string[];
    ruleId: string;
    url?: string | undefined;
}

export interface GovlabRuleSpec {
    ruleId: string;
    description: string;
    canonical: string[];
    messages: Record<string, string>;
    type?: "layout" | "problem" | "suggestion";
    fixable?: "code" | "whitespace";
    hasSuggestions?: boolean;
    schema?: Rule.RuleMetaData["schema"];
    url?: string;
}

export type GovlabSettings = Partial<GovlabEslintSettings>;

export interface SettingsCarrier {
    settings?: { govlab?: GovlabSettings } | undefined;
}

export interface FilenameCarrier {
    filename: string;
}

export interface ScopeCarrier extends FilenameCarrier, SettingsCarrier {}

export interface InstalledPlugin {
    plugin: unknown;
    record: InstallRecord;
}

export interface LoadedPlugin {
    plugin: unknown;
    record: { npm?: string | null | undefined };
}

export interface BaseContext {
    globals?: Record<string, string>;
    plugins: Record<string, ESLint.Plugin>;
    rules: Linter.RulesRecord;
    settings: Linter.Config["settings"];
    tsParser: unknown;
}

export interface TsTestScopeOptions {
    tsParser: unknown;
    language: Linter.Config["languageOptions"];
    disabled: Linter.RulesRecord;
    extraGlobs?: string[];
}

export interface CoreState {
    htmlPlugin: unknown;
    installed: InstalledPlugin[];
    plugins: Record<string, ESLint.Plugin>;
    rules: Linter.RulesRecord;
    settings: Linter.Config["settings"];
    tsParser: unknown;
}
```
