configuration/constants/eslint.constants.ts

configuration/constants/eslint.constants.ts is a file in GovLab Quality. 77 lines of code and 28 definitions.

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