@@ -1087,12 +1087,15 @@ namespace ts {
1087
1087
[ option : string ] : CompilerOptionsValue | undefined ;
1088
1088
}
1089
1089
1090
- /** Tuple with error messages for 'unknown compiler option', 'option requires type' */
1091
- type ParseCommandLineWorkerDiagnostics = [ DiagnosticMessage , DiagnosticMessage , DiagnosticMessage ] ;
1090
+ interface ParseCommandLineWorkerDiagnostics {
1091
+ unknownOptionDiagnostic : DiagnosticMessage ,
1092
+ unknownDidYouMeanDiagnostic : DiagnosticMessage ,
1093
+ optionTypeMismatchDiagnostic : DiagnosticMessage
1094
+ }
1092
1095
1093
1096
function parseCommandLineWorker (
1094
1097
getOptionNameMap : ( ) => OptionNameMap ,
1095
- [ unknownOptionDiagnostic , unknownDidYouMeanDiagnostic , optionTypeMismatchDiagnostic ] : ParseCommandLineWorkerDiagnostics ,
1098
+ diagnostics : ParseCommandLineWorkerDiagnostics ,
1096
1099
commandLine : readonly string [ ] ,
1097
1100
readFile ?: ( path : string ) => string | undefined ) {
1098
1101
const options = { } as OptionsBase ;
@@ -1123,7 +1126,7 @@ namespace ts {
1123
1126
else {
1124
1127
// Check to see if no argument was provided (e.g. "--locale" is the last command-line argument).
1125
1128
if ( ! args [ i ] && opt . type !== "boolean" ) {
1126
- errors . push ( createCompilerDiagnostic ( optionTypeMismatchDiagnostic , opt . name ) ) ;
1129
+ errors . push ( createCompilerDiagnostic ( diagnostics . optionTypeMismatchDiagnostic , opt . name ) ) ;
1127
1130
}
1128
1131
1129
1132
switch ( opt . type ) {
@@ -1162,10 +1165,10 @@ namespace ts {
1162
1165
else {
1163
1166
const possibleOption = getSpellingSuggestion ( s , optionDeclarations , opt => `--${ opt . name } ` ) ;
1164
1167
if ( possibleOption ) {
1165
- errors . push ( createCompilerDiagnostic ( unknownDidYouMeanDiagnostic , s , possibleOption . name ) ) ;
1168
+ errors . push ( createCompilerDiagnostic ( diagnostics . unknownDidYouMeanDiagnostic , s , possibleOption . name ) ) ;
1166
1169
}
1167
1170
else {
1168
- errors . push ( createCompilerDiagnostic ( unknownOptionDiagnostic , s ) ) ;
1171
+ errors . push ( createCompilerDiagnostic ( diagnostics . unknownOptionDiagnostic , s ) ) ;
1169
1172
}
1170
1173
}
1171
1174
}
@@ -1209,12 +1212,13 @@ namespace ts {
1209
1212
}
1210
1213
}
1211
1214
1215
+ const defaultDiagnostics = {
1216
+ unknownOptionDiagnostic : Diagnostics . Unknown_compiler_option_0 ,
1217
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
1218
+ optionTypeMismatchDiagnostic : Diagnostics . Compiler_option_0_expects_an_argument
1219
+ } ;
1212
1220
export function parseCommandLine ( commandLine : readonly string [ ] , readFile ?: ( path : string ) => string | undefined ) : ParsedCommandLine {
1213
- return parseCommandLineWorker ( getOptionNameMap , [
1214
- Diagnostics . Unknown_compiler_option_0 ,
1215
- Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
1216
- Diagnostics . Compiler_option_0_expects_an_argument
1217
- ] , commandLine , readFile ) ;
1221
+ return parseCommandLineWorker ( getOptionNameMap , defaultDiagnostics , commandLine , readFile ) ;
1218
1222
}
1219
1223
1220
1224
/** @internal */
@@ -1246,11 +1250,11 @@ namespace ts {
1246
1250
export function parseBuildCommand ( args : readonly string [ ] ) : ParsedBuildCommand {
1247
1251
let buildOptionNameMap : OptionNameMap | undefined ;
1248
1252
const returnBuildOptionNameMap = ( ) => ( buildOptionNameMap || ( buildOptionNameMap = createOptionNameMap ( buildOpts ) ) ) ;
1249
- const { options, fileNames : projects , errors } = parseCommandLineWorker ( returnBuildOptionNameMap , [
1250
- Diagnostics . Unknown_build_option_0 ,
1251
- Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
1252
- Diagnostics . Build_option_0_requires_a_value_of_type_1
1253
- ] , args ) ;
1253
+ const { options, fileNames : projects , errors } = parseCommandLineWorker ( returnBuildOptionNameMap , {
1254
+ unknownOptionDiagnostic : Diagnostics . Unknown_build_option_0 ,
1255
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
1256
+ optionTypeMismatchDiagnostic : Diagnostics . Build_option_0_requires_a_value_of_type_1
1257
+ } , args ) ;
1254
1258
const buildOptions = options as BuildOptions ;
1255
1259
1256
1260
if ( projects . length === 0 ) {
@@ -2476,7 +2480,12 @@ namespace ts {
2476
2480
basePath : string , errors : Push < Diagnostic > , configFileName ?: string ) : CompilerOptions {
2477
2481
2478
2482
const options = getDefaultCompilerOptions ( configFileName ) ;
2479
- convertOptionsFromJson ( optionDeclarations , jsonOptions , basePath , options , Diagnostics . Unknown_compiler_option_0 , errors ) ;
2483
+
2484
+ const diagnostics = {
2485
+ unknownOptionDiagnostic : Diagnostics . Unknown_compiler_option_0 ,
2486
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
2487
+ } ;
2488
+ convertOptionsFromJson ( optionDeclarations , jsonOptions , basePath , options , diagnostics , errors ) ;
2480
2489
if ( configFileName ) {
2481
2490
options . configFilePath = normalizeSlashes ( configFileName ) ;
2482
2491
}
@@ -2492,13 +2501,25 @@ namespace ts {
2492
2501
2493
2502
const options = getDefaultTypeAcquisition ( configFileName ) ;
2494
2503
const typeAcquisition = convertEnableAutoDiscoveryToEnable ( jsonOptions ) ;
2495
- convertOptionsFromJson ( typeAcquisitionDeclarations , typeAcquisition , basePath , options , Diagnostics . Unknown_type_acquisition_option_0 , errors ) ;
2504
+
2505
+ const diagnostics = {
2506
+ unknownOptionDiagnostic : Diagnostics . Unknown_compiler_option_0 ,
2507
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
2508
+ } ;
2509
+ convertOptionsFromJson ( typeAcquisitionDeclarations , typeAcquisition , basePath , options , diagnostics , errors ) ;
2496
2510
2497
2511
return options ;
2498
2512
}
2499
2513
2514
+
2515
+ interface ConvertOptionsDiagnostics {
2516
+ unknownOptionDiagnostic : DiagnosticMessage ,
2517
+ unknownDidYouMeanDiagnostic : DiagnosticMessage ,
2518
+ }
2519
+
2520
+
2500
2521
function convertOptionsFromJson ( optionDeclarations : readonly CommandLineOption [ ] , jsonOptions : any , basePath : string ,
2501
- defaultOptions : CompilerOptions | TypeAcquisition , diagnosticMessage : DiagnosticMessage , errors : Push < Diagnostic > ) {
2522
+ defaultOptions : CompilerOptions | TypeAcquisition , diagnostics : ConvertOptionsDiagnostics , errors : Push < Diagnostic > ) {
2502
2523
2503
2524
if ( ! jsonOptions ) {
2504
2525
return ;
@@ -2512,7 +2533,13 @@ namespace ts {
2512
2533
defaultOptions [ opt . name ] = convertJsonOption ( opt , jsonOptions [ id ] , basePath , errors ) ;
2513
2534
}
2514
2535
else {
2515
- errors . push ( createCompilerDiagnostic ( diagnosticMessage , id ) ) ;
2536
+ const possibleOption = getSpellingSuggestion ( id , < CommandLineOption [ ] > optionDeclarations , opt => opt . name ) ;
2537
+ if ( possibleOption ) {
2538
+ errors . push ( createCompilerDiagnostic ( diagnostics . unknownDidYouMeanDiagnostic , id , possibleOption . name ) ) ;
2539
+ }
2540
+ else {
2541
+ errors . push ( createCompilerDiagnostic ( diagnostics . unknownOptionDiagnostic , id ) ) ;
2542
+ }
2516
2543
}
2517
2544
}
2518
2545
}
0 commit comments