Skip to content

Commit d6ffd82

Browse files
authored
add unknown option error for TypeAcquisition (#859)
1 parent cd7a8f6 commit d6ffd82

7 files changed

+62
-10
lines changed

internal/tsoptions/errors.go

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,26 @@ func (parser *commandLineParser) createUnknownOptionError(
4040
unknownOption string,
4141
unknownOptionErrorText string,
4242
node *ast.Node,
43-
sourceFile *ast.SourceFile, // todo: TsConfigSourceFile,
43+
sourceFile *ast.SourceFile,
44+
) *ast.Diagnostic {
45+
return createUnknownOptionError(
46+
unknownOption,
47+
parser.UnknownOptionDiagnostic(),
48+
unknownOptionErrorText,
49+
node,
50+
sourceFile,
51+
parser.AlternateMode(),
52+
)
53+
}
54+
55+
func createUnknownOptionError(
56+
unknownOption string,
57+
unknownOptionDiagnostic *diagnostics.Message,
58+
unknownOptionErrorText string, // optional
59+
node *ast.Node, // optional
60+
sourceFile *ast.SourceFile, // optional
61+
alternateMode *AlternateModeDiagnostics, // optional
4462
) *ast.Diagnostic {
45-
alternateMode := parser.AlternateMode()
4663
if alternateMode != nil && alternateMode.optionsNameMap != nil {
4764
otherOption := alternateMode.optionsNameMap.Get(strings.ToLower(unknownOption))
4865
if otherOption != nil {
@@ -58,7 +75,7 @@ func (parser *commandLineParser) createUnknownOptionError(
5875
unknownOptionErrorText = unknownOption
5976
}
6077
// TODO: possibleOption := spelling suggestion
61-
return createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, parser.UnknownOptionDiagnostic(), unknownOptionErrorText)
78+
return createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, unknownOptionDiagnostic, unknownOptionErrorText)
6279
}
6380

6481
func createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile *ast.SourceFile, node *ast.Node, message *diagnostics.Message, args ...any) *ast.Diagnostic {
@@ -67,3 +84,16 @@ func createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile *ast.Sou
6784
}
6885
return ast.NewCompilerDiagnostic(message, args...)
6986
}
87+
88+
func extraKeyDiagnostics(s string) *diagnostics.Message {
89+
switch s {
90+
case "compilerOptions":
91+
return diagnostics.Unknown_compiler_option_0
92+
case "watchOptions":
93+
return diagnostics.Unknown_watch_option_0
94+
case "typeAcquisition":
95+
return diagnostics.Unknown_type_acquisition_option_0
96+
default:
97+
return nil
98+
}
99+
}

internal/tsoptions/parsinghelpers.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/microsoft/typescript-go/internal/ast"
77
"github.com/microsoft/typescript-go/internal/collections"
88
"github.com/microsoft/typescript-go/internal/core"
9+
"github.com/microsoft/typescript-go/internal/diagnostics"
910
"github.com/microsoft/typescript-go/internal/tspath"
1011
)
1112

@@ -118,6 +119,7 @@ func parseJsonToStringKey(json any) *collections.OrderedMap[string, any] {
118119

119120
type optionParser interface {
120121
ParseOption(key string, value any) []*ast.Diagnostic
122+
UnknownOptionDiagnostic() *diagnostics.Message
121123
}
122124

123125
type compilerOptionsParser struct {
@@ -128,6 +130,10 @@ func (o *compilerOptionsParser) ParseOption(key string, value any) []*ast.Diagno
128130
return ParseCompilerOptions(key, value, o.CompilerOptions)
129131
}
130132

133+
func (o *compilerOptionsParser) UnknownOptionDiagnostic() *diagnostics.Message {
134+
return extraKeyDiagnostics("compilerOptions")
135+
}
136+
131137
type watchOptionsParser struct {
132138
*core.WatchOptions
133139
}
@@ -136,6 +142,10 @@ func (o *watchOptionsParser) ParseOption(key string, value any) []*ast.Diagnosti
136142
return ParseWatchOptions(key, value, o.WatchOptions)
137143
}
138144

145+
func (o *watchOptionsParser) UnknownOptionDiagnostic() *diagnostics.Message {
146+
return extraKeyDiagnostics("watchOptions")
147+
}
148+
139149
type typeAcquisitionParser struct {
140150
*core.TypeAcquisition
141151
}
@@ -144,6 +154,10 @@ func (o *typeAcquisitionParser) ParseOption(key string, value any) []*ast.Diagno
144154
return ParseTypeAcquisition(key, value, o.TypeAcquisition)
145155
}
146156

