mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 21:46:35 +00:00
chore: update lint rules
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
// Tests for the conventions/no-string-union-alias rule
|
||||
// (web/eslint-plugins/conventions/no-string-union-alias.js).
|
||||
//
|
||||
// The rule is a pure AST check (no filesystem), so it runs through the standard
|
||||
// RuleTester: plain .ts via the tseslint parser, and (because the rule is also
|
||||
// enabled on new .svelte scripts) .svelte via the svelte tester. No fixtures.
|
||||
import { RuleTester } from "eslint";
|
||||
import svelteParser from "svelte-eslint-parser";
|
||||
import tseslint from "typescript-eslint";
|
||||
import { describe, it } from "vitest";
|
||||
import noStringUnionAlias from "../conventions/no-string-union-alias.js";
|
||||
import { asRuleModule, svelteComponent } from "./helpers.js";
|
||||
|
||||
RuleTester.describe = describe;
|
||||
RuleTester.it = it;
|
||||
|
||||
const tsTester = new RuleTester({
|
||||
languageOptions: {
|
||||
parser: tseslint.parser,
|
||||
},
|
||||
});
|
||||
|
||||
const svelteTester = new RuleTester({
|
||||
languageOptions: {
|
||||
parser: svelteParser,
|
||||
parserOptions: { parser: tseslint.parser },
|
||||
},
|
||||
});
|
||||
|
||||
const frame = (script: string) => ({
|
||||
code: svelteComponent(script),
|
||||
filename: "Component.svelte",
|
||||
});
|
||||
|
||||
tsTester.run("no-string-union-alias", asRuleModule(noStringUnionAlias), {
|
||||
valid: [
|
||||
{ code: "type X = 1 | 2;", filename: "types.ts" },
|
||||
{ code: "type X = 'a' | number;", filename: "types.ts" },
|
||||
{ code: "type X = string;", filename: "types.ts" },
|
||||
{ code: "const KIND = { a: 1, b: 2 } as const;", filename: "types.ts" },
|
||||
{ code: "function f(x: 'a' | 'b') {}", filename: "types.ts" },
|
||||
{ code: "const x: 'a' | 'b' = 'a';", filename: "types.ts" },
|
||||
{ code: "type X = 'a' | TemplateStrings;", filename: "types.ts" },
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
code: "type Kind = 'a' | 'b' | 'c';",
|
||||
filename: "types.ts",
|
||||
errors: [{ messageId: "stringUnion" }],
|
||||
},
|
||||
{
|
||||
// Nested/parenthesized unions still resolve to string literals.
|
||||
code: "type Kind = ('a' | 'b') | 'c';",
|
||||
filename: "types.ts",
|
||||
errors: [{ messageId: "stringUnion" }],
|
||||
},
|
||||
{
|
||||
code: "type Lang =\n\t'en'\n\t| 'ru';",
|
||||
filename: "types.ts",
|
||||
errors: [{ messageId: "stringUnion" }],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// The rule also runs on new .svelte files (their scripts are TS).
|
||||
svelteTester.run(
|
||||
"no-string-union-alias (svelte script)",
|
||||
asRuleModule(noStringUnionAlias),
|
||||
{
|
||||
valid: [frame("type X = 1 | 2;"), frame("const M = { a: 1 } as const;")],
|
||||
invalid: [
|
||||
{
|
||||
...frame("type Kind = 'a' | 'b' | 'c';"),
|
||||
errors: [{ messageId: "stringUnion" }],
|
||||
},
|
||||
],
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user