Skip to content

Commit 6e455d7

Browse files
authored
feat(kit): add LanguagePreference (#1028)
1 parent 7b24ec8 commit 6e455d7

File tree

12 files changed

+160
-8
lines changed

12 files changed

+160
-8
lines changed

packages/plugins/eslint-plugin-react-x/src/rules/prefer-react-namespace-import.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export function create(context: RuleContext<MessageID, []>): RuleListener {
4343
messageId: "preferReactNamespaceImport",
4444
node: hasOtherSpecifiers ? node : node.parent,
4545
data: { importSource },
46+
// TODO: Use `settings.languagePreference` to determine what code style to use in the fixer (e.g. single or double quotes)
4647
fix(fixer) {
4748
const quote = node.parent.source.raw.at(0) ?? "'";
4849
const isTypeImport = node.parent.importKind === "type";

packages/shared/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"@eslint-react/kit": "workspace:*",
4747
"@typescript-eslint/utils": "^8.29.0",
4848
"picomatch": "^4.0.2",
49-
"ts-pattern": "^5.7.0"
49+
"ts-pattern": "^5.7.0",
50+
"valibot": "^1.0.0"
5051
},
5152
"devDependencies": {
5253
"@local/configs": "workspace:*",
@@ -55,8 +56,7 @@
5556
"fast-equals": "^5.2.2",
5657
"micro-memoize": "^4.1.3",
5758
"tsup": "^8.4.0",
58-
"type-fest": "^4.38.0",
59-
"valibot": "^1.0.0"
59+
"type-fest": "^4.38.0"
6060
},
6161
"engines": {
6262
"bun": ">=1.0.15",

packages/shared/src/settings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,6 @@ export const defineSettings: (settings: ESLintReactSettings) => ESLintReactSetti
126126

127127
declare module "@typescript-eslint/utils/ts-eslint" {
128128
export interface SharedConfigurationSettings {
129-
"react-x"?: Partial<ESLintReactSettings>;
129+
["react-x"]?: Partial<ESLintReactSettings>;
130130
}
131131
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[**@eslint-react/kit**](../../../README.md)
2+
3+
***
4+
5+
[@eslint-react/kit](../../../README.md) / LanguagePreference
6+
7+
# LanguagePreference
8+
9+
## Variables
10+
11+
- [DEFAULT\_LANGUAGE\_PREFERENCE](variables/DEFAULT_LANGUAGE_PREFERENCE.md)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
[**@eslint-react/kit**](../../../../README.md)
2+
3+
***
4+
5+
[@eslint-react/kit](../../../../README.md) / [LanguagePreference](../README.md) / DEFAULT\_LANGUAGE\_PREFERENCE
6+
7+
# Variable: DEFAULT\_LANGUAGE\_PREFERENCE
8+
9+
> `const` **DEFAULT\_LANGUAGE\_PREFERENCE**: `object`
10+
11+
The default language preference.
12+
13+
## Type declaration
14+
15+
### bracketSameLine
16+
17+
> **bracketSameLine**: `boolean`
18+
19+
### bracketSpacing
20+
21+
> **bracketSpacing**: `boolean`
22+
23+
### endOfLine
24+
25+
> **endOfLine**: `"lf"` \| `"crlf"` \| `"cr"` \| `"auto"`
26+
27+
### indentStyle
28+
29+
> **indentStyle**: `"tab"` \| `"space"`
30+
31+
### indentWidth
32+
33+
> **indentWidth**: `number`
34+
35+
### insertFinalNewline
36+
37+
> **insertFinalNewline**: `boolean`
38+
39+
### jsxQuoteStyle
40+
41+
> **jsxQuoteStyle**: `"preferDouble"` \| `"preferSingle"`
42+
43+
### quoteStyle
44+
45+
> **quoteStyle**: `"preferDouble"` \| `"preferSingle"` \| `"alwaysDouble"` \| `"alwaysSingle"`
46+
47+
### semicolon
48+
49+
> **semicolon**: `"always"` \| `"prefer"` \| `"asi"`
50+
51+
### trailingComma
52+
53+
> **trailingComma**: `"all"` \| `"es5"` \| `"none"`

packages/utilities/kit/docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
## Namespaces
88

99
- [JsxRuntime](@eslint-react/namespaces/JsxRuntime/README.md)
10+
- [LanguagePreference](@eslint-react/namespaces/LanguagePreference/README.md)
1011

1112
## Type Aliases
1213

packages/utilities/kit/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
"dependencies": {
4545
"@eslint-react/eff": "workspace:*",
4646
"@typescript-eslint/utils": "^8.29.0",
47-
"ts-pattern": "^5.7.0"
47+
"ts-pattern": "^5.7.0",
48+
"valibot": "^1.0.0"
4849
},
4950
"devDependencies": {
5051
"@local/configs": "workspace:*",
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { SharedConfigurationSettings } from "@typescript-eslint/utils/ts-eslint"; // eslint-disable-line @typescript-eslint/no-unused-vars
2+
import { type InferOutput, parse } from "valibot";
3+
import { LanguagePreferenceSchema } from "./LanguagePreferenceSchema";
4+
5+
/**
6+
* @internal
7+
*/
8+
export type LanguagePreference = InferOutput<typeof LanguagePreferenceSchema>;
9+
10+
/**
11+
* The default language preference.
12+
*/
13+
export const DEFAULT_LANGUAGE_PREFERENCE = parse(LanguagePreferenceSchema, {});
14+
15+
declare module "@typescript-eslint/utils/ts-eslint" {
16+
export interface SharedConfigurationSettings {
17+
// eslint-disable-next-line no-restricted-syntax
18+
languagePreference?: Partial<LanguagePreference>;
19+
}
20+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { boolean, literal, number, object, optional, union } from "valibot";
2+
3+
/**
4+
* @internal
5+
*/
6+
export const LanguagePreferenceSchema = object({
7+
bracketSameLine: optional(boolean(), false),
8+
bracketSpacing: optional(boolean(), true),
9+
endOfLine: optional(
10+
union([
11+
literal("lf"),
12+
literal("crlf"),
13+
literal("cr"),
14+
literal("auto"),
15+
]),
16+
"lf",
17+
),
18+
indentStyle: optional(
19+
union([
20+
literal("tab"),
21+
literal("space"),
22+
]),
23+
"space",
24+
),
25+
indentWidth: optional(number(), 2),
26+
insertFinalNewline: optional(boolean(), true),
27+
jsxQuoteStyle: optional(
28+
union([
29+
literal("preferDouble"),
30+
literal("preferSingle"),
31+
]),
32+
"preferDouble",
33+
),
34+
quoteStyle: optional(
35+
union([
36+
literal("alwaysDouble"),
37+
literal("alwaysSingle"),
38+
literal("preferDouble"),
39+
literal("preferSingle"),
40+
]),
41+
"preferSingle",
42+
),
43+
semicolon: optional(
44+
union([
45+
literal("always"),
46+
literal("prefer"),
47+
literal("asi"),
48+
]),
49+
"always",
50+
),
51+
trailingComma: optional(
52+
union([
53+
literal("all"),
54+
literal("es5"),
55+
literal("none"),
56+
]),
57+
"all",
58+
),
59+
});
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from "./LanguagePreference";
2+
export * from "./LanguagePreferenceSchema";

0 commit comments

Comments
 (0)