157+
func (o *typeAcquisitionParser) UnknownOptionDiagnostic() *diagnostics.Message {
158+
return extraKeyDiagnostics("typeAcquisition")
159+
}
160+
147161
func ParseCompilerOptions(key string, value any, allOptions *core.CompilerOptions) []*ast.Diagnostic {
148162
if value == nil {
149163
return nil

internal/tsoptions/tsconfigparsing.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,18 @@ func parseOwnConfigOfJsonSourceFile(
185185
parseDiagnostics = ParseTypeAcquisition(option.Name, value, typeAcquisition)
186186
}
187187
propertySetErrors = append(propertySetErrors, parseDiagnostics...)
188-
} else if keyText != "" {
188+
} else if keyText != "" && extraKeyDiagnostics(parentOption.Name) != nil {
189+
unknownNameDiag := extraKeyDiagnostics(parentOption.Name)
189190
if parentOption.ElementOptions != nil {
190191
// !!! TODO: support suggestion
191-
propertySetErrors = append(propertySetErrors, createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, propertyAssignment.Name(), diagnostics.Unknown_compiler_option_0, keyText))
192+
propertySetErrors = append(propertySetErrors, createUnknownOptionError(
193+
keyText,
194+
unknownNameDiag,
195+
"", /*unknownOptionErrorText*/
196+
propertyAssignment.Name(),
197+
sourceFile,
198+
nil, /*alternateMode*/
199+
))
192200
} else {
193201
// errors = append(errors, ast.NewCompilerDiagnostic(diagnostics.Unknown_compiler_option_0_Did_you_mean_1, keyText, core.FindKey(parentOption.ElementOptions, keyText)))
194202
}
@@ -556,7 +564,7 @@ func convertOptionsFromJson[O optionParser](optionsNameMap map[string]*CommandLi
556564
opt, ok := optionsNameMap[key]
557565
if !ok {
558566
// !!! TODO?: support suggestion
559-
errors = append(errors, ast.NewCompilerDiagnostic(diagnostics.Unknown_compiler_option_0, key))
567+
errors = append(errors, createUnknownOptionError(key, result.UnknownOptionDiagnostic(), "", nil, nil, nil))
560568
continue
561569
}
562570

testdata/baselines/reference/config/tsconfigParsing/Convert incorrect format jsconfig.json to typeAcquisition with json api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ TypeAcquisition::
3232
FileNames::
3333
/apath/a.ts,/apath/b.ts
3434
Errors::
35-
[91merror[0m[90m TS5023: [0mUnknown compiler option 'enableAutoDiscovy'.
35+
[91merror[0m[90m TS17010: [0mUnknown type acquisition option 'enableAutoDiscovy'.

testdata/baselines/reference/config/tsconfigParsing/Convert incorrect format jsconfig.json to typeAcquisition with jsonSourceFile api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ TypeAcquisition::
3232
FileNames::
3333
/apath/a.ts,/apath/b.ts
3434
Errors::
35-
[96mjsconfig.json[0m:[93m3[0m:[93m3[0m - [91merror[0m[90m TS5023: [0mUnknown compiler option 'enableAutoDiscovy'.
35+
[96mjsconfig.json[0m:[93m3[0m:[93m3[0m - [91merror[0m[90m TS17010: [0mUnknown type acquisition option 'enableAutoDiscovy'.
3636

3737
3 "enableAutoDiscovy": true,
3838
   ~~~~~~~~~~~~~~~~~~~

testdata/baselines/reference/config/tsconfigParsing/Convert incorrect format tsconfig.json to typeAcquisition with json api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ TypeAcquisition::
2525
FileNames::
2626
/apath/a.ts,/apath/b.ts
2727
Errors::
28-
[91merror[0m[90m TS5023: [0mUnknown compiler option 'enableAutoDiscovy'.
28+
[91merror[0m[90m TS17010: [0mUnknown type acquisition option 'enableAutoDiscovy'.

testdata/baselines/reference/config/tsconfigParsing/Convert incorrect format tsconfig.json to typeAcquisition with jsonSourceFile api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ TypeAcquisition::
2525
FileNames::
2626
/apath/a.ts,/apath/b.ts
2727
Errors::
28-
[96mtsconfig.json[0m:[93m3[0m:[93m3[0m - [91merror[0m[90m TS5023: [0mUnknown compiler option 'enableAutoDiscovy'.
28+
[96mtsconfig.json[0m:[93m3[0m:[93m3[0m - [91merror[0m[90m TS17010: [0mUnknown type acquisition option 'enableAutoDiscovy'.
2929

3030
3 "enableAutoDiscovy": true,
3131
   ~~~~~~~~~~~~~~~~~~~

0 commit comments

Comments
 (0)