# configuration/constants/eslint.constants.ts

> 77 lines of code and 28 definitions.

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

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

## Definitions

- `JS_ESLINT_TOOLS` (lexical_declaration, line 4, exported)
- `NON_ESLINT_TOOLS` (lexical_declaration, line 6, exported)
- `RULE_OPTION_DEFAULTS` (lexical_declaration, line 8, exported)
- `REQUIRES_MANDATORY_OPTIONS` (lexical_declaration, line 16, exported)
- `INCOMPATIBLE_ESLINT_RULES` (lexical_declaration, line 18, exported)
- `GOVLAB_NAMESPACES` (lexical_declaration, line 28, exported)
- `TS_PREFIX` (lexical_declaration, line 34, exported)
- `TS_FILES` (lexical_declaration, line 35, exported)
- `CONSUMER_CONFIG_FILES` (lexical_declaration, line 36, exported)
- `CONSUMER_CONFIG_OFF` (lexical_declaration, line 37, exported)
- `JS_FILES` (lexical_declaration, line 38, exported)
- `HTML_FILES` (lexical_declaration, line 39, exported)
- `MANIFEST_FILES` (lexical_declaration, line 40, exported)
- `LANGUAGE` (lexical_declaration, line 41, exported)
- `JSX` (lexical_declaration, line 42, exported)
- `JS_ECOSYSTEMS` (lexical_declaration, line 43, exported)
- `LANG_FILES` (lexical_declaration, line 44, exported)
- `LANG_PARSERS` (lexical_declaration, line 48, exported)
- `TS_TEST_FILES` (lexical_declaration, line 52, exported)
- `CORE_PLUGIN_SCOPE` (lexical_declaration, line 67, exported)
- `HTML_PLUGIN` (lexical_declaration, line 68, exported)
- `TS_PARSER` (lexical_declaration, line 69, exported)
- `JSON_PARSER` (lexical_declaration, line 70, exported)
- `RULE_OFF` (lexical_declaration, line 71, exported)
- `ALL_IGNORED_MARKER` (lexical_declaration, line 72, exported)
- `ESLINT_RULE_SUFFIX` (lexical_declaration, line 73, exported)
- `STYLISH_FORMATTER` (lexical_declaration, line 74, exported)
- `CURATED_SUGGESTIONS` (lexical_declaration, line 75, exported)

## Contained in

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

## Source

```typescript
import type { CuratedSuggestion } from "#types/edit.types";
import type { RuleOptions } from "#types/eslint.types";

export const JS_ESLINT_TOOLS: ReadonlySet<string> = new Set(["eslint", "govlab-eslint"]);

export const NON_ESLINT_TOOLS: ReadonlySet<string> = new Set(["govlab-stylelint"]);

export const RULE_OPTION_DEFAULTS: ReadonlyMap<string, RuleOptions> = new Map<string, RuleOptions>([
    ["@typescript-eslint/no-magic-numbers", { ignore: [-1, 0, 1] }],
    ["camelcase", { properties: "never" }],
    ["max-lines", { skipBlankLines: true, skipComments: true }],
    ["max-lines-per-function", { skipBlankLines: true, skipComments: true }],
    ["no-magic-numbers", { ignore: [-1, 0, 1] }],
]);

export const REQUIRES_MANDATORY_OPTIONS: ReadonlySet<string> = new Set(["jsonc/sort-keys", "jsonc/sort-array-values"]);

export const INCOMPATIBLE_ESLINT_RULES: ReadonlySet<string> = new Set([
    "jsonc/auto",
    "sort-keys",
    "sort-imports",
    "no-plusplus",
    "no-duplicate-imports",
    "no-multi-assign",
    "func-style",
]);

export const GOVLAB_NAMESPACES: ReadonlyMap<string, string> = new Map([
    ["govlab-context", "govlab-context"],
    ["govlab-eslint", "govlab"],
    ["govlab-extraction", "govlab-extraction"],
]);

export const TS_PREFIX = "@typescript-eslint/";
export const TS_FILES = ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"];
export const CONSUMER_CONFIG_FILES = ["ts", "js", "mjs", "cts", "mts"].map((ext) => `**/govlab.config.${ext}`);
export const CONSUMER_CONFIG_OFF = ["@typescript-eslint/naming-convention", "max-lines"];
export const JS_FILES = ["**/*.js", "**/*.mjs", "**/*.cjs", "**/*.jsx"];
export const HTML_FILES = ["**/*.html"];
export const MANIFEST_FILES = ["**/package.json", "**/_manifest.json"];
export const LANGUAGE = { ecmaVersion: 2025, sourceType: "module" } as const;
export const JSX = { ecmaFeatures: { jsx: true } };
export const JS_ECOSYSTEMS = new Set(["javascript", "typescript"]);
export const LANG_FILES = new Map<string, string[]>([
    ["json", ["**/*.json"]],
    ["yaml", ["**/*.yml", "**/*.yaml"]],
]);
export const LANG_PARSERS = new Map<string, string>([
    ["json", "jsonc-eslint-parser"],
    ["yaml", "yaml-eslint-parser"],
]);
export const TS_TEST_FILES = [
    "**/*.test.ts",
    "**/*.test.tsx",
    "**/*.test.mts",
    "**/*.test.cts",
    "**/*.spec.ts",
    "**/*.spec.tsx",
    "**/*-live-test.ts",
    "**/*-live-test.mts",
    "**/tests/**/*.ts",
    "**/tests/**/*.tsx",
    "**/tests/**/*.mts",
    "**/__tests__/**/*.ts",
    "**/__tests__/**/*.tsx",
];
export const CORE_PLUGIN_SCOPE = "@govlab/";
export const HTML_PLUGIN = "eslint-plugin-html";
export const TS_PARSER = "@typescript-eslint/parser";
export const JSON_PARSER = "jsonc-eslint-parser";
export const RULE_OFF = "off";
export const ALL_IGNORED_MARKER = "are ignored";
export const ESLINT_RULE_SUFFIX = ".eslint.rule.ts";
export const STYLISH_FORMATTER = "stylish";
export const CURATED_SUGGESTIONS: readonly CuratedSuggestion[] = [
    {
        messageId: "missingAccessibility",
        pick: "prefix",
        prefix: "public",
        ruleId: "@typescript-eslint/explicit-member-accessibility",
    },
    { messageId: null, pick: "sole", prefix: "", ruleId: "@typescript-eslint/prefer-optional-chain" },
    { messageId: null, pick: "sole", prefix: "", ruleId: "@typescript-eslint/no-unnecessary-type-conversion" },
];
```
