2025-10-15 10:12:44 +03:00

1241 lines
51 KiB
Go

package tsoptions
import (
"reflect"
"slices"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/diagnostics"
)
var OptionsDeclarations = slices.Concat(commonOptionsWithBuild, optionsForCompiler)
var commonOptionsWithBuild = []*CommandLineOption{
//******* commonOptionsWithBuild *******
{
Name: "help",
ShortName: "h",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
IsCommandLineOnly: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Print_this_message,
DefaultValueDescription: false,
},
{
Name: "help",
ShortName: "?",
Kind: CommandLineOptionTypeBoolean,
IsCommandLineOnly: true,
Category: diagnostics.Command_line_Options,
DefaultValueDescription: false,
},
{
Name: "watch",
ShortName: "w",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
IsCommandLineOnly: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Watch_input_files,
DefaultValueDescription: false,
},
{
Name: "preserveWatchOutput",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: false,
Category: diagnostics.Output_Formatting,
Description: diagnostics.Disable_wiping_the_console_in_watch_mode,
DefaultValueDescription: false,
},
{
Name: "listFiles",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Print_all_of_the_files_read_during_the_compilation,
DefaultValueDescription: false,
},
{
Name: "explainFiles",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included,
DefaultValueDescription: false,
},
{
Name: "listEmittedFiles",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
DefaultValueDescription: false,
},
{
Name: "pretty",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Output_Formatting,
Description: diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
DefaultValueDescription: true,
},
{
Name: "traceResolution",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Log_paths_used_during_the_moduleResolution_process,
DefaultValueDescription: false,
},
{
Name: "diagnostics",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Output_compiler_performance_information_after_building,
DefaultValueDescription: false,
},
{
Name: "extendedDiagnostics",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Output_more_detailed_compiler_performance_information_after_building,
DefaultValueDescription: false,
},
{
Name: "generateCpuProfile",
Kind: CommandLineOptionTypeString,
IsFilePath: true,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
DefaultValueDescription: "profile.cpuprofile",
},
{
Name: "generateTrace",
Kind: CommandLineOptionTypeString,
IsFilePath: true,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Generates_an_event_trace_and_a_list_of_types,
},
{
Name: "incremental",
ShortName: "i",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Projects,
Description: diagnostics.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: diagnostics.X_false_unless_composite_is_set,
},
{
Name: "declaration",
ShortName: "d",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
transpileOptionValue: core.TSUnknown,
Description: diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
DefaultValueDescription: diagnostics.X_false_unless_composite_is_set,
},
{
Name: "declarationMap",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
DefaultValueDescription: false,
Description: diagnostics.Create_sourcemaps_for_d_ts_files,
},
{
Name: "emitDeclarationOnly",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
Description: diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: false,
},
{
Name: "sourceMap",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
DefaultValueDescription: false,
Description: diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
},
{
Name: "inlineSourceMap",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
DefaultValueDescription: false,
},
{
Name: "noCheck",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: false,
Category: diagnostics.Compiler_Diagnostics,
Description: diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported,
transpileOptionValue: core.TSTrue,
DefaultValueDescription: false,
// Not setting affectsSemanticDiagnostics or affectsBuildInfo because we dont want all diagnostics to go away, its handled in builder
},
{
Name: "noEmit",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
Description: diagnostics.Disable_emitting_files_from_a_compilation,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: false,
},
{
Name: "assumeChangesOnlyAffectDirectDependencies",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Watch_and_Build_Modes,
Description: diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it,
DefaultValueDescription: false,
},
{
Name: "locale",
Kind: CommandLineOptionTypeString,
Category: diagnostics.Command_line_Options,
IsCommandLineOnly: true,
Description: diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
DefaultValueDescription: diagnostics.Platform_specific,
},
{
Name: "quiet",
ShortName: "q",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Do_not_print_diagnostics,
},
{
Name: "singleThreaded",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Run_in_single_threaded_mode,
},
{
Name: "pprofDir",
Kind: CommandLineOptionTypeString,
IsFilePath: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory,
},
}
var optionsForCompiler = []*CommandLineOption{
//******* compilerOptions not common with --build *******
// CommandLine only options
{
Name: "all",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Show_all_compiler_options,
DefaultValueDescription: false,
},
{
Name: "version",
ShortName: "v",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Print_the_compiler_s_version,
DefaultValueDescription: false,
},
{
Name: "init",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file,
DefaultValueDescription: false,
},
{
Name: "project",
ShortName: "p",
Kind: CommandLineOptionTypeString,
IsFilePath: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Command_line_Options,
Description: diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json,
},
{
Name: "showConfig",
Kind: CommandLineOptionTypeBoolean,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Command_line_Options,
IsCommandLineOnly: true,
Description: diagnostics.Print_the_final_configuration_instead_of_building,
DefaultValueDescription: false,
},
{
Name: "listFilesOnly",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Command_line_Options,
IsCommandLineOnly: true,
Description: diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing,
DefaultValueDescription: false,
},
// Basic
// targetOptionDeclaration,
{
Name: "target",
ShortName: "t",
Kind: CommandLineOptionTypeEnum, // targetOptionMap
AffectsSourceFile: true,
AffectsModuleResolution: true,
AffectsEmit: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
DefaultValueDescription: core.ScriptTargetES5,
},
// moduleOptionDeclaration,
{
Name: "module",
ShortName: "m",
Kind: CommandLineOptionTypeEnum, // moduleOptionMap
AffectsModuleResolution: true,
AffectsEmit: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_what_module_code_is_generated,
DefaultValueDescription: core.TSUnknown,
},
{
Name: "lib",
Kind: CommandLineOptionTypeList,
// elements: &CommandLineOption{
// name: "lib",
// kind: CommandLineOptionTypeEnum, // libMap,
// defaultValueDescription: core.TSUnknown,
// },
AffectsProgramStructure: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
transpileOptionValue: core.TSUnknown,
},
{
Name: "allowJs",
Kind: CommandLineOptionTypeBoolean,
allowJsFlag: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.JavaScript_Support,
Description: diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these_files,
DefaultValueDescription: false,
},
{
Name: "checkJs",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.JavaScript_Support,
Description: diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
DefaultValueDescription: false,
},
{
Name: "jsx",
Kind: CommandLineOptionTypeEnum, // jsxOptionMap,
AffectsSourceFile: true,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsModuleResolution: true,
// The checker emits an error when it sees JSX but this option is not set in compilerOptions.
// This is effectively a semantic error, so mark this option as affecting semantic diagnostics
// so we know to refresh errors when this option is changed.
AffectsSemanticDiagnostics: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_what_JSX_code_is_generated,
DefaultValueDescription: core.TSUnknown,
},
{
Name: "outFile",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsDeclarationPath: true,
IsFilePath: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
Description: diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
transpileOptionValue: core.TSUnknown,
},
{
Name: "outDir",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsDeclarationPath: true,
IsFilePath: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
Description: diagnostics.Specify_an_output_folder_for_all_emitted_files,
},
{
Name: "rootDir",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsDeclarationPath: true,
IsFilePath: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_the_root_folder_within_your_source_files,
DefaultValueDescription: diagnostics.Computed_from_the_list_of_input_files,
},
{
Name: "composite",
Kind: CommandLineOptionTypeBoolean,
// Not setting affectsEmit because we calculate this flag might not affect full emit
AffectsBuildInfo: true,
IsTSConfigOnly: true,
Category: diagnostics.Projects,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: false,
Description: diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
},
{
Name: "tsBuildInfoFile",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
IsFilePath: true,
Category: diagnostics.Projects,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: ".tsbuildinfo",
Description: diagnostics.Specify_the_path_to_tsbuildinfo_incremental_compilation_file,
},
{
Name: "removeComments",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Emit,
DefaultValueDescription: false,
Description: diagnostics.Disable_emitting_comments,
},
{
Name: "importHelpers",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsSourceFile: true,
Category: diagnostics.Emit,
Description: diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
DefaultValueDescription: false,
},
{
Name: "downlevelIteration",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
DefaultValueDescription: false,
},
{
Name: "isolatedModules",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
transpileOptionValue: core.TSTrue,
DefaultValueDescription: false,
},
{
Name: "verbatimModuleSyntax",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting,
DefaultValueDescription: false,
},
{
Name: "isolatedDeclarations",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files,
DefaultValueDescription: false,
AffectsBuildInfo: true,
AffectsSemanticDiagnostics: true,
},
{
Name: "erasableSyntaxOnly",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript,
DefaultValueDescription: false,
AffectsBuildInfo: true,
AffectsSemanticDiagnostics: true,
},
{
Name: "libReplacement",
Kind: CommandLineOptionTypeBoolean,
AffectsProgramStructure: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Enable_lib_replacement,
DefaultValueDescription: false,
},
// Strict Type Checks
{
Name: "strict",
Kind: CommandLineOptionTypeBoolean,
// Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
// The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
// But we need to store `strict` in builf info, even though it won't be examined directly, so that the
// flags it controls (e.g. `strictNullChecks`) will be retrieved correctly
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_all_strict_type_checking_options,
DefaultValueDescription: false,
},
{
Name: "noImplicitAny",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "strictNullChecks",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.When_type_checking_take_into_account_null_and_undefined,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "strictFunctionTypes",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "strictBindCallApply",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "strictPropertyInitialization",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "strictBuiltinIteratorReturn",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "noImplicitThis",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "useUnknownInCatchVariables",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
{
Name: "alwaysStrict",
Kind: CommandLineOptionTypeBoolean,
AffectsSourceFile: true,
AffectsEmit: true,
AffectsBuildInfo: true,
strictFlag: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Ensure_use_strict_is_always_emitted,
DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
},
// Additional Checks
{
Name: "noUnusedLocals",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_error_reporting_when_local_variables_aren_t_read,
DefaultValueDescription: false,
},
{
Name: "noUnusedParameters",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
DefaultValueDescription: false,
},
{
Name: "exactOptionalPropertyTypes",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined,
DefaultValueDescription: false,
},
{
Name: "noImplicitReturns",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
DefaultValueDescription: false,
},
{
Name: "noFallthroughCasesInSwitch",
Kind: CommandLineOptionTypeBoolean,
AffectsBindDiagnostics: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements,
DefaultValueDescription: false,
},
{
Name: "noUncheckedIndexedAccess",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Add_undefined_to_a_type_when_accessed_using_an_index,
DefaultValueDescription: false,
},
{
Name: "noImplicitOverride",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier,
DefaultValueDescription: false,
},
{
Name: "noPropertyAccessFromIndexSignature",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: false,
Category: diagnostics.Type_Checking,
Description: diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
DefaultValueDescription: false,
},
// Module Resolution
{
Name: "moduleResolution",
Kind: CommandLineOptionTypeEnum,
// new Map(Object.entries({
// // N.B. The first entry specifies the value shown in `tsc --init`
// node10: ModuleResolutionKind.Node10,
// node: ModuleResolutionKind.Node10,
// classic: ModuleResolutionKind.Classic,
// node16: ModuleResolutionKind.Node16,
// nodenext: ModuleResolutionKind.NodeNext,
// bundler: ModuleResolutionKind.Bundler,
// })),
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
DefaultValueDescription: diagnostics.X_module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node,
},
{
Name: "baseUrl",
Kind: CommandLineOptionTypeString,
AffectsModuleResolution: true,
IsFilePath: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names,
},
{
// this option can only be specified in tsconfig.json
// use type = object to copy the value as-is
Name: "paths",
Kind: CommandLineOptionTypeObject,
AffectsModuleResolution: true,
allowConfigDirTemplateSubstitution: true,
IsTSConfigOnly: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
transpileOptionValue: core.TSUnknown,
},
{
// this option can only be specified in tsconfig.json
// use type = object to copy the value as-is
Name: "rootDirs",
Kind: CommandLineOptionTypeList,
IsTSConfigOnly: true,
AffectsModuleResolution: true,
allowConfigDirTemplateSubstitution: true,
Category: diagnostics.Modules,
Description: diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
transpileOptionValue: core.TSUnknown,
DefaultValueDescription: diagnostics.Computed_from_the_list_of_input_files,
},
{
Name: "typeRoots",
Kind: CommandLineOptionTypeList,
AffectsModuleResolution: true,
allowConfigDirTemplateSubstitution: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types,
},
{
Name: "types",
Kind: CommandLineOptionTypeList,
AffectsProgramStructure: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Modules,
Description: diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
transpileOptionValue: core.TSUnknown,
},
{
Name: "allowSyntheticDefaultImports",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
DefaultValueDescription: diagnostics.X_module_system_or_esModuleInterop,
},
{
Name: "esModuleInterop",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsEmit: true,
AffectsBuildInfo: true,
ShowInSimplifiedHelpView: true,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
DefaultValueDescription: false,
},
{
Name: "preserveSymlinks",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
DefaultValueDescription: false,
},
{
Name: "allowUmdGlobalAccess",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Modules,
Description: diagnostics.Allow_accessing_UMD_globals_from_modules,
DefaultValueDescription: false,
},
{
Name: "moduleSuffixes",
Kind: CommandLineOptionTypeList,
listPreserveFalsyValues: true,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.List_of_file_name_suffixes_to_search_when_resolving_a_module,
},
{
Name: "allowImportingTsExtensions",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Modules,
Description: diagnostics.Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set,
DefaultValueDescription: false,
transpileOptionValue: core.TSUnknown,
},
{
Name: "rewriteRelativeImportExtensions",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Modules,
Description: diagnostics.Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_in_output_files,
DefaultValueDescription: false,
},
{
Name: "resolvePackageJsonExports",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Use_the_package_json_exports_field_when_resolving_package_imports,
DefaultValueDescription: diagnostics.X_true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false,
},
{
Name: "resolvePackageJsonImports",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Use_the_package_json_imports_field_when_resolving_imports,
DefaultValueDescription: diagnostics.X_true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false,
},
{
Name: "customConditions",
Kind: CommandLineOptionTypeList,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports,
},
{
Name: "noUncheckedSideEffectImports",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Modules,
Description: diagnostics.Check_side_effect_imports,
DefaultValueDescription: false,
},
// Source Maps
{
Name: "sourceRoot",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
},
{
Name: "mapRoot",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
},
{
Name: "inlineSources",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
DefaultValueDescription: false,
},
// Experimental
{
Name: "experimentalDecorators",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Enable_experimental_support_for_legacy_experimental_decorators,
DefaultValueDescription: false,
},
{
Name: "emitDecoratorMetadata",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files,
DefaultValueDescription: false,
},
// Advanced
{
Name: "jsxFactory",
Kind: CommandLineOptionTypeString,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
DefaultValueDescription: "`React.createElement`",
},
{
Name: "jsxFragmentFactory",
Kind: CommandLineOptionTypeString,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment,
DefaultValueDescription: "React.Fragment",
},
{
Name: "jsxImportSource",
Kind: CommandLineOptionTypeString,
AffectsSemanticDiagnostics: true,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsModuleResolution: true,
AffectsSourceFile: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
DefaultValueDescription: "react",
},
{
Name: "resolveJsonModule",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Enable_importing_json_files,
DefaultValueDescription: false,
},
{
Name: "allowArbitraryExtensions",
Kind: CommandLineOptionTypeBoolean,
AffectsProgramStructure: true,
Category: diagnostics.Modules,
Description: diagnostics.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present,
DefaultValueDescription: false,
},
{
Name: "reactNamespace",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
DefaultValueDescription: "`React`",
},
{
Name: "skipDefaultLibCheck",
Kind: CommandLineOptionTypeBoolean,
// We need to store these to determine whether `lib` files need to be rechecked
AffectsBuildInfo: true,
Category: diagnostics.Completeness,
Description: diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
DefaultValueDescription: false,
},
{
Name: "emitBOM",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
DefaultValueDescription: false,
},
{
Name: "newLine",
Kind: CommandLineOptionTypeEnum, // newLineOptionMap,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Set_the_newline_character_for_emitting_files,
DefaultValueDescription: "lf",
},
{
Name: "noErrorTruncation",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Output_Formatting,
Description: diagnostics.Disable_truncating_types_in_error_messages,
DefaultValueDescription: false,
},
{
Name: "noLib",
Kind: CommandLineOptionTypeBoolean,
Category: diagnostics.Language_and_Environment,
AffectsProgramStructure: true,
Description: diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
// We are not returning a sourceFile for lib file when asked by the program,
// so pass --noLib to avoid reporting a file not found error.
transpileOptionValue: core.TSTrue,
DefaultValueDescription: false,
},
{
Name: "noResolve",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
Category: diagnostics.Modules,
Description: diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
// We are not doing a full typecheck, we are not resolving the whole context,
// so pass --noResolve to avoid reporting missing file errors.
transpileOptionValue: core.TSTrue,
DefaultValueDescription: false,
},
{
Name: "stripInternal",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
DefaultValueDescription: false,
},
{
Name: "disableSizeLimit",
Kind: CommandLineOptionTypeBoolean,
AffectsProgramStructure: true,
Category: diagnostics.Editor_Support,
Description: diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
DefaultValueDescription: false,
},
{
Name: "disableSourceOfProjectReferenceRedirect",
Kind: CommandLineOptionTypeBoolean,
IsTSConfigOnly: true,
Category: diagnostics.Projects,
Description: diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects,
DefaultValueDescription: false,
},
{
Name: "disableSolutionSearching",
Kind: CommandLineOptionTypeBoolean,
IsTSConfigOnly: true,
Category: diagnostics.Projects,
Description: diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing,
DefaultValueDescription: false,
},
{
Name: "disableReferencedProjectLoad",
Kind: CommandLineOptionTypeBoolean,
IsTSConfigOnly: true,
Category: diagnostics.Projects,
Description: diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript,
DefaultValueDescription: false,
},
{
Name: "noEmitHelpers",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
DefaultValueDescription: false,
},
{
Name: "noEmitOnError",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
transpileOptionValue: core.TSUnknown,
Description: diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
DefaultValueDescription: false,
},
{
Name: "preserveConstEnums",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Emit,
Description: diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
DefaultValueDescription: false,
},
{
Name: "declarationDir",
Kind: CommandLineOptionTypeString,
AffectsEmit: true,
AffectsBuildInfo: true,
AffectsDeclarationPath: true,
IsFilePath: true,
Category: diagnostics.Emit,
transpileOptionValue: core.TSUnknown,
Description: diagnostics.Specify_the_output_directory_for_generated_declaration_files,
},
{
Name: "skipLibCheck",
Kind: CommandLineOptionTypeBoolean,
// We need to store these to determine whether `lib` files need to be rechecked
AffectsBuildInfo: true,
Category: diagnostics.Completeness,
Description: diagnostics.Skip_type_checking_all_d_ts_files,
DefaultValueDescription: false,
},
{
Name: "allowUnusedLabels",
Kind: CommandLineOptionTypeBoolean,
AffectsBindDiagnostics: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Disable_error_reporting_for_unused_labels,
DefaultValueDescription: core.TSUnknown,
},
{
Name: "allowUnreachableCode",
Kind: CommandLineOptionTypeBoolean,
AffectsBindDiagnostics: true,
AffectsSemanticDiagnostics: true,
AffectsBuildInfo: true,
Category: diagnostics.Type_Checking,
Description: diagnostics.Disable_error_reporting_for_unreachable_code,
DefaultValueDescription: core.TSUnknown,
},
{
Name: "forceConsistentCasingInFileNames",
Kind: CommandLineOptionTypeBoolean,
AffectsModuleResolution: true,
Category: diagnostics.Interop_Constraints,
Description: diagnostics.Ensure_that_casing_is_correct_in_imports,
DefaultValueDescription: true,
},
{
Name: "maxNodeModuleJsDepth",
Kind: CommandLineOptionTypeNumber,
AffectsModuleResolution: true,
Category: diagnostics.JavaScript_Support,
Description: diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
DefaultValueDescription: 0,
},
{
Name: "useDefineForClassFields",
Kind: CommandLineOptionTypeBoolean,
AffectsSemanticDiagnostics: true,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Language_and_Environment,
Description: diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
DefaultValueDescription: diagnostics.X_true_for_ES2022_and_above_including_ESNext,
},
{
Name: "preserveValueImports",
Kind: CommandLineOptionTypeBoolean,
AffectsEmit: true,
AffectsBuildInfo: true,
Category: diagnostics.Backwards_Compatibility,
Description: diagnostics.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed,
DefaultValueDescription: false,
},
{
// A list of plugins to load in the language service
Name: "plugins",
Kind: CommandLineOptionTypeList,
IsTSConfigOnly: true,
Description: diagnostics.Specify_a_list_of_language_service_plugins_to_include,
Category: diagnostics.Editor_Support,
},
{
Name: "moduleDetection",
Kind: CommandLineOptionTypeEnum,
AffectsSourceFile: true,
AffectsModuleResolution: true,
Description: diagnostics.Control_what_method_is_used_to_detect_module_format_JS_files,
Category: diagnostics.Language_and_Environment,
DefaultValueDescription: diagnostics.X_auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules,
},
{
Name: "ignoreDeprecations",
Kind: CommandLineOptionTypeString,
DefaultValueDescription: core.TSUnknown,
},
}
var optionsType = reflect.TypeFor[core.CompilerOptions]()
func optionsHaveChanges(oldOptions *core.CompilerOptions, newOptions *core.CompilerOptions, declFilter func(*CommandLineOption) bool) bool {
if oldOptions == newOptions {
return false
}
if oldOptions == nil || newOptions == nil {
return true
}
oldOptionsValue := reflect.ValueOf(oldOptions).Elem()
return ForEachCompilerOptionValue(newOptions, declFilter, func(option *CommandLineOption, value reflect.Value, i int) bool {
newValue := value.Interface()
oldValue := oldOptionsValue.Field(i).Interface()
if option.strictFlag {
return oldOptions.GetStrictOptionValue(oldValue.(core.Tristate)) != newOptions.GetStrictOptionValue(newValue.(core.Tristate))
}
if option.allowJsFlag {
return oldOptions.GetAllowJS() != newOptions.GetAllowJS()
}
return !reflect.DeepEqual(newValue, oldValue)
})
}
func ForEachCompilerOptionValue(options *core.CompilerOptions, declFilter func(*CommandLineOption) bool, fn func(option *CommandLineOption, value reflect.Value, i int) bool) bool {
optionsValue := reflect.ValueOf(options).Elem()
for i := range optionsValue.NumField() {
field := optionsType.Field(i)
if !field.IsExported() {
continue
}
if optionDeclaration := CommandLineCompilerOptionsMap.Get(field.Name); optionDeclaration != nil && declFilter(optionDeclaration) {
if fn(optionDeclaration, optionsValue.Field(i), i) {
return true
}
}
}
return false
}
func CompilerOptionsAffectSemanticDiagnostics(
oldOptions *core.CompilerOptions,
newOptions *core.CompilerOptions,
) bool {
return optionsHaveChanges(oldOptions, newOptions, func(option *CommandLineOption) bool {
return option.AffectsSemanticDiagnostics
})
}
func CompilerOptionsAffectDeclarationPath(
oldOptions *core.CompilerOptions,
newOptions *core.CompilerOptions,
) bool {
return optionsHaveChanges(oldOptions, newOptions, func(option *CommandLineOption) bool {
return option.AffectsDeclarationPath
})
}
func CompilerOptionsAffectEmit(oldOptions *core.CompilerOptions, newOptions *core.CompilerOptions) bool {
return optionsHaveChanges(oldOptions, newOptions, func(option *CommandLineOption) bool {
return option.AffectsEmit
})
}