@@ -1252,7 +1252,7 @@ namespace ts {
1252
1252
const returnBuildOptionNameMap = ( ) => ( buildOptionNameMap || ( buildOptionNameMap = createOptionNameMap ( buildOpts ) ) ) ;
1253
1253
const { options, fileNames : projects , errors } = parseCommandLineWorker ( returnBuildOptionNameMap , {
1254
1254
unknownOptionDiagnostic : Diagnostics . Unknown_build_option_0 ,
1255
- unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
1255
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_build_option_0_Did_you_mean_1 ,
1256
1256
optionTypeMismatchDiagnostic : Diagnostics . Build_option_0_requires_a_value_of_type_1
1257
1257
} , args ) ;
1258
1258
const buildOptions = options as BuildOptions ;
@@ -1401,19 +1401,28 @@ namespace ts {
1401
1401
name : "compilerOptions" ,
1402
1402
type : "object" ,
1403
1403
elementOptions : commandLineOptionsToMap ( optionDeclarations ) ,
1404
- extraKeyDiagnosticMessage : Diagnostics . Unknown_compiler_option_0
1404
+ extraKeyDiagnostics : {
1405
+ unknownOptionDiagnostic : Diagnostics . Unknown_compiler_option_0 ,
1406
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1
1407
+ } ,
1405
1408
} ,
1406
1409
{
1407
1410
name : "typingOptions" ,
1408
1411
type : "object" ,
1409
1412
elementOptions : commandLineOptionsToMap ( typeAcquisitionDeclarations ) ,
1410
- extraKeyDiagnosticMessage : Diagnostics . Unknown_type_acquisition_option_0
1413
+ extraKeyDiagnostics : {
1414
+ unknownOptionDiagnostic : Diagnostics . Unknown_type_acquisition_option_0 ,
1415
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_type_acquisition_option_0_Did_you_mean_1
1416
+ } ,
1411
1417
} ,
1412
1418
{
1413
1419
name : "typeAcquisition" ,
1414
1420
type : "object" ,
1415
1421
elementOptions : commandLineOptionsToMap ( typeAcquisitionDeclarations ) ,
1416
- extraKeyDiagnosticMessage : Diagnostics . Unknown_type_acquisition_option_0
1422
+ extraKeyDiagnostics : {
1423
+ unknownOptionDiagnostic : Diagnostics . Unknown_type_acquisition_option_0 ,
1424
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_type_acquisition_option_0_Did_you_mean_1
1425
+ }
1417
1426
} ,
1418
1427
{
1419
1428
name : "extends" ,
@@ -1519,7 +1528,7 @@ namespace ts {
1519
1528
function convertObjectLiteralExpressionToJson (
1520
1529
node : ObjectLiteralExpression ,
1521
1530
knownOptions : Map < CommandLineOption > | undefined ,
1522
- extraKeyDiagnosticMessage : DiagnosticMessage | undefined ,
1531
+ extraKeyDiagnostics : DidYouMeanOptionalDiagnostics | undefined ,
1523
1532
parentOption : string | undefined
1524
1533
) : any {
1525
1534
const result : any = returnValue ? { } : undefined ;
@@ -1539,8 +1548,19 @@ namespace ts {
1539
1548
const textOfKey = getTextOfPropertyName ( element . name ) ;
1540
1549
const keyText = textOfKey && unescapeLeadingUnderscores ( textOfKey ) ;
1541
1550
const option = keyText && knownOptions ? knownOptions . get ( keyText ) : undefined ;
1542
- if ( keyText && extraKeyDiagnosticMessage && ! option ) {
1543
- errors . push ( createDiagnosticForNodeInSourceFile ( sourceFile , element . name , extraKeyDiagnosticMessage , keyText ) ) ;
1551
+ if ( keyText && extraKeyDiagnostics && ! option ) {
1552
+ if ( knownOptions ) {
1553
+ const possibleOption = getSpellingSuggestion ( keyText , arrayFrom ( knownOptions . keys ( ) ) , opt => opt ) ;
1554
+ if ( possibleOption ) {
1555
+ errors . push ( createDiagnosticForNodeInSourceFile ( sourceFile , element . name , extraKeyDiagnostics . unknownDidYouMeanDiagnostic , keyText , possibleOption ) ) ;
1556
+ }
1557
+ else {
1558
+ errors . push ( createDiagnosticForNodeInSourceFile ( sourceFile , element . name , extraKeyDiagnostics . unknownOptionDiagnostic , keyText ) ) ;
1559
+ }
1560
+ }
1561
+ else {
1562
+ errors . push ( createDiagnosticForNodeInSourceFile ( sourceFile , element . name , extraKeyDiagnostics . unknownOptionDiagnostic , keyText ) ) ;
1563
+ }
1544
1564
}
1545
1565
const value = convertPropertyValueToJson ( element . initializer , option ) ;
1546
1566
if ( typeof keyText !== "undefined" ) {
@@ -1642,9 +1662,9 @@ namespace ts {
1642
1662
// vs what we set in the json
1643
1663
// If need arises, we can modify this interface and callbacks as needed
1644
1664
if ( option ) {
1645
- const { elementOptions, extraKeyDiagnosticMessage , name : optionName } = < TsConfigOnlyOption > option ;
1665
+ const { elementOptions, extraKeyDiagnostics , name : optionName } = < TsConfigOnlyOption > option ;
1646
1666
return convertObjectLiteralExpressionToJson ( objectLiteralExpression ,
1647
- elementOptions , extraKeyDiagnosticMessage , optionName ) ;
1667
+ elementOptions , extraKeyDiagnostics , optionName ) ;
1648
1668
}
1649
1669
else {
1650
1670
return convertObjectLiteralExpressionToJson (
@@ -2503,23 +2523,17 @@ namespace ts {
2503
2523
const typeAcquisition = convertEnableAutoDiscoveryToEnable ( jsonOptions ) ;
2504
2524
2505
2525
const diagnostics = {
2506
- unknownOptionDiagnostic : Diagnostics . Unknown_compiler_option_0 ,
2507
- unknownDidYouMeanDiagnostic : Diagnostics . Unknown_compiler_option_0_Did_you_mean_1 ,
2526
+ unknownOptionDiagnostic : Diagnostics . Unknown_type_acquisition_option_0 ,
2527
+ unknownDidYouMeanDiagnostic : Diagnostics . Unknown_type_acquisition_option_0_Did_you_mean_1 ,
2508
2528
} ;
2509
2529
convertOptionsFromJson ( typeAcquisitionDeclarations , typeAcquisition , basePath , options , diagnostics , errors ) ;
2510
2530
2511
2531
return options ;
2512
2532
}
2513
2533
2514
2534
2515
- interface ConvertOptionsDiagnostics {
2516
- unknownOptionDiagnostic : DiagnosticMessage ,
2517
- unknownDidYouMeanDiagnostic : DiagnosticMessage ,
2518
- }
2519
-
2520
-
2521
2535
function convertOptionsFromJson ( optionDeclarations : readonly CommandLineOption [ ] , jsonOptions : any , basePath : string ,
2522
- defaultOptions : CompilerOptions | TypeAcquisition , diagnostics : ConvertOptionsDiagnostics , errors : Push < Diagnostic > ) {
2536
+ defaultOptions : CompilerOptions | TypeAcquisition , diagnostics : DidYouMeanOptionalDiagnostics , errors : Push < Diagnostic > ) {
2523
2537
2524
2538
if ( ! jsonOptions ) {
2525
2539
return ;
0 commit comments