Skip to content

Commit 424ba70

Browse files
committed
feat: add options schema for prefer-promise-reject-errors (#409)
1 parent 397faec commit 424ba70

File tree

4 files changed

+76
-32
lines changed

4 files changed

+76
-32
lines changed

internal/rules/prefer_promise_reject_errors/options.go

Lines changed: 41 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/rules/prefer_promise_reject_errors/prefer_promise_reject_errors.go

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,45 +14,27 @@ func buildRejectAnErrorMessage() rule.RuleMessage {
1414
}
1515
}
1616

17-
type PreferPromiseRejectErrorsOptions struct {
18-
AllowEmptyReject *bool
19-
AllowThrowingAny *bool
20-
AllowThrowingUnknown *bool
21-
}
22-
2317
var PreferPromiseRejectErrorsRule = rule.Rule{
2418
Name: "prefer-promise-reject-errors",
2519
Run: func(ctx rule.RuleContext, options any) rule.RuleListeners {
26-
opts, ok := options.(PreferPromiseRejectErrorsOptions)
27-
if !ok {
28-
opts = PreferPromiseRejectErrorsOptions{}
29-
}
30-
if opts.AllowEmptyReject == nil {
31-
opts.AllowEmptyReject = utils.Ref(false)
32-
}
33-
if opts.AllowThrowingAny == nil {
34-
opts.AllowThrowingAny = utils.Ref(false)
35-
}
36-
if opts.AllowThrowingUnknown == nil {
37-
opts.AllowThrowingUnknown = utils.Ref(false)
38-
}
20+
opts := utils.UnmarshalOptions[PreferPromiseRejectErrorsOptions](options, "prefer-promise-reject-errors")
3921

4022
checkRejectCall := func(callExpression *ast.CallExpression) {
4123
if len(callExpression.Arguments.Nodes) != 0 {
4224
argument := callExpression.Arguments.Nodes[0]
4325
t := ctx.TypeChecker.GetTypeAtLocation(argument)
4426

45-
if *opts.AllowThrowingAny && utils.IsTypeAnyType(t) {
27+
if opts.AllowThrowingAny && utils.IsTypeAnyType(t) {
4628
return
4729
}
48-
if *opts.AllowThrowingUnknown && utils.IsTypeUnknownType(t) {
30+
if opts.AllowThrowingUnknown && utils.IsTypeUnknownType(t) {
4931
return
5032
}
5133

5234
if utils.IsErrorLike(ctx.Program, ctx.TypeChecker, t) || utils.IsReadonlyErrorLike(ctx.Program, ctx.TypeChecker, t) {
5335
return
5436
}
55-
} else if *opts.AllowEmptyReject {
37+
} else if opts.AllowEmptyReject {
5638
return
5739
}
5840
ctx.ReportNode(&callExpression.Node, buildRejectAnErrorMessage())

internal/rules/prefer_promise_reject_errors/prefer_promise_reject_errors_test.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/typescript-eslint/tsgolint/internal/rule_tester"
77
"github.com/typescript-eslint/tsgolint/internal/rules/fixtures"
8-
"github.com/typescript-eslint/tsgolint/internal/utils"
98
)
109

1110
func TestPreferPromiseRejectErrors(t *testing.T) {
@@ -14,21 +13,21 @@ func TestPreferPromiseRejectErrors(t *testing.T) {
1413
{Code: "Promise.resolve(5);"},
1514
{
1615
Code: "Promise.reject();",
17-
Options: PreferPromiseRejectErrorsOptions{AllowEmptyReject: utils.Ref(true)},
16+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowEmptyReject": true}`),
1817
},
1918
{
2019
Code: `
2120
declare const someAnyValue: any;
2221
Promise.reject(someAnyValue);
2322
`,
24-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(true), AllowThrowingUnknown: utils.Ref(false)},
23+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": true, "allowThrowingUnknown": false}`),
2524
},
2625
{
2726
Code: `
2827
declare const someUnknownValue: unknown;
2928
Promise.reject(someUnknownValue);
3029
`,
31-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(false), AllowThrowingUnknown: utils.Ref(true)},
30+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": false, "allowThrowingUnknown": true}`),
3231
},
3332
{Code: "Promise.reject(new Error());"},
3433
{Code: "Promise.reject(new TypeError());"},
@@ -137,7 +136,7 @@ func TestPreferPromiseRejectErrors(t *testing.T) {
137136
reject();
138137
});
139138
`,
140-
Options: PreferPromiseRejectErrorsOptions{AllowEmptyReject: utils.Ref(true)},
139+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowEmptyReject": true}`),
141140
},
142141
{Code: "new Promise((yes, no) => no(new Error()));"},
143142
{Code: "new Promise();"},
@@ -286,14 +285,14 @@ func TestPreferPromiseRejectErrors(t *testing.T) {
286285
declare const someAnyValue: any;
287286
Promise.reject(someAnyValue);
288287
`,
289-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(true), AllowThrowingUnknown: utils.Ref(true)},
288+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": true, "allowThrowingUnknown": true}`),
290289
},
291290
{
292291
Code: `
293292
declare const someUnknownValue: unknown;
294293
Promise.reject(someUnknownValue);
295294
`,
296-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(true), AllowThrowingUnknown: utils.Ref(true)},
295+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": true, "allowThrowingUnknown": true}`),
297296
},
298297
}, []rule_tester.InvalidTestCase{
299298
{
@@ -394,7 +393,7 @@ func TestPreferPromiseRejectErrors(t *testing.T) {
394393
},
395394
{
396395
Code: "Promise.reject(undefined);",
397-
Options: PreferPromiseRejectErrorsOptions{AllowEmptyReject: utils.Ref(true)},
396+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowEmptyReject": true}`),
398397
Errors: []rule_tester.InvalidTestCaseError{
399398
{
400399
MessageId: "rejectAnError",
@@ -1405,7 +1404,7 @@ function fun<T extends number>(t: T): void {
14051404
declare const someAnyValue: any;
14061405
Promise.reject(someAnyValue);
14071406
`,
1408-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(false), AllowThrowingUnknown: utils.Ref(true)},
1407+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": false, "allowThrowingUnknown": true}`),
14091408
Errors: []rule_tester.InvalidTestCaseError{
14101409
{
14111410
MessageId: "rejectAnError",
@@ -1417,7 +1416,7 @@ function fun<T extends number>(t: T): void {
14171416
declare const someUnknownValue: unknown;
14181417
Promise.reject(someUnknownValue);
14191418
`,
1420-
Options: PreferPromiseRejectErrorsOptions{AllowThrowingAny: utils.Ref(true), AllowThrowingUnknown: utils.Ref(false)},
1419+
Options: rule_tester.OptionsFromJSON[PreferPromiseRejectErrorsOptions](`{"allowThrowingAny": true, "allowThrowingUnknown": false}`),
14211420
Errors: []rule_tester.InvalidTestCaseError{
14221421
{
14231422
MessageId: "rejectAnError",
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"$schema": "https://json-schema.org/draft-07/schema#",
3+
"definitions": {
4+
"prefer_promise_reject_errors_options": {
5+
"type": "object",
6+
"properties": {
7+
"allowEmptyReject": {
8+
"type": "boolean",
9+
"default": false
10+
},
11+
"allowThrowingAny": {
12+
"type": "boolean",
13+
"default": false
14+
},
15+
"allowThrowingUnknown": {
16+
"type": "boolean",
17+
"default": false
18+
}
19+
}
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)