Skip to content

Commit 7373aba

Browse files
authored
Upgrade to XO v2 (#1393)
1 parent 7761f91 commit 7373aba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+280
-266
lines changed

lint-processors/jsdoc-codeblocks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import tsParser from '@typescript-eslint/parser';
55
@import {Linter} from 'eslint';
66
*/
77

8-
const CODEBLOCK_REGEX = /(?<openingFence>(?<indent>^[ \t]*)```(?:ts|typescript)?\n)(?<code>[\s\S]*?)\n\s*```/gm;
8+
const CODEBLOCK_REGEX = /(?<openingFence>(?<indent>^[ \t]*)```(?:ts|typescript)?\n)(?<code>[\s\S]*?)\n\s*```/gmv;
99
/**
1010
@typedef {{lineOffset: number, characterOffset: number, indent: string, unindentedText: string}} CodeblockData
1111
@type {Map<string, CodeblockData[]>}

lint-processors/jsdoc-codeblocks.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1454,7 +1454,7 @@ describe('jsdoc-codeblocks processor', {concurrency: true}, () => {
14541454

14551455
for (const {type, name, code, output, errors = []} of testCases) {
14561456
test(`${type} - ${name}`, async t => {
1457-
const fileName = `test-${type}-${name.replaceAll(/\s+/g, '-')}.d.ts`;
1457+
const fileName = `test-${type}-${name.replaceAll(/\s+/gv, '-')}.d.ts`;
14581458
const filePath = path.join(root, fileName);
14591459
await fs.writeFile(filePath, code);
14601460
t.after(async () => {

lint-rules/validate-jsdoc-codeblocks.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import path from 'node:path';
22
import ts from 'typescript';
33
import {createFSBackedSystem, createVirtualTypeScriptEnvironment} from '@typescript/vfs';
44

5-
const CODEBLOCK_REGEX = /(?<openingFence>```(?:ts|typescript)?\n)(?<code>[\s\S]*?)```/g;
5+
const CODEBLOCK_REGEX = /(?<openingFence>```(?:ts|typescript)?\n)(?<code>[\s\S]*?)```/gv;
66
const FILENAME = 'example-codeblock.ts';
77
const TWOSLASH_COMMENT = '//=>';
88

@@ -24,8 +24,7 @@ const compilerOptions = {
2424
exactOptionalPropertyTypes: true,
2525
};
2626

27-
const virtualFsMap = new Map();
28-
virtualFsMap.set(FILENAME, '// Can\'t be empty');
27+
const virtualFsMap = new Map([[FILENAME, '// Can\'t be empty']]);
2928

3029
const rootDir = path.join(import.meta.dirname, '..');
3130
const system = createFSBackedSystem(virtualFsMap, rootDir, ts);
@@ -41,7 +40,7 @@ function parseCompilerOptions(code) {
4140
continue;
4241
}
4342

44-
const match = line.match(/^\s*\/\/ @(\w+): (.*)$/);
43+
const match = line.match(/^\s*\/\/ @(\w+): (.*)$/v);
4544
if (!match) {
4645
// Stop parsing at the first non-matching line
4746
return options;
@@ -265,12 +264,12 @@ function normalizeType(type, onlySortNumbers = false) {
265264

266265
if (onlySortNumbers) {
267266
// Sort only numeric members while keeping non-numeric members at their original positions
268-
const sortedNumericTypes = types.filter(([a]) => isNumeric(a)).sort(([a], [b]) => Number(a) - Number(b));
267+
const sortedNumericTypes = types.filter(([a]) => isNumeric(a)).toSorted(([a], [b]) => Number(a) - Number(b));
269268
let numericIndex = 0;
270269
types = types.map(t => isNumeric(t[0]) ? sortedNumericTypes[numericIndex++][1] : t[1]);
271270
} else {
272271
types = types
273-
.sort(([a], [b]) => a < b ? -1 : (a > b ? 1 : 0))
272+
.toSorted(([a], [b]) => a < b ? -1 : (a > b ? 1 : 0))
274273
.map(t => t[1]);
275274
}
276275

@@ -298,7 +297,7 @@ function normalizeType(type, onlySortNumbers = false) {
298297
return node;
299298
};
300299

301-
return print(visit(typeNode)).replaceAll(/^( +)/gm, indentation => {
300+
return print(visit(typeNode)).replaceAll(/^( +)/gmv, indentation => {
302301
// Replace spaces used for indentation with tabs
303302
const spacesPerTab = 4;
304303
const tabCount = Math.floor(indentation.length / spacesPerTab);
@@ -312,10 +311,10 @@ function getCommentForType(type) {
312311

313312
if (type.length < 80) {
314313
comment = type
315-
.replaceAll(/\r?\n\s*/g, ' ') // Collapse into single line
316-
.replaceAll(/{\s+/g, '{') // Remove spaces after `{`
317-
.replaceAll(/\s+}/g, '}') // Remove spaces before `}`
318-
.replaceAll(/;(?=})/g, ''); // Remove semicolons before `}`
314+
.replaceAll(/\r?\n\s*/gv, ' ') // Collapse into single line
315+
.replaceAll(/\{\s+/gv, '{') // Remove spaces after `{`
316+
.replaceAll(/\s+\}/gv, '}') // Remove spaces before `}`
317+
.replaceAll(/;(?=\})/gv, ''); // Remove semicolons before `}`
319318
}
320319

