Skip to content

Commit a885520

Browse files
authored
fix: update defaultOptions validation logic and add new test cases (#598)
1 parent c110872 commit a885520

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

lib/rules/require-meta-default-options.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,12 @@ const rule: Rule.RuleModule = {
8181
}
8282
return {};
8383
}
84-
85-
if (metaDefaultOptions.value.type !== 'ArrayExpression') {
84+
const metaDefaultOptionsValue =
85+
metaDefaultOptions.value.type === 'TSAsExpression' ||
86+
metaDefaultOptions.value.type === 'TSSatisfiesExpression'
87+
? metaDefaultOptions.value.expression
88+
: metaDefaultOptions.value;
89+
if (metaDefaultOptionsValue.type !== 'ArrayExpression') {
8690
context.report({
8791
node: metaDefaultOptions.value,
8892
messageId: 'defaultOptionsMustBeArray',
@@ -98,7 +102,7 @@ const rule: Rule.RuleModule = {
98102
.find((property) => property.key.name === 'type')?.value.value ===
99103
'array';
100104

101-
if (metaDefaultOptions.value.elements.length === 0 && !isArrayRootSchema) {
105+
if (metaDefaultOptionsValue.elements.length === 0 && !isArrayRootSchema) {
102106
context.report({
103107
node: metaDefaultOptions.value,
104108
messageId: 'defaultOptionsMustNotBeEmpty',

tests/lib/rules/require-meta-default-options.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,23 @@ ruleTesterTypeScript.run('require-meta-default-options (TypeScript)', rule, {
161161
create(context) {}
162162
});
163163
`,
164+
`export default createESLintRule<Options, MessageIds>({
165+
meta: { schema: [{}], defaultOptions: [{}] },
166+
create(context) {}
167+
});
168+
`,
169+
170+
`export default createESLintRule<Options, MessageIds>({
171+
meta: { schema: [{}], defaultOptions: [{}] as any},
172+
create(context) {}
173+
});
174+
`,
175+
176+
`export default createESLintRule<Options, MessageIds>({
177+
meta: { schema: [{}], defaultOptions: [{}] satisfies Options},
178+
create(context) {}
179+
});
180+
`,
164181
],
165182
invalid: [
166183
{

types/estree.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@ declare module 'estree' {
1818
expression: Expression | Identifier;
1919
}
2020

21+
interface TSSatisfiesExpression extends BaseExpression {
22+
type: 'TSSatisfiesExpression';
23+
expression: Expression | Identifier;
24+
}
25+
2126
interface TSExportAssignment extends BaseNode {
2227
type: 'TSExportAssignment';
2328
expression: Expression;
2429
}
2530

2631
interface ExpressionMap {
2732
TSAsExpression: TSAsExpression;
33+
TSSatisfiesExpression: TSSatisfiesExpression;
2834
}
2935

3036
interface NodeMap {
3137
TSAsExpression: TSAsExpression;
38+
TSSatisfiesExpression: TSSatisfiesExpression;
3239
TSExportAssignment: TSExportAssignment;
3340
}
3441
}

0 commit comments

Comments
 (0)