321320
return `${TWOSLASH_COMMENT} ${comment.replaceAll('\n', '\n// ')}`;

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@
5555
"devDependencies": {
5656
"@sindresorhus/tsconfig": "^8.0.1",
5757
"@typescript-eslint/parser": "^8.44.0",
58-
"eslint": "^9.35.0",
5958
"@typescript/vfs": "^1.6.1",
6059
"dedent": "^1.7.0",
60+
"eslint": "^10.1.0",
6161
"expect-type": "^1.2.2",
6262
"npm-run-all2": "^8.0.4",
6363
"tsd": "^0.33.0",
6464
"typescript": "^5.9.2",
6565
"typescript-eslint": "^8.47.0",
66-
"xo": "^1.2.2"
66+
"xo": "^2.0.2"
6767
},
6868
"tsd": {
6969
"compilerOptions": {

source/all-union-fields.d.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -69,23 +69,23 @@ function displayPetInfoWithAllUnionFields(petInfo: AllUnionFields<Cat | Dog>) {
6969
@category Union
7070
*/
7171
export type AllUnionFields<Union> =
72-
Extract<Union, NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | UnknownArray> extends infer SkippedMembers
73-
? Exclude<Union, SkippedMembers> extends infer RelevantMembers
74-
?
75-
| SkippedMembers
76-
| Simplify<
77-
// Include fields that are common in all union members
78-
SharedUnionFields<RelevantMembers> &
79-
// Include readonly fields present in any union member
80-
{
81-
readonly [P in ReadonlyKeysOfUnion<RelevantMembers>]?: ValueOfUnion<RelevantMembers, P & KeysOfUnion<RelevantMembers>>
82-
} &
83-
// Include remaining fields that are neither common nor readonly
84-
{
85-
[P in Exclude<KeysOfUnion<RelevantMembers>, ReadonlyKeysOfUnion<RelevantMembers> | keyof RelevantMembers>]?: ValueOfUnion<RelevantMembers, P>
86-
}
87-
>
88-
: never
89-
: never;
72+
Extract<Union, NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | UnknownArray> extends infer SkippedMembers
73+
? Exclude<Union, SkippedMembers> extends infer RelevantMembers
74+
? // eslint-disable-line @stylistic/operator-linebreak
75+
| SkippedMembers
76+
| Simplify<
77+
// Include fields that are common in all union members
78+
SharedUnionFields<RelevantMembers>
79+
// Include readonly fields present in any union member
80+
& {
81+
readonly [P in ReadonlyKeysOfUnion<RelevantMembers>]?: ValueOfUnion<RelevantMembers, P & KeysOfUnion<RelevantMembers>>
82+
}
83+
// Include remaining fields that are neither common nor readonly
84+
& {
85+
[P in Exclude<KeysOfUnion<RelevantMembers>, ReadonlyKeysOfUnion<RelevantMembers> | keyof RelevantMembers>]?: ValueOfUnion<RelevantMembers, P>
86+
}
87+
>
88+
: never
89+
: never;
9090

9191
export {};

source/array-splice.d.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import type {TupleOf} from './tuple-of.d.ts';
88
The implementation of `SplitArrayByIndex` for fixed length arrays.
99
*/
1010
type SplitFixedArrayByIndex<T extends UnknownArray, SplitIndex extends number> =
11-
SplitIndex extends 0
12-
? [[], T]
13-
: T extends readonly [...TupleOf<SplitIndex>, ...infer V]
14-
? T extends readonly [...infer U, ...V]
15-
? [U, V]
16-
: [never, never]
17-
: [never, never];
11+
SplitIndex extends 0
12+
? [[], T]
13+
: T extends readonly [...TupleOf<SplitIndex>, ...infer V]
14+
? T extends readonly [...infer U, ...V]
15+
? [U, V]
16+
: [never, never]
17+
: [never, never];
1818

1919
/**
2020
The implementation of `SplitArrayByIndex` for variable length arrays.
@@ -26,23 +26,23 @@ type SplitVariableArrayByIndex<T extends UnknownArray,
2626
? TupleOf<GreaterThanOrEqual<T1, 0> extends true ? T1 : number, VariablePartOfArray<T>[number]>
2727
: [],
2828
> =
29-
SplitIndex extends 0
30-
? [[], T]
31-
: GreaterThanOrEqual<StaticPartOfArray<T>['length'], SplitIndex> extends true
32-
? [
33-
SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[0],
34-
[
35-
...SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[1],
36-
...VariablePartOfArray<T>,
37-
],
38-
]
39-
: [
40-
[
41-
...StaticPartOfArray<T>,
42-
...(T2 extends UnknownArray ? T2 : []),
43-
],
44-
VariablePartOfArray<T>,
45-
];
29+
SplitIndex extends 0
30+
? [[], T]
31+
: GreaterThanOrEqual<StaticPartOfArray<T>['length'], SplitIndex> extends true
32+
? [
33+
SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[0],
34+
[
35+
...SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[1],
36+
...VariablePartOfArray<T>,
37+
],
38+
]
39+
: [
40+
[
41+
...StaticPartOfArray<T>,
42+
...(T2 extends UnknownArray ? T2 : []),
43+
],
44+
VariablePartOfArray<T>,
45+
];
4646

4747
/**
4848
Split the given array `T` by the given `SplitIndex`.

source/camel-cased-properties-deep.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ type CamelCasedPropertiesArrayDeep<
8686
? [_CamelCasedPropertiesDeep<U, Options>, ..._CamelCasedPropertiesDeep<V, Options>]
8787
: Value extends readonly [infer U, ...infer V]
8888
? readonly [_CamelCasedPropertiesDeep<U, Options>, ..._CamelCasedPropertiesDeep<V, Options>]
89-
: // Leading spread array
90-
Value extends readonly [...infer U, infer V]
89+
// Leading spread array
90+
: Value extends readonly [...infer U, infer V]
9191
? [..._CamelCasedPropertiesDeep<U, Options>, _CamelCasedPropertiesDeep<V, Options>]
92-
: // Array
93-
Value extends Array<infer U>
92+
// Array
93+
: Value extends Array<infer U>
9494
? Array<_CamelCasedPropertiesDeep<U, Options>>
9595
: Value extends ReadonlyArray<infer U>
9696
? ReadonlyArray<_CamelCasedPropertiesDeep<U, Options>>

source/int-range.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ type PrivateIntRange<
5656
// The final `List` is `[...StartLengthTuple, ...[number, ...GapLengthTuple], ...[number, ...GapLengthTuple], ... ...]`, so can initialize the `List` with `[...StartLengthTuple]`
5757
List extends unknown[] = TupleOf<Start, never>,
5858
EndLengthTuple extends unknown[] = TupleOf<End>,
59-
> = Gap extends 0 ?
59+
> = Gap extends 0
6060
// Handle the case that without `Step`
61-
List['length'] extends End // The result of "List[length] === End"
61+
? List['length'] extends End // The result of "List[length] === End"
6262
? Exclude<List[number], never> // All unused elements are `never`, so exclude them
6363
: PrivateIntRange<Start, End, Step, Gap, [...List, List['length'] ]>
6464
// Handle the case that with `Step`

source/internal/array.d.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ type B = StaticPartOfArray<A>;
2929
*/
3030
export type StaticPartOfArray<T extends UnknownArray, Result extends UnknownArray = []> =
3131
T extends unknown
32-
? number extends T['length'] ?
33-
T extends readonly [infer U, ...infer V]
32+
? number extends T['length']
33+
? T extends readonly [infer U, ...infer V]
3434
? StaticPartOfArray<V, [...Result, U]>
3535
: Result
3636
: T
@@ -69,11 +69,11 @@ type NormalResult = SetArrayAccess<ReadonlyStringArray, false>;
6969
```
7070
*/
7171
export type SetArrayAccess<T extends UnknownArray, IsReadonly extends boolean> =
72-
T extends readonly [...infer U] ?
73-
IsReadonly extends true
74-
? readonly [...U]
75-
: [...U]
76-
: T;
72+
T extends readonly [...infer U]
73+
? IsReadonly extends true
74+
? readonly [...U]
75+
: [...U]
76+
: T;
7777

7878
/**
7979
Returns whether the given array `T` is readonly.

source/internal/keys.d.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,14 @@ type Key4 = ExactKey<Object, 1>;
8787
@category Object
8888
*/
8989
export type ExactKey<T extends object, Key extends PropertyKey> =
90-
Key extends keyof T
91-
? Key
92-
: ToString<Key> extends keyof T
93-
? ToString<Key>
94-
: Key extends `${infer NumberKey extends number}`
95-
? NumberKey extends keyof T
96-
? NumberKey
97-
: never
98-
: never;
90+
Key extends keyof T
91+
? Key
92+
: ToString<Key> extends keyof T
93+
? ToString<Key>
94+
: Key extends `${infer NumberKey extends number}`
95+
? NumberKey extends keyof T
96+
? NumberKey
97+
: never
98+
: never;
9999

100100
export {};

0 commit comments

Comments
 (0)