mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Merge branch 'master' into tsbuild
This commit is contained in:
+8
-3
@@ -11,6 +11,7 @@ const concat = require("gulp-concat");
|
||||
const clone = require("gulp-clone");
|
||||
const newer = require("gulp-newer");
|
||||
const tsc = require("gulp-typescript");
|
||||
const tsc_oop = require("./scripts/build/gulp-typescript-oop");
|
||||
const insert = require("gulp-insert");
|
||||
const sourcemaps = require("gulp-sourcemaps");
|
||||
const Q = require("q");
|
||||
@@ -412,6 +413,10 @@ function prependCopyright(outputCopyright = !useDebugMode) {
|
||||
return insert.prepend(outputCopyright ? (copyrightContent || (copyrightContent = fs.readFileSync(copyright).toString())) : "");
|
||||
}
|
||||
|
||||
function getCompilerPath(useBuiltCompiler) {
|
||||
return useBuiltCompiler ? "./built/local/typescript.js" : "./lib/typescript.js";
|
||||
}
|
||||
|
||||
gulp.task(builtLocalCompiler, /*help*/ false, [servicesFile], () => {
|
||||
const localCompilerProject = tsc.createProject("src/compiler/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/ true));
|
||||
return localCompilerProject.src()
|
||||
@@ -424,7 +429,7 @@ gulp.task(builtLocalCompiler, /*help*/ false, [servicesFile], () => {
|
||||
});
|
||||
|
||||
gulp.task(servicesFile, /*help*/ false, ["lib", "generate-diagnostics"], () => {
|
||||
const servicesProject = tsc.createProject("src/services/tsconfig.json", getCompilerSettings({ removeComments: false }, /*useBuiltCompiler*/ false));
|
||||
const servicesProject = tsc_oop.createProject("src/services/tsconfig.json", getCompilerSettings({ removeComments: false }), { typescript: getCompilerPath(/*useBuiltCompiler*/ false) });
|
||||
const {js, dts} = servicesProject.src()
|
||||
.pipe(newer(servicesFile))
|
||||
.pipe(sourcemaps.init())
|
||||
@@ -499,7 +504,7 @@ const tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js")
|
||||
const tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts");
|
||||
|
||||
gulp.task(tsserverLibraryFile, /*help*/ false, [servicesFile, typesMapJson], (done) => {
|
||||
const serverLibraryProject = tsc.createProject("src/server/tsconfig.library.json", getCompilerSettings({ removeComments: false }, /*useBuiltCompiler*/ true));
|
||||
const serverLibraryProject = tsc_oop.createProject("src/server/tsconfig.library.json", getCompilerSettings({ removeComments: false }), { typescript: getCompilerPath(/*useBuiltCompiler*/ true) });
|
||||
/** @type {{ js: NodeJS.ReadableStream, dts: NodeJS.ReadableStream }} */
|
||||
const {js, dts} = serverLibraryProject.src()
|
||||
.pipe(sourcemaps.init())
|
||||
@@ -590,7 +595,7 @@ gulp.task("LKG", "Makes a new LKG out of the built js files", ["clean", "dontUse
|
||||
// Task to build the tests infrastructure using the built compiler
|
||||
const run = path.join(builtLocalDirectory, "run.js");
|
||||
gulp.task(run, /*help*/ false, [servicesFile, tsserverLibraryFile], () => {
|
||||
const testProject = tsc.createProject("src/harness/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/ true));
|
||||
const testProject = tsc_oop.createProject("src/harness/tsconfig.json", getCompilerSettings({}), { typescript: getCompilerPath(/*useBuiltCompiler*/ true) });
|
||||
return testProject.src()
|
||||
.pipe(newer(run))
|
||||
.pipe(sourcemaps.init())
|
||||
|
||||
+94
-17
File diff suppressed because one or more lines are too long
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Přidat inicializační výraz k vlastnosti {0}",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Přidat inicializátory do všech neinicializovaných vlastností",
|
||||
"Add_missing_super_call_90001": "Přidat chybějící volání metody super()",
|
||||
"Add_missing_typeof_95052": "Přidat chybějící typeof",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Přidat kvalifikátor do všech nerozpoznaných proměnných odpovídajících názvu členu",
|
||||
"Add_to_all_uncalled_decorators_95044": "Přidat () do všech nevolaných dekorátorů",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Přidat @ts-ignore do všech chybových zpráv",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Všechny deklarace abstraktní metody musí jít po sobě.",
|
||||
"All_destructured_elements_are_unused_6198": "Žádný z destrukturovaných elementů se nepoužívá.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Žádné importy z deklarace importu se nepoužívají.",
|
||||
"All_variables_are_unused_6199": "Žádná z proměnných se nepoužívá.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Povolte výchozí importy z modulů bez výchozího exportu. Nebude to mít vliv na generování kódu, jenom na kontrolu typů.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Povolí kompilaci souborů javascript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "Když se zadá příznak --isolatedModules, nepovolují se ambientní výčty.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Třída {0} se používá dříve, než se deklaruje.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku @augments nebo @extends.",
|
||||
"Class_name_cannot_be_0_2414": "Třída nemůže mít název {0}.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Když se cílí na ES5 s modulem {0}, název třídy nemůže být Object.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Statická strana třídy {0} nesprávně rozšiřuje statickou stranu základní třídy {1}.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Třídy můžou rozšířit jenom jednu třídu.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Třídy obsahující abstraktní metody musí být označené jako abstraktní.",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor třídy {0} je chráněný a dostupný jenom v rámci deklarace třídy.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory odvozených tříd musí obsahovat volání příkazu super.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Není zadaný obsažený soubor a nedá se určit kořenový adresář – přeskakuje se vyhledávání ve složce node_modules.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Převést {0} na typ mapovaného objektu",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Převést všechny funkce konstruktoru na třídy",
|
||||
"Convert_all_require_to_import_95048": "Převést všechna volání require na import",
|
||||
"Convert_all_to_default_imports_95035": "Převést vše na výchozí importy",
|
||||
"Convert_function_0_to_class_95002": "Převést funkci {0} na třídu",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Převést funkci na třídu ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Převést pojmenované importy na import oboru názvů",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Převést import oboru názvů na pojmenované importy",
|
||||
"Convert_require_to_import_95047": "Převést require na import",
|
||||
"Convert_to_ES6_module_95017": "Převést na modul ES6",
|
||||
"Convert_to_default_import_95013": "Převést na výchozí import",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Ne všechny cesty kódu vracejí hodnotu.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Typ číselného indexu {0} se nedá přiřadit k typu indexu řetězce {1}.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Číselné oddělovače tady nejsou povolené.",
|
||||
"Object_is_of_type_unknown_2571": "Objekt je typu Neznámý.",
|
||||
"Object_is_possibly_null_2531": "Objekt je pravděpodobně null.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "Objekt je pravděpodobně null nebo undefined.",
|
||||
"Object_is_possibly_undefined_2532": "Objekt je pravděpodobně undefined.",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Přesměrování výstupní struktury do adresáře",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Odkazovaný projekt {0} musí mít nastavení \"composite\": true.",
|
||||
"Remove_all_unreachable_code_95051": "Odebrat veškerý nedosažitelný kód",
|
||||
"Remove_all_unused_labels_95054": "Odebrat všechny nepoužívané popisky",
|
||||
"Remove_declaration_for_Colon_0_90004": "Odebrat deklaraci pro {0}",
|
||||
"Remove_destructuring_90009": "Odebrat destrukci",
|
||||
"Remove_import_from_0_90005": "Odebrat import z {0}",
|
||||
"Remove_unreachable_code_95050": "Odebrat nedosažitelný kód",
|
||||
"Remove_unused_label_95053": "Odebrat nepoužitý popisek",
|
||||
"Remove_variable_statement_90010": "Odebrat příkaz proměnné",
|
||||
"Replace_import_with_0_95015": "Nahradí import použitím: {0}.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Oznámí se chyba, když některé cesty kódu ve funkci nevracejí hodnotu.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Oznámí se chyby v případech fallthrough v příkazu switch.",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Initialisierer zu Eigenschaft \"{0}\" hinzufügen",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Allen nicht initialisierten Eigenschaften Initialisierer hinzufügen",
|
||||
"Add_missing_super_call_90001": "Fehlenden super()-Aufruf hinzufügen",
|
||||
"Add_missing_typeof_95052": "Fehlenden \"typeof\" hinzufügen",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Allen nicht aufgelösten Variablen, die einem Membernamen entsprechen, Qualifizierer hinzufügen",
|
||||
"Add_to_all_uncalled_decorators_95044": "Allen nicht aufgerufenen Decorators \"()\" hinzufügen",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Allen Fehlermeldungen \"@ts-ignore\" hinzufügen",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Alle Deklarationen einer abstrakten Methode müssen aufeinanderfolgend sein.",
|
||||
"All_destructured_elements_are_unused_6198": "Alle destrukturierten Elemente werden nicht verwendet.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Keiner der Importe in der Importdeklaration wird verwendet.",
|
||||
"All_variables_are_unused_6199": "Alle Variablen werden nicht verwendet.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Standardimporte von Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Codeausgabe aus, lediglich auf die Typprüfung.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Kompilierung von JavaScript-Dateien zulassen.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "const-Umgebungsenumerationen sind unzulässig, wenn das Flag \"-isolatedModules\" angegeben wird.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Klasse \"{0}\", die vor der Deklaration verwendet wurde.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Klassendeklarationen dürfen maximal ein \"@augments\"- oder \"@extends\"-Tag aufweisen.",
|
||||
"Class_name_cannot_be_0_2414": "Der Klassenname darf nicht \"{0}\" sein.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Der Klassenname darf nicht \"Object\" lauten, wenn ES5 mit Modul \"{0}\" als Ziel verwendet wird.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Die statische Seite der Klasse \"{0}\" erweitert fälschlicherweise die statische Seite der Basisklasse \"{1}\".",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Klassen dürfen nur eine einzelne Klasse erweitern.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Klassen, die abstrakte Methoden enthalten, müssen als abstrakt markiert werden.",
|
||||
@@ -273,6 +276,7 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Der Konstruktor der Klasse \"{0}\" ist geschützt. Auf ihn kann nur innerhalb der Klassendeklaration zugegriffen werden.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktoren für abgeleitete Klassen müssen einen Aufruf \"super\" enthalten.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Die enthaltene Datei wird nicht angegeben, und das Stammverzeichnis kann nicht ermittelt werden. Die Suche im Ordner \"node_modules\" wird übersprungen.",
|
||||
"Convert_0_to_mapped_object_type_95055": "\"{0}\" in zugeordneten Objekttyp konvertieren",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Alle Konstruktorfunktionen in Klassen konvertieren",
|
||||
"Convert_all_require_to_import_95048": "Alle Aufrufe von \"require\" in \"import\" konvertieren",
|
||||
"Convert_all_to_default_imports_95035": "Alle in Standardimporte konvertieren",
|
||||
@@ -708,10 +712,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Die Ausgabestruktur in das Verzeichnis umleiten.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Das referenzierte Projekt \"{0}\" muss für die Einstellung \"composite\" den Wert TRUE aufweisen.",
|
||||
"Remove_all_unreachable_code_95051": "Gesamten nicht erreichbaren Code entfernen",
|
||||
"Remove_all_unused_labels_95054": "Alle nicht verwendeten Bezeichnungen entfernen",
|
||||
"Remove_declaration_for_Colon_0_90004": "Deklaration entfernen für: {0}",
|
||||
"Remove_destructuring_90009": "Destrukturierung entfernen",
|
||||
"Remove_import_from_0_90005": "Import aus \"{0}\" entfernen",
|
||||
"Remove_unreachable_code_95050": "Nicht erreichbaren Code entfernen",
|
||||
"Remove_unused_label_95053": "Nicht verwendete Bezeichnung entfernen",
|
||||
"Remove_variable_statement_90010": "Variablenanweisung entfernen",
|
||||
"Replace_import_with_0_95015": "Ersetzen Sie den Import durch \"{0}\".",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Fehler melden, wenn nicht alle Codepfade in der Funktion einen Wert zurückgeben.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Für FallTrough-Fälle in switch-Anweisung Fehler melden.",
|
||||
|
||||
@@ -735,6 +735,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";All_variables_are_unused_6199" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[All variables are unused.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Allow default imports from modules with no default export. This does not affect code emit, just typechecking.]]></Val>
|
||||
@@ -1551,6 +1557,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Class name cannot be 'Object' when targeting ES5 with module {0}.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Class static side '{0}' incorrectly extends base class static side '{1}'.]]></Val>
|
||||
@@ -1659,6 +1671,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_0_to_mapped_object_type_95055" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert '{0}' to mapped object type]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_all_constructor_functions_to_classes_95045" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert all constructor functions to classes]]></Val>
|
||||
@@ -1689,6 +1707,18 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -3501,6 +3531,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
@@ -4305,6 +4341,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Remove_variable_statement_90010" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Remove variable statement]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Replace_import_with_0_95015" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Replace import with '{0}'.]]></Val>
|
||||
@@ -5619,6 +5661,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. A type parameter name was expected without curly braces.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_expected_1179" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. '{' expected.]]></Val>
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Agregar inicializador a la propiedad \"{0}\"",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Agregar inicializadores a todas las propiedades sin inicializar",
|
||||
"Add_missing_super_call_90001": "Agregar la llamada a \"super()\" que falta",
|
||||
"Add_missing_typeof_95052": "Agregar el objeto typeof que falta",
|
||||
"Add_missing_typeof_95052": "Agregar el elemento \"typeof\" que falta",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Agregar un calificador a todas las variables no resueltas que coincidan con un nombre de miembro",
|
||||
"Add_to_all_uncalled_decorators_95044": "Agregar \"()\" a todos los elementos Decorator a los que no se llama",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Agregar \"@ts-ignore\" a todos los mensajes de error",
|
||||
@@ -120,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas las declaraciones de un método abstracto deben ser consecutivas.",
|
||||
"All_destructured_elements_are_unused_6198": "Todos los elementos desestructurados están sin utilizar.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Todas las importaciones de la declaración de importación están sin utilizar.",
|
||||
"All_variables_are_unused_6199": "Todas las variables son no utilizadas.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permitir las importaciones predeterminadas de los módulos sin exportación predeterminada. Esto no afecta a la emisión de código, solo a la comprobación de tipos.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Permitir que se compilen los archivos de JavaScript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "No se permiten enumeraciones const de ambiente cuando se proporciona la marca \"--isolatedModules\".",
|
||||
@@ -256,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Se ha usado la clase \"{0}\" antes de declararla.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Las declaraciones de clase no pueden tener más de una etiqueta \"@augments\" o \"@extends\".",
|
||||
"Class_name_cannot_be_0_2414": "El nombre de la clase no puede ser \"{0}\".",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "El nombre de clase no puede ser \"Object\" cuando el destino es ES5 con un módulo {0}.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "El lado estático de la clase '{0}' extiende el lado estático de la clase base '{1}' de forma incorrecta.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Las clases solo pueden extender una clase única.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Las clases con métodos abstractos deben marcarse como abstractas.",
|
||||
@@ -274,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "El constructor de la clase '{0}' está protegido y solo es accesible desde la declaración de la clase.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Los constructores de las clases derivadas deben contener una llamada a \"super\".",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "El archivo contenedor no se ha especificado y no se puede determinar el directorio raíz. Se omitirá la búsqueda en la carpeta 'node_modules'.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Convertir \"{0}\" en el tipo de objeto asignado",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Convertir todas las funciones de constructor en clases",
|
||||
"Convert_all_require_to_import_95048": "Convertir todas las repeticiones de \"require\" en \"import\"",
|
||||
"Convert_all_to_default_imports_95035": "Convertir todo en importaciones predeterminadas",
|
||||
"Convert_function_0_to_class_95002": "Convertir la función \"{0}\" en una clase",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Convertir la función en una clase ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Convertir importaciones con nombre en una importación de espacio de nombres",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Convertir una importación de espacio de nombres en importaciones con nombre",
|
||||
"Convert_require_to_import_95047": "Convertir \"require\" en \"import\"",
|
||||
"Convert_to_ES6_module_95017": "Convertir en módulo ES6",
|
||||
"Convert_to_default_import_95013": "Convertir en importación predeterminada",
|
||||
@@ -581,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "No todas las rutas de acceso de código devuelven un valor.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "El tipo de índice numérico '{0}' no se puede asignar a un tipo de índice de cadena '{1}'.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Aquí no se permiten separadores numéricos.",
|
||||
"Object_is_of_type_unknown_2571": "El objeto es de tipo \"desconocido\".",
|
||||
"Object_is_possibly_null_2531": "El objeto es posiblemente \"null\".",
|
||||
"Object_is_possibly_null_or_undefined_2533": "El objeto es posiblemente \"null\" o \"undefined\".",
|
||||
"Object_is_possibly_undefined_2532": "El objeto es posiblemente \"undefined\".",
|
||||
@@ -709,12 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Redirija la estructura de salida al directorio.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "El proyecto \"{0}\" al que se hace referencia debe tener el valor \"composite\": true.",
|
||||
"Remove_all_unreachable_code_95051": "Quitar todo el código inaccesible",
|
||||
"Remove_all_unused_labels_95054": "Remove all unused labels",
|
||||
"Remove_all_unused_labels_95054": "Quitar todas las etiquetas no utilizadas",
|
||||
"Remove_declaration_for_Colon_0_90004": "Quitar declaración de: \"{0}\"",
|
||||
"Remove_destructuring_90009": "Quitar la desestructuración",
|
||||
"Remove_import_from_0_90005": "Quitar importación de \"{0}\"",
|
||||
"Remove_unreachable_code_95050": "Quitar el código inaccesible",
|
||||
"Remove_unused_label_95053": "Remove unused label",
|
||||
"Remove_unused_label_95053": "Quitar etiqueta no utilizada",
|
||||
"Remove_variable_statement_90010": "Quitar la declaración de variable",
|
||||
"Replace_import_with_0_95015": "Reemplazar importación por \"{0}\".",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Notificar un error cuando no todas las rutas de acceso de código en funcionamiento devuelven un valor.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Notificar errores de los casos de fallthrough en la instrucción switch.",
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Ajouter un initialiseur à la propriété '{0}'",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Ajouter des initialiseurs à toutes les propriétés non initialisées",
|
||||
"Add_missing_super_call_90001": "Ajouter l'appel manquant à 'super()'",
|
||||
"Add_missing_typeof_95052": "Ajouter un typeof manquant",
|
||||
"Add_missing_typeof_95052": "Ajouter un 'typeof' manquant",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Ajouter un qualificateur à toutes les variables non résolues correspondant à un nom de membre",
|
||||
"Add_to_all_uncalled_decorators_95044": "Ajouter '()' à tous les décorateurs non appelés",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Ajouter '@ts-ignore' à tous les messages d'erreur",
|
||||
@@ -120,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Toutes les déclarations d'une méthode abstraite doivent être consécutives.",
|
||||
"All_destructured_elements_are_unused_6198": "Tous les éléments déstructurés sont inutilisés.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Les importations de la déclaration d'importation ne sont pas toutes utilisées.",
|
||||
"All_variables_are_unused_6199": "Toutes les variables sont inutilisées.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Autorisez les importations par défaut à partir des modules sans exportation par défaut. Cela n'affecte pas l'émission du code, juste le contrôle de type.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Autorisez la compilation des fichiers JavaScript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "Les enums const ambiants ne sont pas autorisés quand l'indicateur '--isolatedModules' est fourni.",
|
||||
@@ -256,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Classe '{0}' utilisée avant sa déclaration.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Les déclarations de classes ne peuvent pas avoir plusieurs balises '@augments' ou '@extends'.",
|
||||
"Class_name_cannot_be_0_2414": "Le nom de la classe ne peut pas être '{0}'.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Le nom de la classe ne peut pas être 'Object' quand ES5 est ciblé avec le module {0}.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Le côté statique de la classe '{0}' étend de manière incorrecte le côté statique de la classe de base '{1}'.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Les classes ne peuvent étendre qu'une seule classe.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Les classes contenant des méthodes abstraites doivent être marquées comme étant abstraites.",
|
||||
@@ -274,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Le constructeur de la classe '{0}' est protégé et uniquement accessible dans la déclaration de classe.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Les constructeurs pour les classes dérivées doivent contenir un appel de 'super'.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Fichier conteneur non spécifié et répertoire racine impossible à déterminer. Recherche ignorée dans le dossier 'node_modules'.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Convertir '{0}' en type d'objet mappé",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Convertir toutes les fonctions de constructeur en classes",
|
||||
"Convert_all_require_to_import_95048": "Convertir tous les 'require' en 'import'",
|
||||
"Convert_all_to_default_imports_95035": "Convertir tout en importations par défaut",
|
||||
"Convert_function_0_to_class_95002": "Convertir la fonction '{0}' en classe",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Convertir la fonction en classe ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Convertir les importations nommées en importation d'espace de noms",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Convertir l'importation d'espace de noms en importations nommées",
|
||||
"Convert_require_to_import_95047": "Convertir 'require' en 'import'",
|
||||
"Convert_to_ES6_module_95017": "Convertir en module ES6",
|
||||
"Convert_to_default_import_95013": "Convertir en importation par défaut",
|
||||
@@ -581,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Les chemins de code ne retournent pas tous une valeur.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Impossible d'assigner le type d'index numérique '{0}' au type d'index de chaîne '{1}'.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Les séparateurs numériques ne sont pas autorisés ici.",
|
||||
"Object_is_of_type_unknown_2571": "L'objet est de type 'unknown'.",
|
||||
"Object_is_possibly_null_2531": "L'objet a peut-être la valeur 'null'.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "L'objet a peut-être la valeur 'null' ou 'undefined'.",
|
||||
"Object_is_possibly_undefined_2532": "L'objet a peut-être la valeur 'undefined'.",
|
||||
@@ -709,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Rediriger la structure de sortie vers le répertoire.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Le projet référencé '{0}' doit avoir le paramètre \"composite\" avec la valeur true.",
|
||||
"Remove_all_unreachable_code_95051": "Supprimer tout le code inaccessible",
|
||||
"Remove_all_unused_labels_95054": "Supprimer toutes les étiquettes inutilisées",
|
||||
"Remove_declaration_for_Colon_0_90004": "Supprimer la déclaration pour : '{0}'",
|
||||
"Remove_destructuring_90009": "Supprimer la déstructuration",
|
||||
"Remove_import_from_0_90005": "Supprimer l'importation de '{0}'",
|
||||
"Remove_unreachable_code_95050": "Supprimer le code inaccessible",
|
||||
"Remove_unused_label_95053": "Supprimer l'étiquette inutilisée",
|
||||
"Remove_variable_statement_90010": "Supprimer l'instruction de variable",
|
||||
"Replace_import_with_0_95015": "Remplacez l'importation par '{0}'.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Signalez une erreur quand les chemins de code de la fonction ne retournent pas tous une valeur.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Signalez les erreurs pour les case avec fallthrough dans une instruction switch.",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Aggiungere l'inizializzatore alla proprietà '{0}'",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Aggiungere gli inizializzatori a tutte le proprietà non inizializzate",
|
||||
"Add_missing_super_call_90001": "Aggiungere la chiamata mancante a 'super()'",
|
||||
"Add_missing_typeof_95052": "Aggiungere l'elemento 'typeof' mancante",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Aggiungere il qualificatore a tutte le variabili non risolte corrispondenti a un nome di membro",
|
||||
"Add_to_all_uncalled_decorators_95044": "Aggiungere '()' a tutti gli elementi Decorator non chiamati",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Aggiungere '@ts-ignore' a tutti i messaggi di errore",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Tutte le dichiarazioni di un metodo astratto devono essere consecutive.",
|
||||
"All_destructured_elements_are_unused_6198": "Tutti gli elementi destrutturati sono inutilizzati.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Tutte le importazioni nella dichiarazione di importazione sono inutilizzate.",
|
||||
"All_variables_are_unused_6199": "Tutte le variabili sono inutilizzate.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Consente di eseguire importazioni predefinite da moduli senza esportazione predefinita. Non influisce sulla creazione del codice ma solo sul controllo dei tipi.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Consente la compilazione di file JavaScript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "Le enumerazioni const di ambiente non sono consentite quando viene specificato il flag '--isolatedModules'.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "La classe '{0}' è stata usata prima di essere stata dichiarata.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag `@augments` o `@extends`.",
|
||||
"Class_name_cannot_be_0_2414": "Il nome della classe non può essere '{0}'.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Il nome della classe non può essere 'Object' quando la destinazione è ES5 con il modulo {0}.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Il lato statico '{0}' della classe estende in modo errato il lato statico '{1}' della classe di base.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Le classi possono estendere solo un'unica classe.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Le classi che contengono metodi astratti devono essere contrassegnate come astratte.",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Il costruttore della classe '{0}' è protetto e accessibile solo all'interno della dichiarazione di classe.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "I costruttori di classi derivate devono contenere una chiamata 'super'.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Il file contenitore non è specificato e non è possibile determinare la directory radice. La ricerca nella cartella 'node_modules' verrà ignorata.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Convertire '{0}' nel tipo di oggetto con mapping",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Convertire tutte le funzioni di costruttore in classi",
|
||||
"Convert_all_require_to_import_95048": "Convertire tutte le occorrenze di 'require' in 'import'",
|
||||
"Convert_all_to_default_imports_95035": "Convertire tutte le impostazioni predefinite",
|
||||
"Convert_function_0_to_class_95002": "Converti la funzione '{0}' in classe",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Converti la funzione in una classe ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Convertire le importazioni denominate in importazione spazi dei nomi",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Convertire l'importazione spazi dei nomi in importazioni denominate",
|
||||
"Convert_require_to_import_95047": "Convertire 'require' in 'import'",
|
||||
"Convert_to_ES6_module_95017": "Converti in modulo ES6",
|
||||
"Convert_to_default_import_95013": "Converti nell'importazione predefinita",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Non tutti i percorsi del codice restituiscono un valore.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Il tipo di indice numerico '{0}' non è assegnabile al tipo di indice stringa '{1}'.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "I separatori numerici non sono consentiti in questa posizione.",
|
||||
"Object_is_of_type_unknown_2571": "L'oggetto è di tipo 'unknown'.",
|
||||
"Object_is_possibly_null_2531": "L'oggetto è probabilmente 'null'.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "L'oggetto è probabilmente 'null' o 'undefined'.",
|
||||
"Object_is_possibly_undefined_2532": "L'oggetto è probabilmente 'undefined'.",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Reindirizza la struttura di output alla directory.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Il progetto di riferimento '{0}' deve includere l'impostazione \"composite\": true.",
|
||||
"Remove_all_unreachable_code_95051": "Rimuovere tutto il codice non eseguibile",
|
||||
"Remove_all_unused_labels_95054": "Rimuovere tutte le etichette inutilizzate",
|
||||
"Remove_declaration_for_Colon_0_90004": "Rimuovere la dichiarazione per '{0}'",
|
||||
"Remove_destructuring_90009": "Rimuovere la destrutturazione",
|
||||
"Remove_import_from_0_90005": "Rimuovere l'importazione da '{0}'",
|
||||
"Remove_unreachable_code_95050": "Rimuovere il codice non eseguibile",
|
||||
"Remove_unused_label_95053": "Rimuovere l'etichetta inutilizzata",
|
||||
"Remove_variable_statement_90010": "Rimuovere l'istruzione di variabile",
|
||||
"Replace_import_with_0_95015": "Sostituire l'importazione con '{0}'.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Segnala l'errore quando non tutti i percorsi del codice nella funzione restituiscono un valore.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Segnala errori per i casi di fallthrough nell'istruzione switch.",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "プロパティ '{0}' に初期化子を追加します",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "初期化されていないすべてのプロパティに初期化子を追加します",
|
||||
"Add_missing_super_call_90001": "欠落している 'super()' 呼び出しを追加する",
|
||||
"Add_missing_typeof_95052": "不足している 'typeof' を追加します",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "メンバー名と一致するすべての未解決の変数に修飾子を追加します",
|
||||
"Add_to_all_uncalled_decorators_95044": "呼び出されていないすべてのデコレーターに '()' を追加します",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "すべてのエラー メッセージに '@ts-ignore' を追加します",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象メソッドの宣言はすべて連続している必要があります。",
|
||||
"All_destructured_elements_are_unused_6198": "非構造化要素はいずれも使用されていません。",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "インポート宣言内のインポートはすべて未使用です。",
|
||||
"All_variables_are_unused_6199": "すべての変数は未使用です。",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "既定のエクスポートがないモジュールからの既定のインポートを許可します。これは、型チェックのみのため、コード生成には影響を与えません。",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "javascript ファイルのコンパイルを許可します。",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "'--isolatedModules' フラグが指定されている場合、アンビエント const 列挙型は使用できません。",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "クラス '{0}' は宣言の前に使用されました。",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラス宣言で複数の '@augments' または `@extends` タグを使用することはできません。",
|
||||
"Class_name_cannot_be_0_2414": "クラス名を '{0}' にすることはできません。",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "モジュール {0} を使用して ES5 をターゲットとするときに、クラス名を 'オブジェクト' にすることはできません。",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "クラス側の静的な '{0}' が基底クラス側の静的な '{1}' を正しく拡張していません。",
|
||||
"Classes_can_only_extend_a_single_class_1174": "クラスで拡張できるクラスは 1 つのみです。",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "抽象メソッドを含むクラスは abstract に指定する必要があります。",
|
||||
@@ -273,6 +276,7 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "クラス '{0}' のコンストラクターは保護されており、クラス宣言内でのみアクセス可能です。",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生クラスのコンストラクターには 'super' の呼び出しを含める必要があります。",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "包含するファイルが指定されていないため、ルート ディレクトリを決定できません。'node_modules' フォルダーのルックアップをスキップします。",
|
||||
"Convert_0_to_mapped_object_type_95055": "'{0}' をマップされたオブジェクト型に変換する",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "すべてのコンストラクター関数をクラスに変換します",
|
||||
"Convert_all_require_to_import_95048": "'require' をすべて 'import' に変換",
|
||||
"Convert_all_to_default_imports_95035": "すべてを既定のインポートに変換します",
|
||||
@@ -708,10 +712,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "ディレクトリへ出力構造をリダイレクトします。",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "参照されているプロジェクト '{0}' には、設定 \"composite\": true が必要です。",
|
||||
"Remove_all_unreachable_code_95051": "到達できないコードをすべて削除します",
|
||||
"Remove_all_unused_labels_95054": "すべての未使用のラベルを削除します",
|
||||
"Remove_declaration_for_Colon_0_90004": "次に対する宣言を削除する: '{0}'",
|
||||
"Remove_destructuring_90009": "非構造化を削除します",
|
||||
"Remove_import_from_0_90005": "'{0}' からのインポートを削除",
|
||||
"Remove_unreachable_code_95050": "到達できないコードを削除します",
|
||||
"Remove_unused_label_95053": "未使用のラベルを削除します",
|
||||
"Remove_variable_statement_90010": "変数のステートメントを削除します",
|
||||
"Replace_import_with_0_95015": "インポートを '{0}' に置換します。",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "関数の一部のコード パスが値を返さない場合にエラーを報告します。",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch ステートメントに case のフォールスルーがある場合にエラーを報告します。",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "'{0}' 속성에 이니셜라이저 추가",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "초기화되지 않은 모든 속성에 이니셜라이저 추가",
|
||||
"Add_missing_super_call_90001": "누락된 'super()' 호출 추가",
|
||||
"Add_missing_typeof_95052": "누락된 'typeof' 추가",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "멤버 이름과 일치하는 모든 확인되지 않은 변수에 한정자 추가",
|
||||
"Add_to_all_uncalled_decorators_95044": "호출되지 않는 모든 데코레이터에 '()' 추가",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "모든 오류 메시지에 '@ts-ignore' 추가",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "추상 메서드의 모든 선언은 연속적이어야 합니다.",
|
||||
"All_destructured_elements_are_unused_6198": "구조 파괴된 요소가 모두 사용되지 않습니다.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "가져오기 선언의 모든 가져오기가 사용되지 않습니다.",
|
||||
"All_variables_are_unused_6199": "모든 변수가 사용되지 않습니다.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 여기서는 코드 내보내기에는 영향을 주지 않고 형식 검사만 합니다.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Javascript 파일을 컴파일하도록 허용합니다.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "'--isolatedModules' 플래그가 제공된 경우 앰비언트 const 열거형이 허용되지 않습니다.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "선언 전에 사용된 '{0}' 클래스입니다.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 `@extends` 태그를 둘 이상 가질 수 없습니다.",
|
||||
"Class_name_cannot_be_0_2414": "클래스 이름은 '{0}'일 수 없습니다.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "{0} 모듈을 사용하는 ES5를 대상으로 하는 경우 클래스 이름은 'Object'일 수 없습니다.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "클래스 정적 측면 '{0}'이(가) 기본 클래스 정적 측면 '{1}'을(를) 잘못 확장합니다.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "클래스는 단일 클래스만 확장할 수 있습니다.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "추상 메서드를 포함하는 클래스는 abstract로 표시되어 있어야 합니다.",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' 클래스의 생성자는 protected이며 클래스 선언 내에서만 액세스할 수 있습니다.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "파생 클래스의 생성자는 'super' 호출을 포함해야 합니다.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "포함 파일이 지정되지 않았고 루트 디렉터리를 확인할 수 없어 'node_modules' 폴더 조회를 건너뜁니다.",
|
||||
"Convert_0_to_mapped_object_type_95055": "'{0}'을(를) 매핑된 개체 형식으로 변환",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "모든 생성자 함수를 클래스로 변환",
|
||||
"Convert_all_require_to_import_95048": "모든 'require'를 'import'로 변환",
|
||||
"Convert_all_to_default_imports_95035": "모든 항목을 기본 가져오기로 변환",
|
||||
"Convert_function_0_to_class_95002": "'{0}' 함수를 클래스로 변환",
|
||||
"Convert_function_to_an_ES2015_class_95001": "함수를 ES2015 클래스로 변환",
|
||||
"Convert_named_imports_to_namespace_import_95057": "명명된 가져오기를 네임스페이스 가져오기로 변환",
|
||||
"Convert_namespace_import_to_named_imports_95056": "네임스페이스 가져오기를 명명된 가져오기로 변환",
|
||||
"Convert_require_to_import_95047": "'require'를 'import'로 변환",
|
||||
"Convert_to_ES6_module_95017": "ES6 모듈로 변환",
|
||||
"Convert_to_default_import_95013": "기본 가져오기로 변환",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "일부 코드 경로가 값을 반환하지 않습니다.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "숫자 인덱스 형식 '{0}'을(를) 문자열 인덱스 형식 '{1}'에 할당할 수 없습니다.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "숫자 구분 기호는 여기에서 허용되지 않습니다.",
|
||||
"Object_is_of_type_unknown_2571": "개체가 '알 수 없는' 형식입니다.",
|
||||
"Object_is_possibly_null_2531": "개체가 'null'인 것 같습니다.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "개체가 'null' 또는 'undefined'인 것 같습니다.",
|
||||
"Object_is_possibly_undefined_2532": "개체가 'undefined'인 것 같습니다.",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "출력 구조를 디렉터리로 리디렉션합니다.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "참조되는 프로젝트 '{0}'에는 \"composite\": true 설정이 있어야 합니다.",
|
||||
"Remove_all_unreachable_code_95051": "접근할 수 없는 코드 모두 제거",
|
||||
"Remove_all_unused_labels_95054": "사용되지 않는 레이블 모두 제거",
|
||||
"Remove_declaration_for_Colon_0_90004": "'{0}'에 대한 선언 제거",
|
||||
"Remove_destructuring_90009": "구조 파괴 제거",
|
||||
"Remove_import_from_0_90005": "'{0}'에서 가져오기 제거",
|
||||
"Remove_unreachable_code_95050": "접근할 수 없는 코드 제거",
|
||||
"Remove_unused_label_95053": "사용되지 않는 레이블 제거",
|
||||
"Remove_variable_statement_90010": "변수 문 제거",
|
||||
"Replace_import_with_0_95015": "가져오기를 '{0}'(으)로 바꿉니다.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "함수의 일부 코드 경로가 값을 반환하지 않는 경우 오류를 보고합니다.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch 문의 fallthrough case에 대한 오류를 보고합니다.",
|
||||
|
||||
Vendored
+8
-8
@@ -222,29 +222,29 @@ interface NumberConstructor {
|
||||
* Returns true if passed value is finite.
|
||||
* Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* number. Only finite values of the type number, result in true.
|
||||
* @param value The value you want to test.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
isFinite(value: any): boolean;
|
||||
isFinite(number: number): boolean;
|
||||
|
||||
/**
|
||||
* Returns true if the value passed is an integer, false otherwise.
|
||||
* @param value The value you want to test.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
isInteger(value: any): boolean;
|
||||
isInteger(number: number): boolean;
|
||||
|
||||
/**
|
||||
* Returns a Boolean value that indicates whether a value is the reserved value NaN (not a
|
||||
* number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter
|
||||
* to a number. Only values of the type number, that are also NaN, result in true.
|
||||
* @param value The value you want to test.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
isNaN(number: any): boolean;
|
||||
isNaN(number: number): boolean;
|
||||
|
||||
/**
|
||||
* Returns true if the value passed is a safe integer.
|
||||
* @param value The value you want to test
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
isSafeInteger(value: any): boolean;
|
||||
isSafeInteger(number: number): boolean;
|
||||
|
||||
/**
|
||||
* The value of the largest integer n such that n and n + 1 are both exactly representable as
|
||||
|
||||
Vendored
+19
-19
@@ -23,7 +23,7 @@ interface ReadonlyArray<T> {
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array. Then, flattens the result into
|
||||
* a new array.
|
||||
* This is identical to a map followed by a flatten of depth 1.
|
||||
* This is identical to a map followed by flat with depth 1.
|
||||
*
|
||||
* @param callback A function that accepts up to three arguments. The flatMap method calls the
|
||||
* callback function one time for each element in the array.
|
||||
@@ -42,7 +42,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][][][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U[][][]>> |
|
||||
@@ -71,7 +71,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U>[][]> |
|
||||
@@ -91,7 +91,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U[]>> |
|
||||
@@ -106,7 +106,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[]> |
|
||||
ReadonlyArray<ReadonlyArray<U>>,
|
||||
depth?: 1
|
||||
@@ -118,18 +118,18 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U>,
|
||||
depth: 0
|
||||
): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
|
||||
* specified depth. If no depth is provided, flat method defaults to the depth of 1.
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(depth?: number): any[];
|
||||
flat<U>(depth?: number): any[];
|
||||
}
|
||||
|
||||
interface Array<T> {
|
||||
@@ -137,7 +137,7 @@ interface Array<T> {
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array. Then, flattens the result into
|
||||
* a new array.
|
||||
* This is identical to a map followed by a flatten of depth 1.
|
||||
* This is identical to a map followed by flat with depth 1.
|
||||
*
|
||||
* @param callback A function that accepts up to three arguments. The flatMap method calls the
|
||||
* callback function one time for each element in the array.
|
||||
@@ -155,7 +155,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][][][], depth: 7): U[];
|
||||
flat<U>(this: U[][][][][][][][], depth: 7): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -163,7 +163,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][][], depth: 6): U[];
|
||||
flat<U>(this: U[][][][][][][], depth: 6): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -171,7 +171,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][], depth: 5): U[];
|
||||
flat<U>(this: U[][][][][][], depth: 5): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -179,7 +179,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][], depth: 4): U[];
|
||||
flat<U>(this: U[][][][][], depth: 4): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -187,7 +187,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][], depth: 3): U[];
|
||||
flat<U>(this: U[][][][], depth: 3): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -195,7 +195,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][], depth: 2): U[];
|
||||
flat<U>(this: U[][][], depth: 2): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -203,7 +203,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][], depth?: 1): U[];
|
||||
flat<U>(this: U[][], depth?: 1): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -211,13 +211,13 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[], depth: 0): U[];
|
||||
flat<U>(this: U[], depth: 0): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
|
||||
* specified depth. If no depth is provided, flat method defaults to the depth of 1.
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(depth?: number): any[];
|
||||
flat<U>(depth?: number): any[];
|
||||
}
|
||||
|
||||
Vendored
+1
@@ -21,3 +21,4 @@ and limitations under the License.
|
||||
/// <reference path="lib.es2018.d.ts" />
|
||||
/// <reference path="lib.esnext.asynciterable.d.ts" />
|
||||
/// <reference path="lib.esnext.array.d.ts" />
|
||||
/// <reference path="lib.esnext.symbol.d.ts" />
|
||||
|
||||
Vendored
+1
@@ -21,6 +21,7 @@ and limitations under the License.
|
||||
/// <reference path="lib.es2018.d.ts" />
|
||||
/// <reference path="lib.esnext.asynciterable.d.ts" />
|
||||
/// <reference path="lib.esnext.array.d.ts" />
|
||||
/// <reference path="lib.esnext.symbol.d.ts" />
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
|
||||
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
/// <reference no-default-lib="true"/>
|
||||
|
||||
|
||||
interface Symbol {
|
||||
/**
|
||||
* expose the [[Description]] internal slot of a symbol directly
|
||||
*/
|
||||
readonly description: string;
|
||||
}
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Dodaj inicjator do właściwości „{0}”",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości",
|
||||
"Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”",
|
||||
"Add_missing_typeof_95052": "Dodaj brakujący element „typeof”",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej",
|
||||
"Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Wszystkie deklaracje metody abstrakcyjnej muszą występować obok siebie.",
|
||||
"All_destructured_elements_are_unused_6198": "Wszystkie elementy, których strukturę usunięto, są nieużywane.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Wszystkie importy w deklaracji importu są nieużywane.",
|
||||
"All_variables_are_unused_6199": "Wszystkie zmienne są nieużywane.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "Otaczające wyliczenia ze specyfikacją const nie są dozwolone w przypadku podania flagi „--isolatedModules”.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Klasa „{0}” została użyta przed zadeklarowaniem.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag „@augments” lub „@extends”.",
|
||||
"Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Nazwą klasy nie może być słowo „Object”, gdy docelowym językiem jest ES5 z modułem {0}.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Klasy mogą rozszerzać tylko pojedynczą klasę.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Klasy zawierające metody abstrakcyjne muszą być oznaczone jako abstrakcyjne.",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor klasy „{0}” jest chroniony i dostępny tylko w ramach deklaracji klasy.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory klas pochodnych muszą zawierać wywołanie „super”.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Nie podano pliku zawierającego i nie można określić katalogu głównego. Pomijanie wyszukiwania w folderze „node_modules”.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Konwertuj element „{0}” na zamapowany typ obiektu",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Przekonwertuj wszystkie funkcje konstruktora na klasy",
|
||||
"Convert_all_require_to_import_95048": "Konwertuj wszystkie wywołania „require” na wywołania „import”",
|
||||
"Convert_all_to_default_imports_95035": "Przekonwertuj wszystko na domyślne importowanie",
|
||||
"Convert_function_0_to_class_95002": "Konwertuj funkcję „{0}” na klasę",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Konwertuj funkcję na klasę ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Konwertuj importy nazwane na import przestrzeni nazw",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Konwertuj import przestrzeni nazw na importy nazwane",
|
||||
"Convert_require_to_import_95047": "Konwertuj wywołanie „require” na wywołanie „import”",
|
||||
"Convert_to_ES6_module_95017": "Konwertuj na moduł ES6",
|
||||
"Convert_to_default_import_95013": "Konwertuj na import domyślny",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki kodu zwracają wartość.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Nie można przypisać typu indeksu numerycznego „{0}” do typu indeksu ciągu „{1}”.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.",
|
||||
"Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.",
|
||||
"Object_is_possibly_null_2531": "Obiekt ma prawdopodobnie wartość „null”.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "Obiekt ma prawdopodobnie wartość „null” lub „undefined”.",
|
||||
"Object_is_possibly_undefined_2532": "Obiekt ma prawdopodobnie wartość „undefined”.",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.",
|
||||
"Remove_all_unreachable_code_95051": "Usuń cały nieosiągalny kod",
|
||||
"Remove_all_unused_labels_95054": "Usuń wszystkie nieużywane etykiety",
|
||||
"Remove_declaration_for_Colon_0_90004": "Usuń deklarację dla: „{0}”",
|
||||
"Remove_destructuring_90009": "Usuń usuwanie struktury",
|
||||
"Remove_import_from_0_90005": "Usuń import z „{0}”",
|
||||
"Remove_unreachable_code_95050": "Usuń nieosiągalny kod",
|
||||
"Remove_unused_label_95053": "Usuń nieużywaną etykietę",
|
||||
"Remove_variable_statement_90010": "Usuń instrukcję zmiennej",
|
||||
"Replace_import_with_0_95015": "Zamień import na element „{0}”.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Zgłoś błąd, gdy nie wszystkie ścieżki kodu zwracają wartość.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Zgłoś błędy dla przepuszczających klauzul case w instrukcji switch.",
|
||||
|
||||
Vendored
+14
-4
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
declare namespace ts.server.protocol {
|
||||
const enum CommandTypes {
|
||||
JsxClosingTag = "jsxClosingTag",
|
||||
Brace = "brace",
|
||||
BraceCompletion = "braceCompletion",
|
||||
GetSpanOfEnclosingComment = "getSpanOfEnclosingComment",
|
||||
@@ -672,6 +673,15 @@ declare namespace ts.server.protocol {
|
||||
*/
|
||||
openingBrace: string;
|
||||
}
|
||||
interface JsxClosingTagRequest extends FileLocationRequest {
|
||||
readonly command: CommandTypes.JsxClosingTag;
|
||||
readonly arguments: JsxClosingTagRequestArgs;
|
||||
}
|
||||
interface JsxClosingTagRequestArgs extends FileLocationRequestArgs {
|
||||
}
|
||||
interface JsxClosingTagResponse extends Response {
|
||||
readonly body: TextInsertion;
|
||||
}
|
||||
/**
|
||||
* @deprecated
|
||||
* Get occurrences request; value of command field is
|
||||
@@ -1363,7 +1373,7 @@ declare namespace ts.server.protocol {
|
||||
}
|
||||
interface CompletionEntryIdentifier {
|
||||
name: string;
|
||||
source: string;
|
||||
source?: string;
|
||||
}
|
||||
/**
|
||||
* Completion entry details request; value of command field is
|
||||
@@ -1403,7 +1413,7 @@ declare namespace ts.server.protocol {
|
||||
/**
|
||||
* Optional modifiers for the kind (such as 'public').
|
||||
*/
|
||||
kindModifiers: string;
|
||||
kindModifiers?: string;
|
||||
/**
|
||||
* A string that is used for comparing completion items so that they can be ordered. This
|
||||
* is often the same as the name but may be different in certain circumstances.
|
||||
@@ -1460,11 +1470,11 @@ declare namespace ts.server.protocol {
|
||||
/**
|
||||
* Documentation strings for the symbol.
|
||||
*/
|
||||
documentation: SymbolDisplayPart[];
|
||||
documentation?: SymbolDisplayPart[];
|
||||
/**
|
||||
* JSDoc tags for the symbol.
|
||||
*/
|
||||
tags: JSDocTagInfo[];
|
||||
tags?: JSDocTagInfo[];
|
||||
/**
|
||||
* The associated code actions for this entry
|
||||
*/
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Adicionar inicializador à propriedade '{0}'",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas",
|
||||
"Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente",
|
||||
"Add_missing_typeof_95052": "Adicionar typeof ausente",
|
||||
"Add_missing_typeof_95052": "Adicionar 'typeof' ausente",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro",
|
||||
"Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro",
|
||||
@@ -120,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas as declarações de um método abstrato devem ser consecutivas.",
|
||||
"All_destructured_elements_are_unused_6198": "Todos os elementos desestruturados são inutilizados.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Nenhuma das importações na declaração de importação está sendo utilizada.",
|
||||
"All_variables_are_unused_6199": "Nenhuma das variáveis está sendo utilizada.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "As enumerações de constante de ambiente não são permitidas quando o sinalizador '--isolatedModules' é fornecido.",
|
||||
@@ -256,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Classe '{0}' usada antes de sua declaração.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Declarações de classe não podem ter mais de uma marca `@augments` ou `@extends`.",
|
||||
"Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar ES5 com módulo {0}.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Classes só podem estender uma única classe.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "As classes que contêm métodos abstratos devem ser marcadas como abstratas.",
|
||||
@@ -274,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "O construtor de classe '{0}' é protegido e somente acessível na declaração de classe.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Construtores para classes derivadas devem conter uma chamada 'super'.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "O arquivo contido não foi especificado e o diretório raiz não pode ser determinado, ignorando a pesquisa na pasta 'node_modules'.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Converter '{0}' para o tipo de objeto mapeado",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Converter todas as funções de construtor em classes",
|
||||
"Convert_all_require_to_import_95048": "Converter todos os 'require' em 'import'",
|
||||
"Convert_all_to_default_imports_95035": "Converter tudo para importações padrão",
|
||||
"Convert_function_0_to_class_95002": "Converter função '{0}' em classe",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Converter função em uma classe ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Converter importações nomeadas em importação de namespace",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Converter importação de namespace em importações nomeadas",
|
||||
"Convert_require_to_import_95047": "Converter 'require' em 'import'",
|
||||
"Convert_to_ES6_module_95017": "Converter em módulo ES6",
|
||||
"Convert_to_default_import_95013": "Converter para importação padrão",
|
||||
@@ -581,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "O tipo de índice numérico '{0}' não é atribuível ao tipo de índice de cadeia de caracteres '{1}'.",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.",
|
||||
"Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.",
|
||||
"Object_is_possibly_null_2531": "Possivelmente, o objeto é 'nulo'.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "Possivelmente, o objeto é 'nulo' ou 'indefinido'.",
|
||||
"Object_is_possibly_undefined_2532": "Possivelmente, o objeto é 'nulo'.",
|
||||
@@ -709,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.",
|
||||
"Remove_all_unreachable_code_95051": "Remover todo o código inacessível",
|
||||
"Remove_all_unused_labels_95054": "Remover todos os rótulos não utilizados",
|
||||
"Remove_declaration_for_Colon_0_90004": "Remover declaração para: '{0}'",
|
||||
"Remove_destructuring_90009": "Remover desestruturação",
|
||||
"Remove_import_from_0_90005": "Remover importação do '{0}'",
|
||||
"Remove_unreachable_code_95050": "Remover código inacessível",
|
||||
"Remove_unused_label_95053": "Remover rótulo não utilizado",
|
||||
"Remove_variable_statement_90010": "Remover instrução de variável",
|
||||
"Replace_import_with_0_95015": "Substitua a importação com '{0}'.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Relate erro quando nem todos os caminhos de código na função retornarem um valor.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Relate erros para casos de fallthrough na instrução switch.",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "Добавить инициализатор к свойству \"{0}\"",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Добавить инициализаторы ко всем неинициализированным свойствам",
|
||||
"Add_missing_super_call_90001": "Добавьте отсутствующий вызов \"super()\"",
|
||||
"Add_missing_typeof_95052": "Добавить отсутствующий \"typeof\"",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Добавить квалификатор ко всем неразрешенным переменным, соответствующим имени члена",
|
||||
"Add_to_all_uncalled_decorators_95044": "Добавить \"()\" ко всем невызванным декораторам",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Добавить \"@ts-ignore\" ко всем сообщениям об ошибках",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Все объявления абстрактных методов должны быть последовательными.",
|
||||
"All_destructured_elements_are_unused_6198": "Все деструктурированные элементы не используются.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "Ни один из импортов в объявлении импорта не используется.",
|
||||
"All_variables_are_unused_6199": "Ни одна переменная не используется.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не повлияет на выведение кода — только на проверку типов.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Разрешить компиляцию файлов javascript.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "Перечисление внешних констант не разрешено, если задан флаг \"--isolatedModules\".",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "Класс \"{0}\" использован прежде, чем объявлен.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "В объявлении класса не может использоваться более одного тега \"@augments\" или \"@extends\".",
|
||||
"Class_name_cannot_be_0_2414": "Имя класса не может иметь значение \"{0}\".",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Класс не может иметь имя \"Object\" при выборе ES5 с модулем {0} в качестве целевого.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Статическая сторона класса \"{0}\" неправильно расширяет статическую сторону базового класса \"{1}\".",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Классы могут расширить только один класс.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Классы, содержащие абстрактные методы, должны быть отмечены как абстрактные.",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Конструктор класса \"{0}\" защищен и доступен только в объявлении класса.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Конструкторы производных классов должны содержать вызов super.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Содержащий файл не указан, корневой каталог невозможно определить. Выполняется пропуск поиска в папке node_modules.",
|
||||
"Convert_0_to_mapped_object_type_95055": "Преобразовать \"{0}\" в тип сопоставленного объекта",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Преобразовать все функции конструктора в классы",
|
||||
"Convert_all_require_to_import_95048": "Преобразовать все \"require\" в \"import\"",
|
||||
"Convert_all_to_default_imports_95035": "Преобразовать все в импорт по умолчанию",
|
||||
"Convert_function_0_to_class_95002": "Преобразование функции \"{0}\" в класс",
|
||||
"Convert_function_to_an_ES2015_class_95001": "Преобразование функции в класс ES2015",
|
||||
"Convert_named_imports_to_namespace_import_95057": "Преобразовать операции импорта имен в импорт пространства имен",
|
||||
"Convert_namespace_import_to_named_imports_95056": "Преобразовать импорт пространства имен в операции импорта имен",
|
||||
"Convert_require_to_import_95047": "Преобразовать \"require\" в \"import\"",
|
||||
"Convert_to_ES6_module_95017": "Преобразовать в модуль ES6",
|
||||
"Convert_to_default_import_95013": "Преобразовать в импорт по умолчанию",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "Не все пути кода возвращают значение.",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Тип числового индекса \"{0}\" нельзя назначить типу строкового индекса \"{1}\".",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "Числовые разделители здесь запрещены.",
|
||||
"Object_is_of_type_unknown_2571": "Объект имеет тип \"Неизвестный\".",
|
||||
"Object_is_possibly_null_2531": "Возможно, объект равен null.",
|
||||
"Object_is_possibly_null_or_undefined_2533": "Возможно, объект равен null или undefined.",
|
||||
"Object_is_possibly_undefined_2532": "Возможно, объект равен undefined.",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Перенаправить структуру вывода в каталог.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Указанный в ссылке проект \"{0}\" должен иметь следующее значение параметра composite: true.",
|
||||
"Remove_all_unreachable_code_95051": "Удалить весь недостижимый код",
|
||||
"Remove_all_unused_labels_95054": "Удалить все неиспользуемые метки",
|
||||
"Remove_declaration_for_Colon_0_90004": "Удалите объявление: \"{0}\"",
|
||||
"Remove_destructuring_90009": "Удалить деструктурирование",
|
||||
"Remove_import_from_0_90005": "Удалить импорт из \"{0}\"",
|
||||
"Remove_unreachable_code_95050": "Удалить недостижимый код",
|
||||
"Remove_unused_label_95053": "Удалить неиспользуемую метку",
|
||||
"Remove_variable_statement_90010": "Удалить оператор с переменной",
|
||||
"Replace_import_with_0_95015": "Замена импорта на \"{0}\".",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Сообщать об ошибке, если не все пути кода в функции возвращают значение.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Сообщать об ошибках для случаев передачи управления в операторе switch.",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "'{0}' özelliğine başlatıcı ekle",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle",
|
||||
"Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle",
|
||||
"Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle",
|
||||
"Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Soyut metoda ait tüm bildirimler ardışık olmalıdır.",
|
||||
"All_destructured_elements_are_unused_6198": "Yok edilen öğelerin hiçbiri kullanılmamış.",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "İçeri aktarma bildirimindeki hiçbir içeri aktarma kullanılmadı.",
|
||||
"All_variables_are_unused_6199": "Hiçbir değişken kullanılmıyor.",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "'--isolatedModules' bayrağı sağlandığında çevresel const sabit listesi değerlerine izin verilmez.",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "'{0}' sınıfı, bildiriminden önce kullanıldı.",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla `@augments` veya `@extends` etiketi olamaz.",
|
||||
"Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Modül {0} ile ES5 hedeflendiğinde sınıf adı 'Object' olamaz.",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.",
|
||||
"Classes_can_only_extend_a_single_class_1174": "Sınıflar yalnızca bir sınıfı genişletebilir.",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "Soyut metotlar içeren sınıflar abstract olarak işaretlenmelidir.",
|
||||
@@ -273,6 +276,7 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' sınıfının oluşturucusu korumalı olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "Türetilmiş sınıflara ilişkin oluşturucular bir 'super' çağrısı içermelidir.",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Kapsayıcı dosya belirtilmedi ve kök dizini belirlenemiyor; 'node_modules' klasöründe arama atlanıyor.",
|
||||
"Convert_0_to_mapped_object_type_95055": "'{0}' öğesini eşlenen nesne türüne dönüştür",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "Tüm oluşturucu işlevleri sınıflara dönüştür",
|
||||
"Convert_all_require_to_import_95048": "Tüm 'require' öğelerini 'import' olarak dönüştür",
|
||||
"Convert_all_to_default_imports_95035": "Tümünü varsayılan içeri aktarmalara dönüştür",
|
||||
@@ -708,10 +712,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.",
|
||||
"Remove_all_unreachable_code_95051": "Tüm erişilemeyen kodları kaldır",
|
||||
"Remove_all_unused_labels_95054": "Kullanılmayan tüm etiketleri kaldır",
|
||||
"Remove_declaration_for_Colon_0_90004": "'{0}' bildirimini kaldır",
|
||||
"Remove_destructuring_90009": "Yıkmayı kaldır",
|
||||
"Remove_import_from_0_90005": "'{0}' öğesinden içeri aktarmayı kaldır",
|
||||
"Remove_unreachable_code_95050": "Erişilemeyen kodları kaldır",
|
||||
"Remove_unused_label_95053": "Kullanılmayan etiketi kaldır",
|
||||
"Remove_variable_statement_90010": "Değişken deyimini kaldır",
|
||||
"Replace_import_with_0_95015": "İçeri aktarma işlemini '{0}' ile değiştirin.",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "İşlevdeki tüm kod yolları bir değer döndürmediğinde hata bildir.",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch deyiminde sonraki ifadelere geçiş ile ilgili hataları bildir.",
|
||||
|
||||
+5730
-5406
File diff suppressed because it is too large
Load Diff
+8492
-7577
File diff suppressed because it is too large
Load Diff
Vendored
+463
-418
File diff suppressed because it is too large
Load Diff
+9456
-8506
File diff suppressed because it is too large
Load Diff
Vendored
+427
-394
File diff suppressed because it is too large
Load Diff
+9324
-8399
File diff suppressed because it is too large
Load Diff
Vendored
+427
-394
File diff suppressed because it is too large
Load Diff
+9324
-8399
File diff suppressed because it is too large
Load Diff
+1461
-1369
File diff suppressed because it is too large
Load Diff
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "向属性“{0}”添加初始值设定项",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "将初始化表达式添加到未初始化的所有属性",
|
||||
"Add_missing_super_call_90001": "添加缺失的 \"super()\" 调用",
|
||||
"Add_missing_typeof_95052": "添加缺少的 \"typeof\"",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "将限定符添加到匹配成员名称的所有未解析变量",
|
||||
"Add_to_all_uncalled_decorators_95044": "将 \"()\" 添加到所有未调用的修饰器",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "将 \"@ts-ignore\" 添加到所有错误消息",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有声明必须是连续的。",
|
||||
"All_destructured_elements_are_unused_6198": "未取消使用任何解构元素。",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "未使用导入声明中的所有导入。",
|
||||
"All_variables_are_unused_6199": "所有变量均未使用。",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允许从不带默认输出的模块中默认输入。这不会影响代码发出,只是类型检查。",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "允许编译 JavaScript 文件。",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "提供 \"--isolatedModules\" 标志的情况下不允许使用环境常数枚举。",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "类“{0}”用于其声明前。",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 \"@augments\" 或 \"@extends\" 标记。",
|
||||
"Class_name_cannot_be_0_2414": "类名不能为“{0}”。",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "使用模块 {0} 将目标设置为 ES5 时,类名称不能为 \"Object\"。",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "类静态侧“{0}”错误扩展基类静态侧“{1}”。",
|
||||
"Classes_can_only_extend_a_single_class_1174": "类只能扩展一个类。",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "包含抽象方法的类必须标记为抽象。",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "类“{0}”的构造函数是受保护的,仅可在类声明中访问。",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生类的构造函数必须包含 \"super\" 调用。",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含文件,并且无法确定根目录,正在跳过在 \"node_modules\" 文件夹中查找。",
|
||||
"Convert_0_to_mapped_object_type_95055": "将“{0}”转换为映射对象类型",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "将所有构造函数都转换为类",
|
||||
"Convert_all_require_to_import_95048": "将所有 \"require\" 转换为 \"import\"",
|
||||
"Convert_all_to_default_imports_95035": "全部转换为默认导入",
|
||||
"Convert_function_0_to_class_95002": "将函数“{0}”转换为类",
|
||||
"Convert_function_to_an_ES2015_class_95001": "将函数转换为 ES2015 类",
|
||||
"Convert_named_imports_to_namespace_import_95057": "将命名导入转换为命名空间导入",
|
||||
"Convert_namespace_import_to_named_imports_95056": "将命名空间导入转换为命名导入",
|
||||
"Convert_require_to_import_95047": "将 \"require\" 转换为 \"import\"",
|
||||
"Convert_to_ES6_module_95017": "转换为 ES6 模块",
|
||||
"Convert_to_default_import_95013": "转换为默认导入",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "并非所有代码路径都返回值。",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "数字索引类型“{0}”不能赋给字符串索引类型“{1}”。",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "此处不允许使用数字分隔符。",
|
||||
"Object_is_of_type_unknown_2571": "对象的类型为 \"unknown\"。",
|
||||
"Object_is_possibly_null_2531": "对象可能为 \"null\"。",
|
||||
"Object_is_possibly_null_or_undefined_2533": "对象可能为 \"null\" 或“未定义”。",
|
||||
"Object_is_possibly_undefined_2532": "对象可能为“未定义”。",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "将输出结构重定向到目录。",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "引用的项目“{0}”必须拥有设置 \"composite\": true。",
|
||||
"Remove_all_unreachable_code_95051": "删除所有无法访问的代码",
|
||||
"Remove_all_unused_labels_95054": "删除所有未使用的标签",
|
||||
"Remove_declaration_for_Colon_0_90004": "删除“{0}”的声明",
|
||||
"Remove_destructuring_90009": "删除解构",
|
||||
"Remove_import_from_0_90005": "从“{0}”删除导入",
|
||||
"Remove_unreachable_code_95050": "删除无法访问的代码",
|
||||
"Remove_unused_label_95053": "删除未使用的标签",
|
||||
"Remove_variable_statement_90010": "删除变量语句",
|
||||
"Replace_import_with_0_95015": "用“{0}”替换导入。",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "在函数中的所有代码路径并非都返回值时报告错误。",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "报告 switch 语句中遇到 fallthrough 情况的错误。",
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
"Add_initializer_to_property_0_95019": "將初始設定式新增至屬性 '{0}'",
|
||||
"Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式",
|
||||
"Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫",
|
||||
"Add_missing_typeof_95052": "新增遺漏的 'typeof'",
|
||||
"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞",
|
||||
"Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'",
|
||||
"Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'",
|
||||
@@ -119,6 +120,7 @@
|
||||
"All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有宣告必須連續。",
|
||||
"All_destructured_elements_are_unused_6198": "不會使用所有未經結構化的項目。",
|
||||
"All_imports_in_import_declaration_are_unused_6192": "匯入宣告中的所有匯入皆未使用。",
|
||||
"All_variables_are_unused_6199": "所有變數都未使用。",
|
||||
"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。",
|
||||
"Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。",
|
||||
"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209": "提供 '--isolatedModules' 旗標時,不可使用環境常數列舉。",
|
||||
@@ -255,6 +257,7 @@
|
||||
"Class_0_used_before_its_declaration_2449": "類別 '{0}' 的位置在其宣告之前。",
|
||||
"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告只可有一個 '@augments' 或 '@extends' 標記。",
|
||||
"Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。",
|
||||
"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 時,類別名稱不可為 'Object'。",
|
||||
"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。",
|
||||
"Classes_can_only_extend_a_single_class_1174": "類別只能擴充一個類別。",
|
||||
"Classes_containing_abstract_methods_must_be_marked_abstract_2514": "包含抽象方法的類別必須標記為抽象。",
|
||||
@@ -273,11 +276,14 @@
|
||||
"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "類別 '{0}' 的建構函式受到保護,並且只能在類別宣告內存取。",
|
||||
"Constructors_for_derived_classes_must_contain_a_super_call_2377": "衍生類別的建構函式必須包含 'super' 呼叫。",
|
||||
"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含檔案,因此無法決定根目錄,而將略過 'node_modules' 中的查閱。",
|
||||
"Convert_0_to_mapped_object_type_95055": "將 '{0}' 轉換為對應的物件類型",
|
||||
"Convert_all_constructor_functions_to_classes_95045": "將所有建構函式轉換為類別",
|
||||
"Convert_all_require_to_import_95048": "將所有 'require' 轉換至 'import'",
|
||||
"Convert_all_to_default_imports_95035": "全部轉換為預設匯入",
|
||||
"Convert_function_0_to_class_95002": "將函式 '{0}' 轉換為類別",
|
||||
"Convert_function_to_an_ES2015_class_95001": "將函式轉換為 ES2015 類別",
|
||||
"Convert_named_imports_to_namespace_import_95057": "將具名匯入轉換為命名空間匯入",
|
||||
"Convert_namespace_import_to_named_imports_95056": "將命名空間匯入轉換為具名匯入",
|
||||
"Convert_require_to_import_95047": "將 'require' 轉換至 'import'",
|
||||
"Convert_to_ES6_module_95017": "轉換為 ES6 模組",
|
||||
"Convert_to_default_import_95013": "轉換為預設匯入",
|
||||
@@ -580,6 +586,7 @@
|
||||
"Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。",
|
||||
"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "數值索引類型 '{0}' 不可指派給字串索引類型 '{1}'。",
|
||||
"Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。",
|
||||
"Object_is_of_type_unknown_2571": "物件的類型為 '未知'。",
|
||||
"Object_is_possibly_null_2531": "物件可能為「null」。",
|
||||
"Object_is_possibly_null_or_undefined_2533": "物件可能為「null」或「未定義」。",
|
||||
"Object_is_possibly_undefined_2532": "物件可能為「未定義」。",
|
||||
@@ -708,10 +715,13 @@
|
||||
"Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。",
|
||||
"Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。",
|
||||
"Remove_all_unreachable_code_95051": "移除所有無法連線的程式碼",
|
||||
"Remove_all_unused_labels_95054": "移除所有未使用的標籤",
|
||||
"Remove_declaration_for_Colon_0_90004": "移除 '{0}' 的宣告",
|
||||
"Remove_destructuring_90009": "移除解構",
|
||||
"Remove_import_from_0_90005": "從 '{0}' 移除匯入",
|
||||
"Remove_unreachable_code_95050": "移除無法連線的程式碼",
|
||||
"Remove_unused_label_95053": "移除未使用的標籤",
|
||||
"Remove_variable_statement_90010": "移除變數陳述式",
|
||||
"Replace_import_with_0_95015": "以 '{0}' 取代匯入。",
|
||||
"Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "當函式中的部分程式碼路徑並未傳回值時回報錯誤。",
|
||||
"Report_errors_for_fallthrough_cases_in_switch_statement_6076": "回報 switch 陳述式內 fallthrough 案例的錯誤。",
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
// @ts-check
|
||||
const path = require("path");
|
||||
const child_process = require("child_process");
|
||||
const tsc = require("gulp-typescript");
|
||||
const Vinyl = require("vinyl");
|
||||
const { Duplex, Readable } = require("stream");
|
||||
|
||||
/**
|
||||
* @param {string} tsConfigFileName
|
||||
* @param {tsc.Settings} settings
|
||||
* @param {Object} options
|
||||
* @param {string} [options.typescript]
|
||||
*/
|
||||
function createProject(tsConfigFileName, settings, options) {
|
||||
settings = { ...settings };
|
||||
options = { ...options };
|
||||
if (settings.typescript) throw new Error();
|
||||
|
||||
const localSettings = { ...settings };
|
||||
if (options.typescript) {
|
||||
options.typescript = path.resolve(options.typescript);
|
||||
localSettings.typescript = require(options.typescript);
|
||||
}
|
||||
|
||||
const project = tsc.createProject(tsConfigFileName, localSettings);
|
||||
const wrappedProject = /** @type {tsc.Project} */(() => {
|
||||
const proc = child_process.fork(require.resolve("./main.js"));
|
||||
/** @type {Duplex & { js?: Readable, dts?: Readable }} */
|
||||
const compileStream = new Duplex({
|
||||
objectMode: true,
|
||||
read() {},
|
||||
/** @param {*} file */
|
||||
write(file, encoding, callback) {
|
||||
proc.send({ method: "write", params: { path: file.path, cwd: file.cwd, base: file.base }});
|
||||
callback();
|
||||
},
|
||||
final(callback) {
|
||||
proc.send({ method: "final" });
|
||||
callback();
|
||||
}
|
||||
});
|
||||
const jsStream = compileStream.js = new Readable({
|
||||
objectMode: true,
|
||||
read() {}
|
||||
});
|
||||
const dtsStream = compileStream.dts = new Readable({
|
||||
objectMode: true,
|
||||
read() {}
|
||||
});
|
||||
proc.send({ method: "createProject", params: { tsConfigFileName, settings, options } });
|
||||
proc.on("message", ({ method, params }) => {
|
||||
if (method === "write") {
|
||||
const file = new Vinyl({
|
||||
path: params.path,
|
||||
cwd: params.cwd,
|
||||
base: params.base,
|
||||
contents: Buffer.from(params.contents, "utf8")
|
||||
});
|
||||
if (params.sourceMap) file.sourceMap = params.sourceMap
|
||||
compileStream.push(file);;
|
||||
if (file.path.endsWith(".d.ts")) {
|
||||
dtsStream.push(file);
|
||||
}
|
||||
else {
|
||||
jsStream.push(file);
|
||||
}
|
||||
}
|
||||
else if (method === "final") {
|
||||
compileStream.push(null);
|
||||
jsStream.push(null);
|
||||
dtsStream.push(null);
|
||||
proc.kill();
|
||||
}
|
||||
else if (method === "error") {
|
||||
const error = new Error();
|
||||
error.name = params.name;
|
||||
error.message = params.message;
|
||||
error.stack = params.stack;
|
||||
compileStream.emit("error", error);
|
||||
proc.kill();
|
||||
}
|
||||
});
|
||||
return /** @type {*} */(compileStream);
|
||||
});
|
||||
return Object.assign(wrappedProject, project);
|
||||
}
|
||||
|
||||
exports.createProject = createProject;
|
||||
@@ -0,0 +1,91 @@
|
||||
// @ts-check
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const tsc = require("gulp-typescript");
|
||||
const Vinyl = require("vinyl");
|
||||
const { Readable, Writable } = require("stream");
|
||||
|
||||
/** @type {tsc.Project} */
|
||||
let project;
|
||||
|
||||
/** @type {Readable} */
|
||||
let inputStream;
|
||||
|
||||
/** @type {Writable} */
|
||||
let outputStream;
|
||||
|
||||
/** @type {tsc.CompileStream} */
|
||||
let compileStream;
|
||||
|
||||
process.on("message", ({ method, params }) => {
|
||||
try {
|
||||
if (method === "createProject") {
|
||||
const { tsConfigFileName, settings, options } = params;
|
||||
if (options.typescript) {
|
||||
settings.typescript = require(options.typescript);
|
||||
}
|
||||
project = tsc.createProject(tsConfigFileName, settings);
|
||||
inputStream = new Readable({
|
||||
objectMode: true,
|
||||
read() {}
|
||||
});
|
||||
outputStream = new Writable({
|
||||
objectMode: true,
|
||||
/**
|
||||
* @param {*} file
|
||||
*/
|
||||
write(file, encoding, callback) {
|
||||
process.send({
|
||||
method: "write",
|
||||
params: {
|
||||
path: file.path,
|
||||
cwd: file.cwd,
|
||||
base: file.base,
|
||||
contents: file.contents.toString(),
|
||||
sourceMap: file.sourceMap
|
||||
}
|
||||
});
|
||||
callback();
|
||||
},
|
||||
final(callback) {
|
||||
process.send({ method: "final" });
|
||||
callback();
|
||||
}
|
||||
});
|
||||
outputStream.on("error", error => {
|
||||
process.send({
|
||||
method: "error",
|
||||
params: {
|
||||
name: error.name,
|
||||
message: error.message,
|
||||
stack: error.stack
|
||||
}
|
||||
});
|
||||
});
|
||||
compileStream = project();
|
||||
inputStream.pipe(compileStream).pipe(outputStream);
|
||||
}
|
||||
else if (method === "write") {
|
||||
const file = new Vinyl({
|
||||
path: params.path,
|
||||
cwd: params.cwd,
|
||||
base: params.base
|
||||
});
|
||||
file.contents = fs.readFileSync(file.path);
|
||||
inputStream.push(/** @type {*} */(file));
|
||||
}
|
||||
else if (method === "final") {
|
||||
inputStream.push(null);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
process.send({
|
||||
method: "error",
|
||||
params: {
|
||||
name: e.name,
|
||||
message: e.message,
|
||||
stack: e.stack
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
+52
-31
@@ -1698,6 +1698,7 @@ namespace ts {
|
||||
symbol.parent = container.symbol;
|
||||
}
|
||||
addDeclarationToSymbol(symbol, node, symbolFlags);
|
||||
return symbol;
|
||||
}
|
||||
|
||||
function bindBlockScopedDeclaration(node: Declaration, symbolFlags: SymbolFlags, symbolExcludes: SymbolFlags) {
|
||||
@@ -2317,13 +2318,11 @@ namespace ts {
|
||||
// expression is the declaration
|
||||
setCommonJsModuleIndicator(node);
|
||||
const lhs = node.left as PropertyAccessEntityNameExpression;
|
||||
const symbol = forEachIdentifierInEntityName(lhs.expression, (id, original) => {
|
||||
if (!original) {
|
||||
return undefined;
|
||||
const symbol = forEachIdentifierInEntityName(lhs.expression, /*parent*/ undefined, (id, symbol) => {
|
||||
if (symbol) {
|
||||
addDeclarationToSymbol(symbol, id, SymbolFlags.Module | SymbolFlags.JSContainer);
|
||||
}
|
||||
const s = getJSInitializerSymbol(original)!;
|
||||
addDeclarationToSymbol(s, id, SymbolFlags.Module | SymbolFlags.JSContainer);
|
||||
return s;
|
||||
return symbol;
|
||||
});
|
||||
if (symbol) {
|
||||
const flags = isClassExpression(node.right) ?
|
||||
@@ -2359,12 +2358,12 @@ namespace ts {
|
||||
switch (thisContainer.kind) {
|
||||
case SyntaxKind.FunctionDeclaration:
|
||||
case SyntaxKind.FunctionExpression:
|
||||
let constructorSymbol = thisContainer.symbol;
|
||||
let constructorSymbol: Symbol | undefined = thisContainer.symbol;
|
||||
// For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
|
||||
if (isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === SyntaxKind.EqualsToken) {
|
||||
const l = thisContainer.parent.left;
|
||||
if (isPropertyAccessEntityNameExpression(l) && isPrototypeAccess(l.expression)) {
|
||||
constructorSymbol = getJSInitializerSymbolFromName(l.expression.expression, thisParentContainer)!;
|
||||
constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2463,46 +2462,68 @@ namespace ts {
|
||||
bindPropertyAssignment(node.expression, node, /*isPrototypeProperty*/ false);
|
||||
}
|
||||
|
||||
function getJSInitializerSymbolFromName(name: EntityNameExpression, lookupContainer?: Node): Symbol | undefined {
|
||||
return getJSInitializerSymbol(lookupSymbolForPropertyAccess(name, lookupContainer));
|
||||
}
|
||||
|
||||
function bindPropertyAssignment(name: EntityNameExpression, propertyAccess: PropertyAccessEntityNameExpression, isPrototypeProperty: boolean) {
|
||||
let symbol = getJSInitializerSymbolFromName(name);
|
||||
let namespaceSymbol = lookupSymbolForPropertyAccess(name);
|
||||
const isToplevelNamespaceableInitializer = isBinaryExpression(propertyAccess.parent)
|
||||
? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === SyntaxKind.SourceFile &&
|
||||
!!getJavascriptInitializer(getInitializerOfBinaryExpression(propertyAccess.parent), isPrototypeAccess(propertyAccess.parent.left))
|
||||
: propertyAccess.parent.parent.kind === SyntaxKind.SourceFile;
|
||||
if (!isPrototypeProperty && (!symbol || !(symbol.flags & SymbolFlags.Namespace)) && isToplevelNamespaceableInitializer) {
|
||||
if (!isPrototypeProperty && (!namespaceSymbol || !(namespaceSymbol.flags & SymbolFlags.Namespace)) && isToplevelNamespaceableInitializer) {
|
||||
// make symbols or add declarations for intermediate containers
|
||||
const flags = SymbolFlags.Module | SymbolFlags.JSContainer;
|
||||
const excludeFlags = SymbolFlags.ValueModuleExcludes & ~SymbolFlags.JSContainer;
|
||||
forEachIdentifierInEntityName(propertyAccess.expression, (id, original) => {
|
||||
if (original) {
|
||||
// Note: add declaration to original symbol, not the special-syntax's symbol, so that namespaces work for type lookup
|
||||
addDeclarationToSymbol(original, id, flags);
|
||||
return original;
|
||||
namespaceSymbol = forEachIdentifierInEntityName(propertyAccess.expression, namespaceSymbol, (id, symbol, parent) => {
|
||||
if (symbol) {
|
||||
addDeclarationToSymbol(symbol, id, flags);
|
||||
return symbol;
|
||||
}
|
||||
else {
|
||||
return symbol = declareSymbol(symbol ? symbol.exports! : container.locals!, symbol, id, flags, excludeFlags);
|
||||
return declareSymbol(parent ? parent.exports! : container.locals!, parent, id, flags, excludeFlags);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!symbol || !(symbol.flags & (SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.NamespaceModule | SymbolFlags.ObjectLiteral))) {
|
||||
if (!namespaceSymbol || !isJavascriptContainer(namespaceSymbol)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up the members collection if it doesn't exist already
|
||||
const symbolTable = isPrototypeProperty ?
|
||||
(symbol.members || (symbol.members = createSymbolTable())) :
|
||||
(symbol.exports || (symbol.exports = createSymbolTable()));
|
||||
(namespaceSymbol.members || (namespaceSymbol.members = createSymbolTable())) :
|
||||
(namespaceSymbol.exports || (namespaceSymbol.exports = createSymbolTable()));
|
||||
|
||||
// Declare the method/property
|
||||
const jsContainerFlag = isToplevelNamespaceableInitializer ? SymbolFlags.JSContainer : 0;
|
||||
const isMethod = isFunctionLikeDeclaration(getAssignedJavascriptInitializer(propertyAccess)!); // TODO: GH#18217
|
||||
const isMethod = isFunctionLikeDeclaration(getAssignedJavascriptInitializer(propertyAccess)!);
|
||||
const symbolFlags = (isMethod ? SymbolFlags.Method : SymbolFlags.Property) | jsContainerFlag;
|
||||
const symbolExcludes = (isMethod ? SymbolFlags.MethodExcludes : SymbolFlags.PropertyExcludes) & ~jsContainerFlag;
|
||||
declareSymbol(symbolTable, symbol, propertyAccess, symbolFlags, symbolExcludes);
|
||||
declareSymbol(symbolTable, namespaceSymbol, propertyAccess, symbolFlags, symbolExcludes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Javascript containers are:
|
||||
* - Functions
|
||||
* - classes
|
||||
* - namespaces
|
||||
* - variables initialized with function expressions
|
||||
* - with class expressions
|
||||
* - with empty object literals
|
||||
* - with non-empty object literals if assigned to the prototype property
|
||||
*/
|
||||
function isJavascriptContainer(symbol: Symbol): boolean {
|
||||
if (symbol.flags & (SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.NamespaceModule)) {
|
||||
return true;
|
||||
}
|
||||
const node = symbol.valueDeclaration;
|
||||
const init = !node ? undefined :
|
||||
isVariableDeclaration(node) ? node.initializer :
|
||||
isBinaryExpression(node) ? node.right :
|
||||
isPropertyAccessExpression(node) && isBinaryExpression(node.parent) ? node.parent.right :
|
||||
undefined;
|
||||
if (init) {
|
||||
const isPrototypeAssignment = isPrototypeAccess(isVariableDeclaration(node) ? node.name : isBinaryExpression(node) ? node.left : node);
|
||||
return !!getJavascriptInitializer(isBinaryExpression(init) && init.operatorToken.kind === SyntaxKind.BarBarToken ? init.right : init, isPrototypeAssignment);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getParentOfBinaryExpression(expr: BinaryExpression) {
|
||||
@@ -2517,22 +2538,22 @@ namespace ts {
|
||||
return lookupSymbolForNameWorker(lookupContainer, node.escapedText);
|
||||
}
|
||||
else {
|
||||
const symbol = getJSInitializerSymbol(lookupSymbolForPropertyAccess(node.expression));
|
||||
const symbol = lookupSymbolForPropertyAccess(node.expression);
|
||||
return symbol && symbol.exports && symbol.exports.get(node.name.escapedText);
|
||||
}
|
||||
}
|
||||
|
||||
function forEachIdentifierInEntityName(e: EntityNameExpression, action: (e: Identifier, symbol: Symbol | undefined) => Symbol | undefined): Symbol | undefined {
|
||||
function forEachIdentifierInEntityName(e: EntityNameExpression, parent: Symbol | undefined, action: (e: Identifier, symbol: Symbol | undefined, parent: Symbol | undefined) => Symbol | undefined): Symbol | undefined {
|
||||
if (isExportsOrModuleExportsOrAlias(file, e)) {
|
||||
return file.symbol;
|
||||
}
|
||||
else if (isIdentifier(e)) {
|
||||
return action(e, lookupSymbolForPropertyAccess(e));
|
||||
return action(e, lookupSymbolForPropertyAccess(e), parent);
|
||||
}
|
||||
else {
|
||||
const s = getJSInitializerSymbol(forEachIdentifierInEntityName(e.expression, action));
|
||||
const s = forEachIdentifierInEntityName(e.expression, parent, action);
|
||||
if (!s || !s.exports) return Debug.fail();
|
||||
return action(e.name, s.exports.get(e.name.escapedText));
|
||||
return action(e.name, s.exports.get(e.name.escapedText), s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2596,7 +2617,7 @@ namespace ts {
|
||||
bindBlockScopedVariableDeclaration(node);
|
||||
}
|
||||
else if (isParameterDeclaration(node)) {
|
||||
// It is safe to walk up parent chain to find whether the node is a destructing parameter declaration
|
||||
// It is safe to walk up parent chain to find whether the node is a destructuring parameter declaration
|
||||
// because its parent chain has already been set up, since parents are set before descending into children.
|
||||
//
|
||||
// If node is a binding element in parameter declaration, we need to use ParameterExcludes.
|
||||
|
||||
@@ -549,8 +549,8 @@ namespace ts {
|
||||
* Create the builder to manage semantic diagnostics and cache them
|
||||
*/
|
||||
export function createSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): SemanticDiagnosticsBuilderProgram;
|
||||
export function createSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray<string>, options: CompilerOptions, host?: CompilerHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): SemanticDiagnosticsBuilderProgram;
|
||||
export function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | ReadonlyArray<string>, hostOrOptions: BuilderProgramHost | CompilerOptions, oldProgramOrHost?: CompilerHost | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>) {
|
||||
export function createSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray<string> | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): SemanticDiagnosticsBuilderProgram;
|
||||
export function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | ReadonlyArray<string> | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>) {
|
||||
return createBuilderProgram(BuilderProgramKind.SemanticDiagnosticsBuilderProgram, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics));
|
||||
}
|
||||
|
||||
@@ -559,8 +559,8 @@ namespace ts {
|
||||
* to emit the those files and manage semantic diagnostics cache as well
|
||||
*/
|
||||
export function createEmitAndSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): EmitAndSemanticDiagnosticsBuilderProgram;
|
||||
export function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray<string>, options: CompilerOptions, host?: CompilerHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): EmitAndSemanticDiagnosticsBuilderProgram;
|
||||
export function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | ReadonlyArray<string>, hostOrOptions: BuilderProgramHost | CompilerOptions, oldProgramOrHost?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>) {
|
||||
export function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray<string> | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): EmitAndSemanticDiagnosticsBuilderProgram;
|
||||
export function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | ReadonlyArray<string> | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>) {
|
||||
return createBuilderProgram(BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics));
|
||||
}
|
||||
|
||||
@@ -568,8 +568,8 @@ namespace ts {
|
||||
* Creates a builder thats just abstraction over program and can be used with watch
|
||||
*/
|
||||
export function createAbstractBuilder(newProgram: Program, host: BuilderProgramHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): BuilderProgram;
|
||||
export function createAbstractBuilder(rootNames: ReadonlyArray<string>, options: CompilerOptions, host?: CompilerHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): BuilderProgram;
|
||||
export function createAbstractBuilder(newProgramOrRootNames: Program | ReadonlyArray<string>, hostOrOptions: BuilderProgramHost | CompilerOptions, oldProgramOrHost?: CompilerHost | BuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): BuilderProgram {
|
||||
export function createAbstractBuilder(rootNames: ReadonlyArray<string> | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): BuilderProgram;
|
||||
export function createAbstractBuilder(newProgramOrRootNames: Program | ReadonlyArray<string> | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | BuilderProgram, configFileParsingDiagnosticsOrOldProgram?: ReadonlyArray<Diagnostic> | BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): BuilderProgram {
|
||||
const { newProgram: program } = getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics);
|
||||
return {
|
||||
// Only return program, all other methods are not implemented
|
||||
|
||||
+155
-178
@@ -310,21 +310,34 @@ namespace ts {
|
||||
const node = getParseTreeNode(nodeIn, isTypeNode);
|
||||
return node && getTypeArgumentConstraint(node);
|
||||
},
|
||||
getSuggestionDiagnostics: (file, ct) => {
|
||||
let diagnostics: DiagnosticWithLocation[] | undefined;
|
||||
try {
|
||||
// Record the cancellation token so it can be checked later on during checkSourceElement.
|
||||
// Do this in a finally block so we can ensure that it gets reset back to nothing after
|
||||
// this call is done.
|
||||
cancellationToken = ct;
|
||||
|
||||
getSuggestionDiagnostics: file => {
|
||||
return (suggestionDiagnostics.get(file.fileName) || emptyArray).concat(getUnusedDiagnostics());
|
||||
function getUnusedDiagnostics(): ReadonlyArray<DiagnosticWithLocation> {
|
||||
if (file.isDeclarationFile) return emptyArray;
|
||||
|
||||
// Ensure file is type checked
|
||||
checkSourceFile(file);
|
||||
const diagnostics: DiagnosticWithLocation[] = [];
|
||||
Debug.assert(!!(getNodeLinks(file).flags & NodeCheckFlags.TypeChecked));
|
||||
|
||||
diagnostics = addRange(diagnostics, suggestionDiagnostics.get(file.fileName));
|
||||
if (!file.isDeclarationFile && (!unusedIsError(UnusedKind.Local) || !unusedIsError(UnusedKind.Parameter))) {
|
||||
addUnusedDiagnostics();
|
||||
}
|
||||
return diagnostics || emptyArray;
|
||||
}
|
||||
finally {
|
||||
cancellationToken = undefined;
|
||||
}
|
||||
|
||||
function addUnusedDiagnostics() {
|
||||
checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(file), (kind, diag) => {
|
||||
if (!unusedIsError(kind)) {
|
||||
diagnostics.push({ ...diag, category: DiagnosticCategory.Suggestion });
|
||||
(diagnostics || (diagnostics = [])).push({ ...diag, category: DiagnosticCategory.Suggestion });
|
||||
}
|
||||
});
|
||||
return diagnostics;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -889,11 +902,17 @@ namespace ts {
|
||||
return result;
|
||||
}
|
||||
|
||||
function mergeSymbol(target: Symbol, source: Symbol) {
|
||||
/**
|
||||
* Note: if target is transient, then it is mutable, and mergeSymbol with both mutate and return it.
|
||||
* If target is not transient, mergeSymbol will produce a transient clone, mutate that and return it.
|
||||
*/
|
||||
function mergeSymbol(target: Symbol, source: Symbol): Symbol {
|
||||
if (!(target.flags & getExcludedSymbolFlags(source.flags)) ||
|
||||
(source.flags | target.flags) & SymbolFlags.JSContainer) {
|
||||
const targetValueDeclaration = target.valueDeclaration;
|
||||
Debug.assert(!!(target.flags & SymbolFlags.Transient));
|
||||
Debug.assert(source !== target);
|
||||
if (!(target.flags & SymbolFlags.Transient)) {
|
||||
target = cloneSymbol(target);
|
||||
}
|
||||
// Javascript static-property-assignment declarations always merge, even though they are also values
|
||||
if (source.flags & SymbolFlags.ValueModule && target.flags & SymbolFlags.ValueModule && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
|
||||
// reset flag when merging instantiated module into value module that has only const enums
|
||||
@@ -915,18 +934,6 @@ namespace ts {
|
||||
if (!target.exports) target.exports = createSymbolTable();
|
||||
mergeSymbolTable(target.exports, source.exports);
|
||||
}
|
||||
if ((source.flags | target.flags) & SymbolFlags.JSContainer) {
|
||||
const sourceInitializer = getJSInitializerSymbol(source)!;
|
||||
const init = getDeclaredJavascriptInitializer(targetValueDeclaration) || getAssignedJavascriptInitializer(targetValueDeclaration);
|
||||
let targetInitializer = init && init.symbol ? init.symbol : target;
|
||||
if (!(targetInitializer.flags & SymbolFlags.Transient)) {
|
||||
const mergedInitializer = getMergedSymbol(targetInitializer);
|
||||
targetInitializer = mergedInitializer === targetInitializer ? cloneSymbol(targetInitializer) : mergedInitializer;
|
||||
}
|
||||
if (sourceInitializer !== source || targetInitializer !== target) {
|
||||
mergeSymbol(targetInitializer, sourceInitializer);
|
||||
}
|
||||
}
|
||||
recordMergedSymbol(target, source);
|
||||
}
|
||||
else if (target.flags & SymbolFlags.NamespaceModule) {
|
||||
@@ -947,11 +954,12 @@ namespace ts {
|
||||
error(errorNode, message, symbolToString(source));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
function combineSymbolTables(first: SymbolTable | undefined, second: SymbolTable | undefined): SymbolTable | undefined {
|
||||
if (!first || first.size === 0) return second;
|
||||
if (!second || second.size === 0) return first;
|
||||
if (!hasEntries(first)) return second;
|
||||
if (!hasEntries(second)) return first;
|
||||
const combined = createSymbolTable();
|
||||
mergeSymbolTable(combined, first);
|
||||
mergeSymbolTable(combined, second);
|
||||
@@ -960,17 +968,7 @@ namespace ts {
|
||||
|
||||
function mergeSymbolTable(target: SymbolTable, source: SymbolTable) {
|
||||
source.forEach((sourceSymbol, id) => {
|
||||
let targetSymbol = target.get(id);
|
||||
if (!targetSymbol) {
|
||||
target.set(id, sourceSymbol);
|
||||
}
|
||||
else {
|
||||
if (!(targetSymbol.flags & SymbolFlags.Transient)) {
|
||||
targetSymbol = cloneSymbol(targetSymbol);
|
||||
target.set(id, targetSymbol);
|
||||
}
|
||||
mergeSymbol(targetSymbol, sourceSymbol);
|
||||
}
|
||||
target.set(id, target.has(id) ? mergeSymbol(target.get(id)!, sourceSymbol) : sourceSymbol);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1000,10 +998,7 @@ namespace ts {
|
||||
// obtain item referenced by 'export='
|
||||
mainModule = resolveExternalModuleSymbol(mainModule);
|
||||
if (mainModule.flags & SymbolFlags.Namespace) {
|
||||
// if module symbol has already been merged - it is safe to use it.
|
||||
// otherwise clone it
|
||||
mainModule = mainModule.flags & SymbolFlags.Transient ? mainModule : cloneSymbol(mainModule);
|
||||
mergeSymbol(mainModule, moduleAugmentation.symbol);
|
||||
mainModule = mergeSymbol(mainModule, moduleAugmentation.symbol);
|
||||
}
|
||||
else {
|
||||
// moduleName will be a StringLiteral since this is not `declare global`.
|
||||
@@ -1463,9 +1458,8 @@ namespace ts {
|
||||
case SyntaxKind.JSDocTypedefTag:
|
||||
case SyntaxKind.JSDocCallbackTag:
|
||||
// js type aliases do not resolve names from their host, so skip past it
|
||||
lastLocation = location;
|
||||
location = getJSDocHost(location).parent;
|
||||
continue;
|
||||
location = getJSDocHost(location);
|
||||
break;
|
||||
}
|
||||
if (isSelfReferenceLocation(location)) {
|
||||
lastSelfReferenceLocation = location;
|
||||
@@ -1789,7 +1783,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function isSyntacticDefault(node: Node) {
|
||||
return ((isExportAssignment(node) && !node.isExportEquals) || hasModifier(node, ModifierFlags.Default));
|
||||
return ((isExportAssignment(node) && !node.isExportEquals) || hasModifier(node, ModifierFlags.Default) || isExportSpecifier(node));
|
||||
}
|
||||
|
||||
function canHaveSyntheticDefault(file: SourceFile | undefined, moduleSymbol: Symbol, dontResolveAlias: boolean) {
|
||||
@@ -2124,14 +2118,6 @@ namespace ts {
|
||||
return namespace;
|
||||
}
|
||||
if (isInJavaScriptFile(name)) {
|
||||
const initializer = getDeclaredJavascriptInitializer(namespace.valueDeclaration) || getAssignedJavascriptInitializer(namespace.valueDeclaration);
|
||||
if (initializer) {
|
||||
namespace = getSymbolOfNode(initializer)!;
|
||||
}
|
||||
// Currently, IIFEs may not have a symbol and we don't know about their contents. Give up in this case.
|
||||
if (!namespace) {
|
||||
return undefined;
|
||||
}
|
||||
if (namespace.valueDeclaration &&
|
||||
isVariableDeclaration(namespace.valueDeclaration) &&
|
||||
namespace.valueDeclaration.initializer &&
|
||||
@@ -2324,14 +2310,7 @@ namespace ts {
|
||||
}
|
||||
moduleSymbol.exports!.forEach((s, name) => {
|
||||
if (name === InternalSymbolName.ExportEquals) return;
|
||||
if (!merged.exports!.has(name)) {
|
||||
merged.exports!.set(name, s);
|
||||
}
|
||||
else {
|
||||
const ms = cloneSymbol(merged.exports!.get(name)!);
|
||||
mergeSymbol(ms, s);
|
||||
merged.exports!.set(name, ms);
|
||||
}
|
||||
merged.exports!.set(name, merged.exports!.has(name) ? mergeSymbol(merged.exports!.get(name)!, s) : s);
|
||||
});
|
||||
return merged;
|
||||
}
|
||||
@@ -2533,6 +2512,46 @@ namespace ts {
|
||||
return getMergedSymbol(symbol.parent && getLateBoundSymbol(symbol.parent));
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to find the symbol corresponding to the container a symbol is in - usually this
|
||||
* is just its' `.parent`, but for locals, this value is `undefined`
|
||||
*/
|
||||
function getContainerOfSymbol(symbol: Symbol): Symbol | undefined {
|
||||
const container = getParentOfSymbol(symbol);
|
||||
if (container) {
|
||||
return container;
|
||||
}
|
||||
const candidate = forEach(symbol.declarations, d => !isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent) ? getSymbolOfNode(d.parent) : undefined);
|
||||
if (!candidate) {
|
||||
return undefined;
|
||||
}
|
||||
const alias = getAliasForSymbolInContainer(candidate, symbol);
|
||||
return alias ? candidate : undefined;
|
||||
}
|
||||
|
||||
function getAliasForSymbolInContainer(container: Symbol, symbol: Symbol) {
|
||||
if (container === getParentOfSymbol(symbol)) {
|
||||
// fast path, `symbol` is either already the alias or isn't aliased
|
||||
return symbol;
|
||||
}
|
||||
const exports = getExportsOfSymbol(container);
|
||||
const quick = exports.get(symbol.escapedName);
|
||||
if (quick && symbolRefersToTarget(quick)) {
|
||||
return quick;
|
||||
}
|
||||
return forEachEntry(exports, exported => {
|
||||
if (symbolRefersToTarget(exported)) {
|
||||
return exported;
|
||||
}
|
||||
});
|
||||
|
||||
function symbolRefersToTarget(s: Symbol) {
|
||||
if (s === symbol || resolveSymbol(s) === symbol || resolveSymbol(s) === resolveSymbol(symbol)) {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getExportSymbolOfValueSymbolIfExported(symbol: Symbol): Symbol;
|
||||
function getExportSymbolOfValueSymbolIfExported(symbol: Symbol | undefined): Symbol | undefined;
|
||||
function getExportSymbolOfValueSymbolIfExported(symbol: Symbol | undefined): Symbol | undefined {
|
||||
@@ -2838,7 +2857,7 @@ namespace ts {
|
||||
// But it can't, hence the accessible is going to be undefined, but that doesn't mean m.c is inaccessible
|
||||
// It is accessible if the parent m is accessible because then m.c can be accessed through qualification
|
||||
meaningToLook = getQualifiedLeftMeaning(meaning);
|
||||
symbol = getParentOfSymbol(symbol);
|
||||
symbol = getContainerOfSymbol(symbol);
|
||||
}
|
||||
|
||||
// This could be a symbol that is not exported in the external module
|
||||
@@ -3729,12 +3748,12 @@ namespace ts {
|
||||
needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
|
||||
|
||||
// Go up and add our parent.
|
||||
const parent = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
|
||||
const parent = getContainerOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
|
||||
if (parent) {
|
||||
const parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), /*endOfChain*/ false);
|
||||
if (parentChain) {
|
||||
parentSymbol = parent;
|
||||
accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [symbol]);
|
||||
accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent, symbol) || symbol]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4065,7 +4084,8 @@ namespace ts {
|
||||
// ambient module, just use declaration/symbol name (fallthrough)
|
||||
}
|
||||
else {
|
||||
return `"${getResolvedExternalModuleName(context!.tracker.moduleResolverHost!, file, getSourceFileOfNode(getOriginalNode(context!.enclosingDeclaration)))}"`;
|
||||
const contextFile = getSourceFileOfNode(getOriginalNode(context!.enclosingDeclaration))!;
|
||||
return `"${file.moduleName || moduleSpecifiers.getModuleSpecifier(compilerOptions, contextFile, contextFile.path, file.path, context!.tracker.moduleResolverHost!)}"`;
|
||||
}
|
||||
}
|
||||
const declaration = symbol.declarations[0];
|
||||
@@ -4926,6 +4946,8 @@ namespace ts {
|
||||
else if (isJSDocPropertyLikeTag(declaration)
|
||||
|| isPropertyAccessExpression(declaration)
|
||||
|| isIdentifier(declaration)
|
||||
|| isClassDeclaration(declaration)
|
||||
|| isFunctionDeclaration(declaration)
|
||||
|| (isMethodDeclaration(declaration) && !isObjectLiteralMethod(declaration))
|
||||
|| isMethodSignature(declaration)) {
|
||||
|
||||
@@ -4955,7 +4977,7 @@ namespace ts {
|
||||
type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true);
|
||||
}
|
||||
else {
|
||||
return Debug.fail("Unhandled declaration kind! " + Debug.showSyntaxKind(declaration));
|
||||
return Debug.fail("Unhandled declaration kind! " + Debug.showSyntaxKind(declaration) + " for " + Debug.showSymbol(symbol));
|
||||
}
|
||||
|
||||
if (!popTypeResolution()) {
|
||||
@@ -5057,8 +5079,25 @@ namespace ts {
|
||||
}
|
||||
|
||||
function getTypeOfFuncClassEnumModule(symbol: Symbol): Type {
|
||||
const links = getSymbolLinks(symbol);
|
||||
let links = getSymbolLinks(symbol);
|
||||
if (!links.type) {
|
||||
const jsDeclaration = getDeclarationOfJSInitializer(symbol.valueDeclaration);
|
||||
if (jsDeclaration) {
|
||||
const jsSymbol = getSymbolOfNode(jsDeclaration);
|
||||
if (jsSymbol && (hasEntries(jsSymbol.exports) || hasEntries(jsSymbol.members))) {
|
||||
symbol = cloneSymbol(symbol);
|
||||
// note:we overwrite links because we just cloned the symbol
|
||||
links = symbol as TransientSymbol;
|
||||
if (hasEntries(jsSymbol.exports)) {
|
||||
symbol.exports = symbol.exports || createSymbolTable();
|
||||
mergeSymbolTable(symbol.exports, jsSymbol.exports);
|
||||
}
|
||||
if (hasEntries(jsSymbol.members)) {
|
||||
symbol.members = symbol.members || createSymbolTable();
|
||||
mergeSymbolTable(symbol.members, jsSymbol.members);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (symbol.flags & SymbolFlags.Module && isShorthandAmbientModuleSymbol(symbol)) {
|
||||
links.type = anyType;
|
||||
}
|
||||
@@ -7406,18 +7445,17 @@ namespace ts {
|
||||
const result: Signature[] = [];
|
||||
for (let i = 0; i < symbol.declarations.length; i++) {
|
||||
const decl = symbol.declarations[i];
|
||||
const node = isPropertyAccessExpression(decl) ? getAssignedJavascriptInitializer(decl)! : decl; // TODO: GH#18217
|
||||
if (!isFunctionLike(node)) continue;
|
||||
if (!isFunctionLike(decl)) continue;
|
||||
// Don't include signature if node is the implementation of an overloaded function. A node is considered
|
||||
// an implementation node if it has a body and the previous node is of the same kind and immediately
|
||||
// precedes the implementation node (i.e. has the same parent and ends where the implementation starts).
|
||||
if (i > 0 && (node as FunctionLikeDeclaration).body) {
|
||||
if (i > 0 && (decl as FunctionLikeDeclaration).body) {
|
||||
const previous = symbol.declarations[i - 1];
|
||||
if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) {
|
||||
if (decl.parent === previous.parent && decl.kind === previous.kind && decl.pos === previous.end) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
result.push(getSignatureFromDeclaration(node));
|
||||
result.push(getSignatureFromDeclaration(decl));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -8844,7 +8882,9 @@ namespace ts {
|
||||
return type.simplified === circularConstraintType ? type : type.simplified;
|
||||
}
|
||||
type.simplified = circularConstraintType;
|
||||
const objectType = type.objectType;
|
||||
// We recursively simplify the object type as it may in turn be an indexed access type. For example, with
|
||||
// '{ [P in T]: { [Q in U]: number } }[T][U]' we want to first simplify the inner indexed access type.
|
||||
const objectType = getSimplifiedType(type.objectType);
|
||||
if (objectType.flags & TypeFlags.Intersection && isGenericObjectType(objectType)) {
|
||||
// Given an indexed access type T[K], if T is an intersection containing one or more generic types and one or
|
||||
// more object types with only a string index signature, e.g. '(U & V & { [x: string]: D })[K]', return a
|
||||
@@ -9165,12 +9205,13 @@ namespace ts {
|
||||
}
|
||||
|
||||
function resolveImportSymbolType(node: ImportTypeNode, links: NodeLinks, symbol: Symbol, meaning: SymbolFlags) {
|
||||
links.resolvedSymbol = symbol;
|
||||
const resolvedSymbol = resolveSymbol(symbol);
|
||||
links.resolvedSymbol = resolvedSymbol;
|
||||
if (meaning === SymbolFlags.Value) {
|
||||
return links.resolvedType = getTypeOfSymbol(symbol);
|
||||
return links.resolvedType = getTypeOfSymbol(symbol); // intentionally doesn't use resolved symbol so type is cached as expected on the alias
|
||||
}
|
||||
else {
|
||||
return links.resolvedType = getTypeReferenceType(node, symbol);
|
||||
return links.resolvedType = getTypeReferenceType(node, resolvedSymbol); // getTypeReferenceType doesn't handle aliases - it must get the resolved symbol
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14075,11 +14116,14 @@ namespace ts {
|
||||
if (operator === SyntaxKind.ExclamationEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken) {
|
||||
assumeTrue = !assumeTrue;
|
||||
}
|
||||
if (type.flags & TypeFlags.Any && literal.text === "function") {
|
||||
return type;
|
||||
}
|
||||
if (assumeTrue && !(type.flags & TypeFlags.Union)) {
|
||||
// We narrow a non-union type to an exact primitive type if the non-union type
|
||||
// is a supertype of that primitive type. For example, type 'any' can be narrowed
|
||||
// to one of the primitive types.
|
||||
const targetType = typeofTypesByName.get(literal.text);
|
||||
const targetType = literal.text === "function" ? globalFunctionType : typeofTypesByName.get(literal.text);
|
||||
if (targetType) {
|
||||
if (isTypeSubtypeOf(targetType, type)) {
|
||||
return targetType;
|
||||
@@ -15259,7 +15303,7 @@ namespace ts {
|
||||
// expression has no contextual type, the right operand is contextually typed by the type of the left operand,
|
||||
// except for the special case of Javascript declarations of the form `namespace.prop = namespace.prop || {}`
|
||||
const type = getContextualType(binaryExpression);
|
||||
return !type && node === right && !getDeclaredJavascriptInitializer(binaryExpression.parent) && !getAssignedJavascriptInitializer(binaryExpression) ?
|
||||
return !type && node === right && !isDefaultedJavascriptInitializer(binaryExpression) ?
|
||||
getTypeOfExpression(left) : type;
|
||||
case SyntaxKind.AmpersandAmpersandToken:
|
||||
case SyntaxKind.CommaToken:
|
||||
@@ -15268,6 +15312,7 @@ namespace ts {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
// In an assignment expression, the right operand is contextually typed by the type of the left operand.
|
||||
// Don't do this for special property assignments to avoid circularity.
|
||||
function isContextSensitiveAssignment(binaryExpression: BinaryExpression): boolean {
|
||||
@@ -15935,13 +15980,16 @@ namespace ts {
|
||||
let hasComputedStringProperty = false;
|
||||
let hasComputedNumberProperty = false;
|
||||
|
||||
if (isInJSFile && node.properties.length === 0) {
|
||||
// an empty JS object literal that nonetheless has members is a JS namespace
|
||||
const symbol = getSymbolOfNode(node);
|
||||
if (symbol.exports) {
|
||||
propertiesTable = symbol.exports;
|
||||
symbol.exports.forEach(symbol => propertiesArray.push(getMergedSymbol(symbol)));
|
||||
return createObjectLiteralType();
|
||||
if (isInJSFile) {
|
||||
const decl = getDeclarationOfJSInitializer(node);
|
||||
if (decl) {
|
||||
// a JS object literal whose declaration's symbol has exports is a JS namespace
|
||||
const symbol = getMergedSymbol(decl.symbol);
|
||||
if (symbol && hasEntries(symbol.exports)) {
|
||||
propertiesTable = symbol.exports;
|
||||
symbol.exports.forEach(symbol => propertiesArray.push(getMergedSymbol(symbol)));
|
||||
return createObjectLiteralType();
|
||||
}
|
||||
}
|
||||
}
|
||||
propertiesTable = createSymbolTable();
|
||||
@@ -17335,88 +17383,11 @@ namespace ts {
|
||||
* and 1 insertion/deletion at 3 characters)
|
||||
*/
|
||||
function getSpellingSuggestionForName(name: string, symbols: Symbol[], meaning: SymbolFlags): Symbol | undefined {
|
||||
const maximumLengthDifference = Math.min(2, Math.floor(name.length * 0.34));
|
||||
let bestDistance = Math.floor(name.length * 0.4) + 1; // If the best result isn't better than this, don't bother.
|
||||
let bestCandidate: Symbol | undefined;
|
||||
let justCheckExactMatches = false;
|
||||
const nameLowerCase = name.toLowerCase();
|
||||
for (const candidate of symbols) {
|
||||
return getSpellingSuggestion(name, symbols, getCandidateName);
|
||||
function getCandidateName(candidate: Symbol) {
|
||||
const candidateName = symbolName(candidate);
|
||||
if (candidateName.charCodeAt(0) === CharacterCodes.doubleQuote
|
||||
|| !(candidate.flags & meaning && Math.abs(candidateName.length - nameLowerCase.length) <= maximumLengthDifference)) {
|
||||
continue;
|
||||
}
|
||||
const candidateNameLowerCase = candidateName.toLowerCase();
|
||||
if (candidateNameLowerCase === nameLowerCase) {
|
||||
return candidate;
|
||||
}
|
||||
if (justCheckExactMatches) {
|
||||
continue;
|
||||
}
|
||||
if (candidateName.length < 3) {
|
||||
// Don't bother, user would have noticed a 2-character name having an extra character
|
||||
continue;
|
||||
}
|
||||
// Only care about a result better than the best so far.
|
||||
const distance = levenshteinWithMax(nameLowerCase, candidateNameLowerCase, bestDistance - 1);
|
||||
if (distance === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (distance < 3) {
|
||||
justCheckExactMatches = true;
|
||||
bestCandidate = candidate;
|
||||
}
|
||||
else {
|
||||
Debug.assert(distance < bestDistance); // Else `levenshteinWithMax` should return undefined
|
||||
bestDistance = distance;
|
||||
bestCandidate = candidate;
|
||||
}
|
||||
return !startsWith(candidateName, "\"") && candidate.flags & meaning ? candidateName : undefined;
|
||||
}
|
||||
return bestCandidate;
|
||||
}
|
||||
|
||||
function levenshteinWithMax(s1: string, s2: string, max: number): number | undefined {
|
||||
let previous = new Array(s2.length + 1);
|
||||
let current = new Array(s2.length + 1);
|
||||
/** Represents any value > max. We don't care about the particular value. */
|
||||
const big = max + 1;
|
||||
|
||||
for (let i = 0; i <= s2.length; i++) {
|
||||
previous[i] = i;
|
||||
}
|
||||
|
||||
for (let i = 1; i <= s1.length; i++) {
|
||||
const c1 = s1.charCodeAt(i - 1);
|
||||
const minJ = i > max ? i - max : 1;
|
||||
const maxJ = s2.length > max + i ? max + i : s2.length;
|
||||
current[0] = i;
|
||||
/** Smallest value of the matrix in the ith column. */
|
||||
let colMin = i;
|
||||
for (let j = 1; j < minJ; j++) {
|
||||
current[j] = big;
|
||||
}
|
||||
for (let j = minJ; j <= maxJ; j++) {
|
||||
const dist = c1 === s2.charCodeAt(j - 1)
|
||||
? previous[j - 1]
|
||||
: Math.min(/*delete*/ previous[j] + 1, /*insert*/ current[j - 1] + 1, /*substitute*/ previous[j - 1] + 2);
|
||||
current[j] = dist;
|
||||
colMin = Math.min(colMin, dist);
|
||||
}
|
||||
for (let j = maxJ + 1; j <= s2.length; j++) {
|
||||
current[j] = big;
|
||||
}
|
||||
if (colMin > max) {
|
||||
// Give up -- everything in this column is > max and it can't get better in future columns.
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const temp = previous;
|
||||
previous = current;
|
||||
current = temp;
|
||||
}
|
||||
|
||||
const res = previous[s2.length];
|
||||
return res > max ? undefined : res;
|
||||
}
|
||||
|
||||
function markPropertyAsReferenced(prop: Symbol, nodeForCheckWriteOnly: Node | undefined, isThisAccess: boolean) {
|
||||
@@ -18636,6 +18607,7 @@ namespace ts {
|
||||
if (node.expression.kind === SyntaxKind.SuperKeyword) {
|
||||
const superType = checkSuperExpression(node.expression);
|
||||
if (isTypeAny(superType)) {
|
||||
forEach(node.arguments, checkExpression); // Still visit arguments so they get marked for visibility, etc
|
||||
return anySignature;
|
||||
}
|
||||
if (superType !== errorType) {
|
||||
@@ -19043,10 +19015,6 @@ namespace ts {
|
||||
}
|
||||
|
||||
function getJavaScriptClassType(symbol: Symbol): Type | undefined {
|
||||
const initializer = getDeclaredJavascriptInitializer(symbol.valueDeclaration);
|
||||
if (initializer) {
|
||||
symbol = getSymbolOfNode(initializer)!;
|
||||
}
|
||||
let inferred: Type | undefined;
|
||||
if (isJavaScriptConstructor(symbol.valueDeclaration)) {
|
||||
inferred = getInferredClassType(symbol);
|
||||
@@ -19157,7 +19125,17 @@ namespace ts {
|
||||
if (returnType.flags & TypeFlags.ESSymbolLike && isSymbolOrSymbolForCall(node)) {
|
||||
return getESSymbolLikeTypeForNode(walkUpParenthesizedExpressions(node.parent));
|
||||
}
|
||||
return returnType;
|
||||
let jsAssignmentType: Type | undefined;
|
||||
if (isInJavaScriptFile(node)) {
|
||||
const decl = getDeclarationOfJSInitializer(node);
|
||||
if (decl) {
|
||||
const jsSymbol = getSymbolOfNode(decl);
|
||||
if (jsSymbol && hasEntries(jsSymbol.exports)) {
|
||||
jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, emptyArray, emptyArray, jsObjectLiteralIndexInfo, undefined);
|
||||
}
|
||||
}
|
||||
}
|
||||
return jsAssignmentType ? getIntersectionType([returnType, jsAssignmentType]) : returnType;
|
||||
}
|
||||
|
||||
function isSymbolOrSymbolForCall(node: Node) {
|
||||
@@ -20653,13 +20631,12 @@ namespace ts {
|
||||
}
|
||||
|
||||
function checkDeclarationInitializer(declaration: HasExpressionInitializer) {
|
||||
const inJs = isInJavaScriptFile(declaration);
|
||||
const initializer = inJs && getDeclaredJavascriptInitializer(declaration) || declaration.initializer!;
|
||||
const initializer = getEffectiveInitializer(declaration)!;
|
||||
const type = getTypeOfExpression(initializer, /*cache*/ true);
|
||||
const widened = getCombinedNodeFlags(declaration) & NodeFlags.Const ||
|
||||
(getCombinedModifierFlags(declaration) & ModifierFlags.Readonly && !isParameterPropertyDeclaration(declaration)) ||
|
||||
isTypeAssertion(initializer) ? type : getWidenedLiteralType(type);
|
||||
if (inJs) {
|
||||
if (isInJavaScriptFile(declaration)) {
|
||||
if (widened.flags & TypeFlags.Nullable) {
|
||||
if (noImplicitAny) {
|
||||
reportImplicitAnyError(declaration, anyType);
|
||||
@@ -22737,7 +22714,7 @@ namespace ts {
|
||||
function errorUnusedLocal(declaration: Declaration, name: string, addDiagnostic: AddUnusedDiagnostic) {
|
||||
const node = getNameOfDeclaration(declaration) || declaration;
|
||||
const message = isTypeDeclaration(declaration) ? Diagnostics._0_is_declared_but_never_used : Diagnostics._0_is_declared_but_its_value_is_never_read;
|
||||
addDiagnostic(UnusedKind.Local, createDiagnosticForNodeSpan(getSourceFileOfNode(declaration), declaration, node, message, name));
|
||||
addDiagnostic(UnusedKind.Local, createDiagnosticForNode(node, message, name));
|
||||
}
|
||||
|
||||
function parameterNameStartsWithUnderscore(parameterName: DeclarationName) {
|
||||
@@ -23285,8 +23262,8 @@ namespace ts {
|
||||
if (node === symbol.valueDeclaration) {
|
||||
// Node is the primary declaration of the symbol, just validate the initializer
|
||||
// Don't validate for-in initializer as it is already an error
|
||||
if (node.initializer && node.parent.parent.kind !== SyntaxKind.ForInStatement) {
|
||||
const initializer = isInJavaScriptFile(node) && getDeclaredJavascriptInitializer(node) || node.initializer;
|
||||
const initializer = getEffectiveInitializer(node);
|
||||
if (initializer && node.parent.parent.kind !== SyntaxKind.ForInStatement) {
|
||||
checkTypeAssignableTo(checkExpressionCached(initializer), type, node, /*headMessage*/ undefined);
|
||||
checkParameterInitializer(node);
|
||||
}
|
||||
@@ -28369,9 +28346,9 @@ namespace ts {
|
||||
}
|
||||
|
||||
function checkGrammarConstructorTypeParameters(node: ConstructorDeclaration) {
|
||||
const typeParameters = getEffectiveTypeParameterDeclarations(node);
|
||||
if (isNodeArray(typeParameters)) {
|
||||
const { pos, end } = typeParameters;
|
||||
const jsdocTypeParameters = isInJavaScriptFile(node) && getJSDocTypeParameterDeclarations(node);
|
||||
if (node.typeParameters || jsdocTypeParameters && jsdocTypeParameters.length) {
|
||||
const { pos, end } = node.typeParameters || jsdocTypeParameters && jsdocTypeParameters[0] || node;
|
||||
return grammarErrorAtPos(node, pos, end - pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,66 @@
|
||||
namespace ts {
|
||||
/* @internal */
|
||||
export const compileOnSaveCommandLineOption: CommandLineOption = { name: "compileOnSave", type: "boolean" };
|
||||
|
||||
// NOTE: The order here is important to default lib ordering as entries will have the same
|
||||
// order in the generated program (see `getDefaultLibPriority` in program.ts). This
|
||||
// order also affects overload resolution when a type declared in one lib is
|
||||
// augmented in another lib.
|
||||
const libEntries: [string, string][] = [
|
||||
// JavaScript only
|
||||
["es5", "lib.es5.d.ts"],
|
||||
["es6", "lib.es2015.d.ts"],
|
||||
["es2015", "lib.es2015.d.ts"],
|
||||
["es7", "lib.es2016.d.ts"],
|
||||
["es2016", "lib.es2016.d.ts"],
|
||||
["es2017", "lib.es2017.d.ts"],
|
||||
["es2018", "lib.es2018.d.ts"],
|
||||
["esnext", "lib.esnext.d.ts"],
|
||||
// Host only
|
||||
["dom", "lib.dom.d.ts"],
|
||||
["dom.iterable", "lib.dom.iterable.d.ts"],
|
||||
["webworker", "lib.webworker.d.ts"],
|
||||
["webworker.importscripts", "lib.webworker.importscripts.d.ts"],
|
||||
["scripthost", "lib.scripthost.d.ts"],
|
||||
// ES2015 Or ESNext By-feature options
|
||||
["es2015.core", "lib.es2015.core.d.ts"],
|
||||
["es2015.collection", "lib.es2015.collection.d.ts"],
|
||||
["es2015.generator", "lib.es2015.generator.d.ts"],
|
||||
["es2015.iterable", "lib.es2015.iterable.d.ts"],
|
||||
["es2015.promise", "lib.es2015.promise.d.ts"],
|
||||
["es2015.proxy", "lib.es2015.proxy.d.ts"],
|
||||
["es2015.reflect", "lib.es2015.reflect.d.ts"],
|
||||
["es2015.symbol", "lib.es2015.symbol.d.ts"],
|
||||
["es2015.symbol.wellknown", "lib.es2015.symbol.wellknown.d.ts"],
|
||||
["es2016.array.include", "lib.es2016.array.include.d.ts"],
|
||||
["es2017.object", "lib.es2017.object.d.ts"],
|
||||
["es2017.sharedmemory", "lib.es2017.sharedmemory.d.ts"],
|
||||
["es2017.string", "lib.es2017.string.d.ts"],
|
||||
["es2017.intl", "lib.es2017.intl.d.ts"],
|
||||
["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"],
|
||||
["es2018.intl", "lib.es2018.intl.d.ts"],
|
||||
["es2018.promise", "lib.es2018.promise.d.ts"],
|
||||
["es2018.regexp", "lib.es2018.regexp.d.ts"],
|
||||
["esnext.array", "lib.esnext.array.d.ts"],
|
||||
["esnext.symbol", "lib.esnext.symbol.d.ts"],
|
||||
["esnext.asynciterable", "lib.esnext.asynciterable.d.ts"],
|
||||
];
|
||||
|
||||
/**
|
||||
* An array of supported "lib" reference file names used to determine the order for inclusion
|
||||
* when referenced, as well as for spelling suggestions. This ensures the correct ordering for
|
||||
* overload resolution when a type declared in one lib is extended by another.
|
||||
*/
|
||||
/* @internal */
|
||||
export const libs = libEntries.map(entry => entry[0]);
|
||||
|
||||
/**
|
||||
* A map of lib names to lib files. This map is used both for parsing the "lib" command line
|
||||
* option as well as for resolving lib reference directives.
|
||||
*/
|
||||
/* @internal */
|
||||
export const libMap = createMapFromEntries(libEntries);
|
||||
|
||||
/* @internal */
|
||||
export const optionDeclarations: CommandLineOption[] = [
|
||||
// CommandLine only options
|
||||
@@ -122,43 +182,7 @@ namespace ts {
|
||||
type: "list",
|
||||
element: {
|
||||
name: "lib",
|
||||
type: createMapFromTemplate({
|
||||
// JavaScript only
|
||||
"es5": "lib.es5.d.ts",
|
||||
"es6": "lib.es2015.d.ts",
|
||||
"es2015": "lib.es2015.d.ts",
|
||||
"es7": "lib.es2016.d.ts",
|
||||
"es2016": "lib.es2016.d.ts",
|
||||
"es2017": "lib.es2017.d.ts",
|
||||
"es2018": "lib.es2018.d.ts",
|
||||
"esnext": "lib.esnext.d.ts",
|
||||
// Host only
|
||||
"dom": "lib.dom.d.ts",
|
||||
"dom.iterable": "lib.dom.iterable.d.ts",
|
||||
"webworker": "lib.webworker.d.ts",
|
||||
"scripthost": "lib.scripthost.d.ts",
|
||||
// ES2015 Or ESNext By-feature options
|
||||
"es2015.core": "lib.es2015.core.d.ts",
|
||||
"es2015.collection": "lib.es2015.collection.d.ts",
|
||||
"es2015.generator": "lib.es2015.generator.d.ts",
|
||||
"es2015.iterable": "lib.es2015.iterable.d.ts",
|
||||
"es2015.promise": "lib.es2015.promise.d.ts",
|
||||
"es2015.proxy": "lib.es2015.proxy.d.ts",
|
||||
"es2015.reflect": "lib.es2015.reflect.d.ts",
|
||||
"es2015.symbol": "lib.es2015.symbol.d.ts",
|
||||
"es2015.symbol.wellknown": "lib.es2015.symbol.wellknown.d.ts",
|
||||
"es2016.array.include": "lib.es2016.array.include.d.ts",
|
||||
"es2017.object": "lib.es2017.object.d.ts",
|
||||
"es2017.sharedmemory": "lib.es2017.sharedmemory.d.ts",
|
||||
"es2017.string": "lib.es2017.string.d.ts",
|
||||
"es2017.intl": "lib.es2017.intl.d.ts",
|
||||
"es2017.typedarrays": "lib.es2017.typedarrays.d.ts",
|
||||
"es2018.intl": "lib.es2018.intl.d.ts",
|
||||
"es2018.promise": "lib.es2018.promise.d.ts",
|
||||
"es2018.regexp": "lib.es2018.regexp.d.ts",
|
||||
"esnext.array": "lib.esnext.array.d.ts",
|
||||
"esnext.asynciterable": "lib.esnext.asynciterable.d.ts",
|
||||
}),
|
||||
type: libMap
|
||||
},
|
||||
showInSimplifiedHelpView: true,
|
||||
category: Diagnostics.Basic_Options,
|
||||
@@ -937,7 +961,8 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function getOptionFromName(optionName: string, allowShort = false): CommandLineOption | undefined {
|
||||
/** @internal */
|
||||
export function getOptionFromName(optionName: string, allowShort = false): CommandLineOption | undefined {
|
||||
optionName = optionName.toLowerCase();
|
||||
const { optionNameMap, shortOptionNames } = getOptionNameMap();
|
||||
// Try to translate short option names to their full equivalents.
|
||||
|
||||
+140
-6
@@ -59,6 +59,14 @@ namespace ts {
|
||||
return result;
|
||||
}
|
||||
|
||||
export function createMapFromEntries<T>(entries: [string, T][]): Map<T> {
|
||||
const map = createMap<T>();
|
||||
for (const [key, value] of entries) {
|
||||
map.set(key, value);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
export function createMapFromTemplate<T>(template: MapLike<T>): Map<T> {
|
||||
const map: Map<T> = new MapCtr<T>();
|
||||
|
||||
@@ -169,6 +177,10 @@ namespace ts {
|
||||
return array ? array.length : 0;
|
||||
}
|
||||
|
||||
export function hasEntries(map: ReadonlyUnderscoreEscapedMap<any> | undefined): map is ReadonlyUnderscoreEscapedMap<any> {
|
||||
return !!map && !!map.size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterates through 'array' by index and performs the callback on each element of array until the callback
|
||||
* returns a truthy value, then returns that value.
|
||||
@@ -1792,7 +1804,7 @@ namespace ts {
|
||||
* Case-insensitive comparisons compare both strings one code-point at a time using the integer
|
||||
* value of each code-point after applying `toUpperCase` to each string. We always map both
|
||||
* strings to their upper-case form as some unicode characters do not properly round-trip to
|
||||
* lowercase (such as `ẞ` (German sharp capital s)).
|
||||
* lowercase (such as `ẞ` (German sharp capital s)).
|
||||
*/
|
||||
export function compareStringsCaseInsensitive(a: string, b: string) {
|
||||
if (a === b) return Comparison.EqualTo;
|
||||
@@ -1864,7 +1876,7 @@ namespace ts {
|
||||
//
|
||||
// For case insensitive comparisons we always map both strings to their
|
||||
// upper-case form as some unicode characters do not properly round-trip to
|
||||
// lowercase (such as `ẞ` (German sharp capital s)).
|
||||
// lowercase (such as `ẞ` (German sharp capital s)).
|
||||
return (a, b) => compareWithCallback(a, b, compareDictionaryOrder);
|
||||
|
||||
function compareDictionaryOrder(a: string, b: string) {
|
||||
@@ -1989,6 +2001,103 @@ namespace ts {
|
||||
return text1 ? Comparison.GreaterThan : Comparison.LessThan;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a name and a list of names that are *not* equal to the name, return a spelling suggestion if there is one that is close enough.
|
||||
* Names less than length 3 only check for case-insensitive equality, not Levenshtein distance.
|
||||
*
|
||||
* If there is a candidate that's the same except for case, return that.
|
||||
* If there is a candidate that's within one edit of the name, return that.
|
||||
* Otherwise, return the candidate with the smallest Levenshtein distance,
|
||||
* except for candidates:
|
||||
* * With no name
|
||||
* * Whose length differs from the target name by more than 0.34 of the length of the name.
|
||||
* * Whose levenshtein distance is more than 0.4 of the length of the name
|
||||
* (0.4 allows 1 substitution/transposition for every 5 characters,
|
||||
* and 1 insertion/deletion at 3 characters)
|
||||
*/
|
||||
export function getSpellingSuggestion<T>(name: string, candidates: T[], getName: (candidate: T) => string | undefined): T | undefined {
|
||||
const maximumLengthDifference = Math.min(2, Math.floor(name.length * 0.34));
|
||||
let bestDistance = Math.floor(name.length * 0.4) + 1; // If the best result isn't better than this, don't bother.
|
||||
let bestCandidate: T | undefined;
|
||||
let justCheckExactMatches = false;
|
||||
const nameLowerCase = name.toLowerCase();
|
||||
for (const candidate of candidates) {
|
||||
const candidateName = getName(candidate);
|
||||
if (candidateName !== undefined && Math.abs(candidateName.length - nameLowerCase.length) <= maximumLengthDifference) {
|
||||
const candidateNameLowerCase = candidateName.toLowerCase();
|
||||
if (candidateNameLowerCase === nameLowerCase) {
|
||||
return candidate;
|
||||
}
|
||||
if (justCheckExactMatches) {
|
||||
continue;
|
||||
}
|
||||
if (candidateName.length < 3) {
|
||||
// Don't bother, user would have noticed a 2-character name having an extra character
|
||||
continue;
|
||||
}
|
||||
// Only care about a result better than the best so far.
|
||||
const distance = levenshteinWithMax(nameLowerCase, candidateNameLowerCase, bestDistance - 1);
|
||||
if (distance === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (distance < 3) {
|
||||
justCheckExactMatches = true;
|
||||
bestCandidate = candidate;
|
||||
}
|
||||
else {
|
||||
Debug.assert(distance < bestDistance); // Else `levenshteinWithMax` should return undefined
|
||||
bestDistance = distance;
|
||||
bestCandidate = candidate;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bestCandidate;
|
||||
}
|
||||
|
||||
function levenshteinWithMax(s1: string, s2: string, max: number): number | undefined {
|
||||
let previous = new Array(s2.length + 1);
|
||||
let current = new Array(s2.length + 1);
|
||||
/** Represents any value > max. We don't care about the particular value. */
|
||||
const big = max + 1;
|
||||
|
||||
for (let i = 0; i <= s2.length; i++) {
|
||||
previous[i] = i;
|
||||
}
|
||||
|
||||
for (let i = 1; i <= s1.length; i++) {
|
||||
const c1 = s1.charCodeAt(i - 1);
|
||||
const minJ = i > max ? i - max : 1;
|
||||
const maxJ = s2.length > max + i ? max + i : s2.length;
|
||||
current[0] = i;
|
||||
/** Smallest value of the matrix in the ith column. */
|
||||
let colMin = i;
|
||||
for (let j = 1; j < minJ; j++) {
|
||||
current[j] = big;
|
||||
}
|
||||
for (let j = minJ; j <= maxJ; j++) {
|
||||
const dist = c1 === s2.charCodeAt(j - 1)
|
||||
? previous[j - 1]
|
||||
: Math.min(/*delete*/ previous[j] + 1, /*insert*/ current[j - 1] + 1, /*substitute*/ previous[j - 1] + 2);
|
||||
current[j] = dist;
|
||||
colMin = Math.min(colMin, dist);
|
||||
}
|
||||
for (let j = maxJ + 1; j <= s2.length; j++) {
|
||||
current[j] = big;
|
||||
}
|
||||
if (colMin > max) {
|
||||
// Give up -- everything in this column is > max and it can't get better in future columns.
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const temp = previous;
|
||||
previous = current;
|
||||
current = temp;
|
||||
}
|
||||
|
||||
const res = previous[s2.length];
|
||||
return res > max ? undefined : res;
|
||||
}
|
||||
|
||||
export function getEmitScriptTarget(compilerOptions: CompilerOptions) {
|
||||
return compilerOptions.target || ScriptTarget.ES3;
|
||||
}
|
||||
@@ -2588,6 +2697,22 @@ namespace ts {
|
||||
return startsWith(str, prefix) ? str.substr(prefix.length) : str;
|
||||
}
|
||||
|
||||
export function tryRemovePrefix(str: string, prefix: string): string | undefined {
|
||||
return startsWith(str, prefix) ? str.substring(prefix.length) : undefined;
|
||||
}
|
||||
|
||||
export function tryRemoveDirectoryPrefix(path: string, dirPath: string): string | undefined {
|
||||
const a = tryRemovePrefix(path, dirPath);
|
||||
if (a === undefined) return undefined;
|
||||
switch (a.charCodeAt(0)) {
|
||||
case CharacterCodes.slash:
|
||||
case CharacterCodes.backslash:
|
||||
return a.slice(1);
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export function endsWith(str: string, suffix: string): boolean {
|
||||
const expectedPos = str.length - suffix.length;
|
||||
return expectedPos >= 0 && str.indexOf(suffix, expectedPos) === expectedPos;
|
||||
@@ -2597,6 +2722,10 @@ namespace ts {
|
||||
return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : str;
|
||||
}
|
||||
|
||||
export function tryRemoveSuffix(str: string, suffix: string): string | undefined {
|
||||
return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : undefined;
|
||||
}
|
||||
|
||||
export function stringContains(str: string, substring: string): boolean {
|
||||
return str.indexOf(substring) !== -1;
|
||||
}
|
||||
@@ -2797,6 +2926,7 @@ namespace ts {
|
||||
basePaths: ReadonlyArray<string>;
|
||||
}
|
||||
|
||||
/** @param path directory of the tsconfig.json */
|
||||
export function getFileMatcherPatterns(path: string, excludes: ReadonlyArray<string> | undefined, includes: ReadonlyArray<string> | undefined, useCaseSensitiveFileNames: boolean, currentDirectory: string): FileMatcherPatterns {
|
||||
path = normalizePath(path);
|
||||
currentDirectory = normalizePath(currentDirectory);
|
||||
@@ -2811,16 +2941,20 @@ namespace ts {
|
||||
};
|
||||
}
|
||||
|
||||
export function getRegexFromPattern(pattern: string, useCaseSensitiveFileNames: boolean): RegExp {
|
||||
return new RegExp(pattern, useCaseSensitiveFileNames ? "" : "i");
|
||||
}
|
||||
|
||||
/** @param path directory of the tsconfig.json */
|
||||
export function matchFiles(path: string, extensions: ReadonlyArray<string> | undefined, excludes: ReadonlyArray<string> | undefined, includes: ReadonlyArray<string> | undefined, useCaseSensitiveFileNames: boolean, currentDirectory: string, depth: number | undefined, getFileSystemEntries: (path: string) => FileSystemEntries): string[] {
|
||||
path = normalizePath(path);
|
||||
currentDirectory = normalizePath(currentDirectory);
|
||||
|
||||
const patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
|
||||
|
||||
const regexFlag = useCaseSensitiveFileNames ? "" : "i";
|
||||
const includeFileRegexes = patterns.includeFilePatterns && patterns.includeFilePatterns.map(pattern => new RegExp(pattern, regexFlag));
|
||||
const includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag);
|
||||
const excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag);
|
||||
const includeFileRegexes = patterns.includeFilePatterns && patterns.includeFilePatterns.map(pattern => getRegexFromPattern(pattern, useCaseSensitiveFileNames));
|
||||
const includeDirectoryRegex = patterns.includeDirectoryPattern && getRegexFromPattern(patterns.includeDirectoryPattern, useCaseSensitiveFileNames);
|
||||
const excludeRegex = patterns.excludePattern && getRegexFromPattern(patterns.excludePattern, useCaseSensitiveFileNames);
|
||||
|
||||
// Associate an array of results with each include regex. This keeps results in order of the "include" order.
|
||||
// If there are no "includes", then just put everything in results[0].
|
||||
|
||||
@@ -219,6 +219,10 @@
|
||||
"category": "Error",
|
||||
"code": 1068
|
||||
},
|
||||
"Unexpected token. A type parameter name was expected without curly braces.": {
|
||||
"category": "Error",
|
||||
"code": 1069
|
||||
},
|
||||
"'{0}' modifier cannot appear on a type member.": {
|
||||
"category": "Error",
|
||||
"code": 1070
|
||||
@@ -2365,6 +2369,14 @@
|
||||
"category": "Error",
|
||||
"code": 2725
|
||||
},
|
||||
"Cannot find lib definition for '{0}'.": {
|
||||
"category": "Error",
|
||||
"code": 2726
|
||||
},
|
||||
"Cannot find lib definition for '{0}'. Did you mean '{1}'?": {
|
||||
"category": "Error",
|
||||
"code": 2727
|
||||
},
|
||||
|
||||
"Import declaration '{0}' is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
const jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, getOutputExtension(sourceFile, options));
|
||||
const sourceMapFilePath = getSourceMapFilePath(jsFilePath, options);
|
||||
const sourceMapFilePath = isJsonSourceFile(sourceFile) ? undefined : getSourceMapFilePath(jsFilePath, options);
|
||||
// For legacy reasons (ie, we have baselines capturing the behavior), js files don't report a .d.ts output path - this would only matter if `declaration` and `allowJs` were both on, which is currently an error
|
||||
const isJs = isSourceFileJavaScript(sourceFile);
|
||||
const declarationFilePath = ((forceDtsPaths || options.declaration) && !isJs) ? getDeclarationEmitOutputFilePath(sourceFile, host) : undefined;
|
||||
@@ -1458,7 +1458,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
const preferNewLine = node.multiLine ? ListFormat.PreferNewLine : ListFormat.None;
|
||||
const allowTrailingComma = currentSourceFile.languageVersion >= ScriptTarget.ES5 ? ListFormat.AllowTrailingComma : ListFormat.None;
|
||||
const allowTrailingComma = currentSourceFile.languageVersion >= ScriptTarget.ES5 && !isJsonSourceFile(currentSourceFile) ? ListFormat.AllowTrailingComma : ListFormat.None;
|
||||
emitList(node, node.properties, ListFormat.ObjectLiteralExpressionProperties | allowTrailingComma | preferNewLine);
|
||||
|
||||
if (indentedFlag) {
|
||||
|
||||
@@ -2432,12 +2432,13 @@ namespace ts {
|
||||
|
||||
// Top-level nodes
|
||||
|
||||
export function updateSourceFileNode(node: SourceFile, statements: ReadonlyArray<Statement>, isDeclarationFile?: boolean, referencedFiles?: SourceFile["referencedFiles"], typeReferences?: SourceFile["typeReferenceDirectives"], hasNoDefaultLib?: boolean) {
|
||||
export function updateSourceFileNode(node: SourceFile, statements: ReadonlyArray<Statement>, isDeclarationFile?: boolean, referencedFiles?: SourceFile["referencedFiles"], typeReferences?: SourceFile["typeReferenceDirectives"], hasNoDefaultLib?: boolean, libReferences?: SourceFile["libReferenceDirectives"]) {
|
||||
if (
|
||||
node.statements !== statements ||
|
||||
(isDeclarationFile !== undefined && node.isDeclarationFile !== isDeclarationFile) ||
|
||||
(referencedFiles !== undefined && node.referencedFiles !== referencedFiles) ||
|
||||
(typeReferences !== undefined && node.typeReferenceDirectives !== typeReferences) ||
|
||||
(libReferences !== undefined && node.libReferenceDirectives !== libReferences) ||
|
||||
(hasNoDefaultLib !== undefined && node.hasNoDefaultLib !== hasNoDefaultLib)
|
||||
) {
|
||||
const updated = <SourceFile>createSynthesizedNode(SyntaxKind.SourceFile);
|
||||
@@ -2451,6 +2452,7 @@ namespace ts {
|
||||
updated.referencedFiles = referencedFiles === undefined ? node.referencedFiles : referencedFiles;
|
||||
updated.typeReferenceDirectives = typeReferences === undefined ? node.typeReferenceDirectives : typeReferences;
|
||||
updated.hasNoDefaultLib = hasNoDefaultLib === undefined ? node.hasNoDefaultLib : hasNoDefaultLib;
|
||||
updated.libReferenceDirectives = libReferences === undefined ? node.libReferenceDirectives : libReferences;
|
||||
if (node.amdDependencies !== undefined) updated.amdDependencies = node.amdDependencies;
|
||||
if (node.moduleName !== undefined) updated.moduleName = node.moduleName;
|
||||
if (node.languageVariant !== undefined) updated.languageVariant = node.languageVariant;
|
||||
|
||||
@@ -132,10 +132,6 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
export interface GetEffectiveTypeRootsHost {
|
||||
directoryExists?(directoryName: string): boolean;
|
||||
getCurrentDirectory?(): string;
|
||||
}
|
||||
export function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined {
|
||||
if (options.typeRoots) {
|
||||
return options.typeRoots;
|
||||
|
||||
@@ -1,92 +1,129 @@
|
||||
// Used by importFixes to synthesize import module specifiers.
|
||||
/* @internal */
|
||||
namespace ts.moduleSpecifiers {
|
||||
export interface ModuleSpecifierPreferences {
|
||||
importModuleSpecifierPreference?: "relative" | "non-relative";
|
||||
}
|
||||
|
||||
// Note: fromSourceFile is just for usesJsExtensionOnImports
|
||||
export function getModuleSpecifier(compilerOptions: CompilerOptions, fromSourceFile: SourceFile, fromSourceFileName: string, toFileName: string, host: ModuleSpecifierResolutionHost, preferences: ModuleSpecifierPreferences = {}) {
|
||||
const info = getInfo(compilerOptions, fromSourceFile, fromSourceFileName, host);
|
||||
return getGlobalModuleSpecifier(toFileName, info, host, compilerOptions) ||
|
||||
first(getLocalModuleSpecifiers(toFileName, info, compilerOptions, preferences));
|
||||
}
|
||||
|
||||
// For each symlink/original for a module, returns a list of ways to import that file.
|
||||
export function getModuleSpecifiers(
|
||||
moduleSymbol: Symbol,
|
||||
program: Program,
|
||||
importingSourceFile: SourceFile,
|
||||
host: LanguageServiceHost,
|
||||
preferences: UserPreferences,
|
||||
host: ModuleSpecifierResolutionHost,
|
||||
preferences: ModuleSpecifierPreferences,
|
||||
): ReadonlyArray<ReadonlyArray<string>> {
|
||||
const compilerOptions = program.getCompilerOptions();
|
||||
const { baseUrl, paths, rootDirs } = compilerOptions;
|
||||
const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions);
|
||||
const addJsExtension = usesJsExtensionOnImports(importingSourceFile);
|
||||
const getCanonicalFileName = hostGetCanonicalFileName(host);
|
||||
const sourceDirectory = getDirectoryPath(importingSourceFile.fileName);
|
||||
|
||||
const ambient = tryGetModuleNameFromAmbientModule(moduleSymbol);
|
||||
if (ambient) return [[ambient]];
|
||||
|
||||
const modulePaths = getAllModulePaths(program, moduleSymbol.valueDeclaration.getSourceFile());
|
||||
const compilerOptions = program.getCompilerOptions();
|
||||
const info = getInfo(compilerOptions, importingSourceFile, importingSourceFile.fileName, host);
|
||||
const modulePaths = getAllModulePaths(program, getSourceFileOfNode(moduleSymbol.valueDeclaration));
|
||||
|
||||
const global = mapDefined(modulePaths, moduleFileName =>
|
||||
tryGetModuleNameFromTypeRoots(compilerOptions, host, getCanonicalFileName, moduleFileName, addJsExtension) ||
|
||||
tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory) ||
|
||||
rootDirs && tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName));
|
||||
if (global.length) return global.map(g => [g]);
|
||||
const global = mapDefined(modulePaths, moduleFileName => getGlobalModuleSpecifier(moduleFileName, info, host, compilerOptions));
|
||||
return global.length ? global.map(g => [g]) : modulePaths.map(moduleFileName =>
|
||||
getLocalModuleSpecifiers(moduleFileName, info, compilerOptions, preferences));
|
||||
}
|
||||
|
||||
return modulePaths.map(moduleFileName => {
|
||||
const relativePath = removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
|
||||
if (!baseUrl || preferences.importModuleSpecifierPreference === "relative") {
|
||||
return [relativePath];
|
||||
interface Info {
|
||||
readonly moduleResolutionKind: ModuleResolutionKind;
|
||||
readonly addJsExtension: boolean;
|
||||
readonly getCanonicalFileName: GetCanonicalFileName;
|
||||
readonly sourceDirectory: string;
|
||||
}
|
||||
// importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
|
||||
function getInfo(compilerOptions: CompilerOptions, importingSourceFile: SourceFile, importingSourceFileName: string, host: ModuleSpecifierResolutionHost): Info {
|
||||
const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions);
|
||||
const addJsExtension = usesJsExtensionOnImports(importingSourceFile);
|
||||
const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
|
||||
const sourceDirectory = getDirectoryPath(importingSourceFileName);
|
||||
return { moduleResolutionKind, addJsExtension, getCanonicalFileName, sourceDirectory };
|
||||
}
|
||||
|
||||
function getGlobalModuleSpecifier(
|
||||
moduleFileName: string,
|
||||
{ addJsExtension, getCanonicalFileName, sourceDirectory }: Info,
|
||||
host: ModuleSpecifierResolutionHost,
|
||||
compilerOptions: CompilerOptions,
|
||||
) {
|
||||
return tryGetModuleNameFromTypeRoots(compilerOptions, host, getCanonicalFileName, moduleFileName, addJsExtension)
|
||||
|| tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory)
|
||||
|| compilerOptions.rootDirs && tryGetModuleNameFromRootDirs(compilerOptions.rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName);
|
||||
}
|
||||
|
||||
function getLocalModuleSpecifiers(
|
||||
moduleFileName: string,
|
||||
{ moduleResolutionKind, addJsExtension, getCanonicalFileName, sourceDirectory }: Info,
|
||||
compilerOptions: CompilerOptions,
|
||||
preferences: ModuleSpecifierPreferences,
|
||||
) {
|
||||
const { baseUrl, paths } = compilerOptions;
|
||||
|
||||
const relativePath = removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
|
||||
if (!baseUrl || preferences.importModuleSpecifierPreference === "relative") {
|
||||
return [relativePath];
|
||||
}
|
||||
|
||||
const relativeToBaseUrl = getRelativePathIfInDirectory(moduleFileName, baseUrl, getCanonicalFileName);
|
||||
if (!relativeToBaseUrl) {
|
||||
return [relativePath];
|
||||
}
|
||||
|
||||
const importRelativeToBaseUrl = removeExtensionAndIndexPostFix(relativeToBaseUrl, moduleResolutionKind, addJsExtension);
|
||||
if (paths) {
|
||||
const fromPaths = tryGetModuleNameFromPaths(removeFileExtension(relativeToBaseUrl), importRelativeToBaseUrl, paths);
|
||||
if (fromPaths) {
|
||||
return [fromPaths];
|
||||
}
|
||||
}
|
||||
|
||||
const relativeToBaseUrl = getRelativePathIfInDirectory(moduleFileName, baseUrl, getCanonicalFileName);
|
||||
if (!relativeToBaseUrl) {
|
||||
return [relativePath];
|
||||
}
|
||||
if (preferences.importModuleSpecifierPreference === "non-relative") {
|
||||
return [importRelativeToBaseUrl];
|
||||
}
|
||||
|
||||
const importRelativeToBaseUrl = removeExtensionAndIndexPostFix(relativeToBaseUrl, moduleResolutionKind, addJsExtension);
|
||||
if (paths) {
|
||||
const fromPaths = tryGetModuleNameFromPaths(removeFileExtension(relativeToBaseUrl), importRelativeToBaseUrl, paths);
|
||||
if (fromPaths) {
|
||||
return [fromPaths];
|
||||
}
|
||||
}
|
||||
if (preferences.importModuleSpecifierPreference !== undefined) Debug.assertNever(preferences.importModuleSpecifierPreference);
|
||||
|
||||
if (preferences.importModuleSpecifierPreference === "non-relative") {
|
||||
return [importRelativeToBaseUrl];
|
||||
}
|
||||
if (isPathRelativeToParent(relativeToBaseUrl)) {
|
||||
return [relativePath];
|
||||
}
|
||||
|
||||
if (preferences.importModuleSpecifierPreference !== undefined) Debug.assertNever(preferences.importModuleSpecifierPreference);
|
||||
/*
|
||||
Prefer a relative import over a baseUrl import if it doesn't traverse up to baseUrl.
|
||||
|
||||
if (isPathRelativeToParent(relativeToBaseUrl)) {
|
||||
return [relativePath];
|
||||
}
|
||||
Suppose we have:
|
||||
baseUrl = /base
|
||||
sourceDirectory = /base/a/b
|
||||
moduleFileName = /base/foo/bar
|
||||
Then:
|
||||
relativePath = ../../foo/bar
|
||||
getRelativePathNParents(relativePath) = 2
|
||||
pathFromSourceToBaseUrl = ../../
|
||||
getRelativePathNParents(pathFromSourceToBaseUrl) = 2
|
||||
2 < 2 = false
|
||||
In this case we should prefer using the baseUrl path "/a/b" instead of the relative path "../../foo/bar".
|
||||
|
||||
/*
|
||||
Prefer a relative import over a baseUrl import if it doesn't traverse up to baseUrl.
|
||||
|
||||
Suppose we have:
|
||||
baseUrl = /base
|
||||
sourceDirectory = /base/a/b
|
||||
moduleFileName = /base/foo/bar
|
||||
Then:
|
||||
relativePath = ../../foo/bar
|
||||
getRelativePathNParents(relativePath) = 2
|
||||
pathFromSourceToBaseUrl = ../../
|
||||
getRelativePathNParents(pathFromSourceToBaseUrl) = 2
|
||||
2 < 2 = false
|
||||
In this case we should prefer using the baseUrl path "/a/b" instead of the relative path "../../foo/bar".
|
||||
|
||||
Suppose we have:
|
||||
baseUrl = /base
|
||||
sourceDirectory = /base/foo/a
|
||||
moduleFileName = /base/foo/bar
|
||||
Then:
|
||||
relativePath = ../a
|
||||
getRelativePathNParents(relativePath) = 1
|
||||
pathFromSourceToBaseUrl = ../../
|
||||
getRelativePathNParents(pathFromSourceToBaseUrl) = 2
|
||||
1 < 2 = true
|
||||
In this case we should prefer using the relative path "../a" instead of the baseUrl path "foo/a".
|
||||
*/
|
||||
const pathFromSourceToBaseUrl = ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, baseUrl, getCanonicalFileName));
|
||||
const relativeFirst = getRelativePathNParents(relativePath) < getRelativePathNParents(pathFromSourceToBaseUrl);
|
||||
return relativeFirst ? [relativePath, importRelativeToBaseUrl] : [importRelativeToBaseUrl, relativePath];
|
||||
});
|
||||
Suppose we have:
|
||||
baseUrl = /base
|
||||
sourceDirectory = /base/foo/a
|
||||
moduleFileName = /base/foo/bar
|
||||
Then:
|
||||
relativePath = ../a
|
||||
getRelativePathNParents(relativePath) = 1
|
||||
pathFromSourceToBaseUrl = ../../
|
||||
getRelativePathNParents(pathFromSourceToBaseUrl) = 2
|
||||
1 < 2 = true
|
||||
In this case we should prefer using the relative path "../a" instead of the baseUrl path "foo/a".
|
||||
*/
|
||||
const pathFromSourceToBaseUrl = ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, baseUrl, getCanonicalFileName));
|
||||
const relativeFirst = getRelativePathNParents(relativePath) < getRelativePathNParents(pathFromSourceToBaseUrl);
|
||||
return relativeFirst ? [relativePath, importRelativeToBaseUrl] : [importRelativeToBaseUrl, relativePath];
|
||||
}
|
||||
|
||||
function usesJsExtensionOnImports({ imports }: SourceFile): boolean {
|
||||
@@ -176,7 +213,7 @@ namespace ts.moduleSpecifiers {
|
||||
function tryGetModuleNameAsNodeModule(
|
||||
options: CompilerOptions,
|
||||
moduleFileName: string,
|
||||
host: LanguageServiceHost,
|
||||
host: ModuleSpecifierResolutionHost,
|
||||
getCanonicalFileName: (file: string) => string,
|
||||
sourceDirectory: string,
|
||||
): string | undefined {
|
||||
@@ -222,7 +259,8 @@ namespace ts.moduleSpecifiers {
|
||||
const fullModulePathWithoutExtension = removeFileExtension(path);
|
||||
|
||||
// If the file is /index, it can be imported by its directory name
|
||||
if (getCanonicalFileName(fullModulePathWithoutExtension.substring(parts.fileNameIndex)) === "/index") {
|
||||
// IFF there is not _also_ a file by the same name
|
||||
if (getCanonicalFileName(fullModulePathWithoutExtension.substring(parts.fileNameIndex)) === "/index" && !tryGetAnyFileFromPath(host, fullModulePathWithoutExtension.substring(0, parts.fileNameIndex))) {
|
||||
return fullModulePathWithoutExtension.substring(0, parts.fileNameIndex);
|
||||
}
|
||||
|
||||
@@ -230,6 +268,17 @@ namespace ts.moduleSpecifiers {
|
||||
}
|
||||
}
|
||||
|
||||
function tryGetAnyFileFromPath(host: ModuleSpecifierResolutionHost, path: string) {
|
||||
// We check all js, `node` and `json` extensions in addition to TS, since node module resolution would also choose those over the directory
|
||||
const extensions = getSupportedExtensions({ allowJs: true }, [{ extension: "node", isMixedContent: false }, { extension: "json", isMixedContent: false, scriptKind: ScriptKind.JSON }]);
|
||||
for (const e of extensions) {
|
||||
const fullPath = path + e;
|
||||
if (host.fileExists!(fullPath)) { // TODO: GH#18217
|
||||
return fullPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface NodeModulePathParts {
|
||||
readonly topLevelNodeModulesIndex: number;
|
||||
readonly topLevelPackageNameIndex: number;
|
||||
+148
-184
@@ -4,7 +4,6 @@ namespace ts {
|
||||
Yield = 1 << 0,
|
||||
Await = 1 << 1,
|
||||
Type = 1 << 2,
|
||||
RequireCompleteParameterList = 1 << 3,
|
||||
IgnoreMissingOpenBrace = 1 << 4,
|
||||
JSDoc = 1 << 5,
|
||||
}
|
||||
@@ -717,6 +716,7 @@ namespace ts {
|
||||
initializeState(sourceText, languageVersion, syntaxCursor, ScriptKind.JSON);
|
||||
// Set source file so that errors will be reported with this file name
|
||||
sourceFile = createSourceFile(fileName, ScriptTarget.ES2015, ScriptKind.JSON, /*isDeclaration*/ false);
|
||||
sourceFile.flags = contextFlags;
|
||||
|
||||
// Prime the scanner.
|
||||
nextToken();
|
||||
@@ -1256,8 +1256,8 @@ namespace ts {
|
||||
new TokenConstructor(kind, p, p);
|
||||
}
|
||||
|
||||
function createNodeWithJSDoc(kind: SyntaxKind): Node {
|
||||
const node = createNode(kind);
|
||||
function createNodeWithJSDoc(kind: SyntaxKind, pos?: number): Node {
|
||||
const node = createNode(kind, pos);
|
||||
if (scanner.getTokenFlags() & TokenFlags.PrecedingJSDocComment) {
|
||||
addJSDocComment(<HasJSDoc>node);
|
||||
}
|
||||
@@ -2256,6 +2256,24 @@ namespace ts {
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
// If true, we should abort parsing an error function.
|
||||
function typeHasArrowFunctionBlockingParseError(node: TypeNode): boolean {
|
||||
switch (node.kind) {
|
||||
case SyntaxKind.TypeReference:
|
||||
return nodeIsMissing((node as TypeReferenceNode).typeName);
|
||||
case SyntaxKind.FunctionType:
|
||||
case SyntaxKind.ConstructorType: {
|
||||
const { parameters, type } = node as FunctionOrConstructorTypeNode;
|
||||
// parameters.pos === parameters.end only if we used parseMissingList, else should contain at least `()`
|
||||
return parameters.pos === parameters.end || typeHasArrowFunctionBlockingParseError(type);
|
||||
}
|
||||
case SyntaxKind.ParenthesizedType:
|
||||
return typeHasArrowFunctionBlockingParseError((node as ParenthesizedTypeNode).type);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function parseThisTypePredicate(lhs: ThisTypeNode): TypePredicateNode {
|
||||
nextToken();
|
||||
const node = createNode(SyntaxKind.TypePredicate, lhs.pos) as TypePredicateNode;
|
||||
@@ -2342,7 +2360,7 @@ namespace ts {
|
||||
return finishNode(parameter);
|
||||
}
|
||||
|
||||
function parseJSDocType() {
|
||||
function parseJSDocType(): TypeNode {
|
||||
const dotdotdot = parseOptionalToken(SyntaxKind.DotDotDotToken);
|
||||
let type = parseType();
|
||||
if (dotdotdot) {
|
||||
@@ -2450,6 +2468,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
/**
|
||||
* Note: If returnToken is EqualsGreaterThanToken, `signature.type` will always be defined.
|
||||
* @returns If return type parsing succeeds
|
||||
*/
|
||||
function fillSignature(
|
||||
@@ -2459,12 +2478,12 @@ namespace ts {
|
||||
if (!(flags & SignatureFlags.JSDoc)) {
|
||||
signature.typeParameters = parseTypeParameters();
|
||||
}
|
||||
signature.parameters = parseParameterList(flags)!; // TODO: GH#18217
|
||||
const parametersParsedSuccessfully = parseParameterList(signature, flags);
|
||||
if (shouldParseReturnType(returnToken, !!(flags & SignatureFlags.Type))) {
|
||||
signature.type = parseTypeOrTypePredicate();
|
||||
return signature.type !== undefined;
|
||||
if (typeHasArrowFunctionBlockingParseError(signature.type)) return false;
|
||||
}
|
||||
return true;
|
||||
return parametersParsedSuccessfully;
|
||||
}
|
||||
|
||||
function shouldParseReturnType(returnToken: SyntaxKind.ColonToken | SyntaxKind.EqualsGreaterThanToken, isType: boolean): boolean {
|
||||
@@ -2484,7 +2503,8 @@ namespace ts {
|
||||
return false;
|
||||
}
|
||||
|
||||
function parseParameterList(flags: SignatureFlags) {
|
||||
// Returns true on success.
|
||||
function parseParameterList(signature: SignatureDeclaration, flags: SignatureFlags): boolean {
|
||||
// FormalParameters [Yield,Await]: (modified)
|
||||
// [empty]
|
||||
// FormalParameterList[?Yield,Await]
|
||||
@@ -2498,31 +2518,23 @@ namespace ts {
|
||||
//
|
||||
// SingleNameBinding [Yield,Await]:
|
||||
// BindingIdentifier[?Yield,?Await]Initializer [In, ?Yield,?Await] opt
|
||||
if (parseExpected(SyntaxKind.OpenParenToken)) {
|
||||
const savedYieldContext = inYieldContext();
|
||||
const savedAwaitContext = inAwaitContext();
|
||||
|
||||
setYieldContext(!!(flags & SignatureFlags.Yield));
|
||||
setAwaitContext(!!(flags & SignatureFlags.Await));
|
||||
|
||||
const result = parseDelimitedList(ParsingContext.Parameters, flags & SignatureFlags.JSDoc ? parseJSDocParameter : parseParameter);
|
||||
|
||||
setYieldContext(savedYieldContext);
|
||||
setAwaitContext(savedAwaitContext);
|
||||
|
||||
if (!parseExpected(SyntaxKind.CloseParenToken) && (flags & SignatureFlags.RequireCompleteParameterList)) {
|
||||
// Caller insisted that we had to end with a ) We didn't. So just return
|
||||
// undefined here.
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return result;
|
||||
if (!parseExpected(SyntaxKind.OpenParenToken)) {
|
||||
signature.parameters = createMissingList<ParameterDeclaration>();
|
||||
return false;
|
||||
}
|
||||
|
||||
// We didn't even have an open paren. If the caller requires a complete parameter list,
|
||||
// we definitely can't provide that. However, if they're ok with an incomplete one,
|
||||
// then just return an empty set of parameters.
|
||||
return (flags & SignatureFlags.RequireCompleteParameterList) ? undefined : createMissingList<ParameterDeclaration>();
|
||||
const savedYieldContext = inYieldContext();
|
||||
const savedAwaitContext = inAwaitContext();
|
||||
|
||||
setYieldContext(!!(flags & SignatureFlags.Yield));
|
||||
setAwaitContext(!!(flags & SignatureFlags.Await));
|
||||
|
||||
signature.parameters = parseDelimitedList(ParsingContext.Parameters, flags & SignatureFlags.JSDoc ? parseJSDocParameter : parseParameter);
|
||||
|
||||
setYieldContext(savedYieldContext);
|
||||
setAwaitContext(savedAwaitContext);
|
||||
|
||||
return parseExpected(SyntaxKind.CloseParenToken);
|
||||
}
|
||||
|
||||
function parseTypeMemberSemicolon() {
|
||||
@@ -2771,28 +2783,19 @@ namespace ts {
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function parseParenthesizedType(): ParenthesizedTypeNode {
|
||||
function parseParenthesizedType(): TypeNode {
|
||||
const node = <ParenthesizedTypeNode>createNode(SyntaxKind.ParenthesizedType);
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
node.type = parseType();
|
||||
if (!node.type) {
|
||||
return undefined!; // TODO: GH#18217
|
||||
}
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function parseFunctionOrConstructorType(kind: SyntaxKind): FunctionOrConstructorTypeNode | undefined {
|
||||
const node = <FunctionOrConstructorTypeNode>createNodeWithJSDoc(kind);
|
||||
if (kind === SyntaxKind.ConstructorType) {
|
||||
parseExpected(SyntaxKind.NewKeyword);
|
||||
}
|
||||
if (!fillSignature(SyntaxKind.EqualsGreaterThanToken, SignatureFlags.Type | (sourceFile.languageVariant === LanguageVariant.JSX ? SignatureFlags.RequireCompleteParameterList : 0), node)) {
|
||||
return undefined;
|
||||
}
|
||||
if (!node.parameters) {
|
||||
return undefined;
|
||||
}
|
||||
function parseFunctionOrConstructorType(): TypeNode {
|
||||
const pos = getNodePos();
|
||||
const kind = parseOptional(SyntaxKind.NewKeyword) ? SyntaxKind.ConstructorType : SyntaxKind.FunctionType;
|
||||
const node = <FunctionOrConstructorTypeNode>createNodeWithJSDoc(kind, pos);
|
||||
fillSignature(SyntaxKind.EqualsGreaterThanToken, SignatureFlags.Type, node);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@@ -3133,11 +3136,8 @@ namespace ts {
|
||||
}
|
||||
|
||||
function parseTypeWorker(noConditionalTypes?: boolean): TypeNode {
|
||||
if (isStartOfFunctionType()) {
|
||||
return parseFunctionOrConstructorType(SyntaxKind.FunctionType)!; // TODO: GH#18217
|
||||
}
|
||||
if (token() === SyntaxKind.NewKeyword) {
|
||||
return parseFunctionOrConstructorType(SyntaxKind.ConstructorType)!;
|
||||
if (isStartOfFunctionType() || token() === SyntaxKind.NewKeyword) {
|
||||
return parseFunctionOrConstructorType();
|
||||
}
|
||||
const type = parseUnionTypeOrHigher();
|
||||
if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(SyntaxKind.ExtendsKeyword)) {
|
||||
@@ -3625,12 +3625,7 @@ namespace ts {
|
||||
// a => (b => c)
|
||||
// And think that "(b =>" was actually a parenthesized arrow function with a missing
|
||||
// close paren.
|
||||
if (!fillSignature(SyntaxKind.ColonToken, isAsync | (allowAmbiguity ? SignatureFlags.None : SignatureFlags.RequireCompleteParameterList), node)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// If we couldn't get parameters, we definitely could not parse out an arrow function.
|
||||
if (!node.parameters) {
|
||||
if (!fillSignature(SyntaxKind.ColonToken, isAsync, node) && !allowAmbiguity) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -4147,27 +4142,6 @@ namespace ts {
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function tagNamesAreEquivalent(lhs: JsxTagNameExpression, rhs: JsxTagNameExpression): boolean {
|
||||
if (lhs.kind !== rhs.kind) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (lhs.kind === SyntaxKind.Identifier) {
|
||||
return (<Identifier>lhs).escapedText === (<Identifier>rhs).escapedText;
|
||||
}
|
||||
|
||||
if (lhs.kind === SyntaxKind.ThisKeyword) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
|
||||
// take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression
|
||||
// it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element
|
||||
return (<PropertyAccessExpression>lhs).name.escapedText === (<PropertyAccessExpression>rhs).name.escapedText &&
|
||||
tagNamesAreEquivalent((<PropertyAccessExpression>lhs).expression as JsxTagNameExpression, (<PropertyAccessExpression>rhs).expression as JsxTagNameExpression);
|
||||
}
|
||||
|
||||
|
||||
function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext: boolean): JsxElement | JsxSelfClosingElement | JsxFragment {
|
||||
const opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
|
||||
let result: JsxElement | JsxSelfClosingElement | JsxFragment;
|
||||
@@ -6385,17 +6359,14 @@ namespace ts {
|
||||
indent += text.length;
|
||||
}
|
||||
|
||||
let t = nextJSDocToken();
|
||||
while (t === SyntaxKind.WhitespaceTrivia) {
|
||||
t = nextJSDocToken();
|
||||
}
|
||||
if (t === SyntaxKind.NewLineTrivia) {
|
||||
nextJSDocToken();
|
||||
while (parseOptionalJsdoc(SyntaxKind.WhitespaceTrivia));
|
||||
if (parseOptionalJsdoc(SyntaxKind.NewLineTrivia)) {
|
||||
state = JSDocState.BeginningOfLine;
|
||||
indent = 0;
|
||||
t = nextJSDocToken();
|
||||
}
|
||||
loop: while (true) {
|
||||
switch (t) {
|
||||
switch (token()) {
|
||||
case SyntaxKind.AtToken:
|
||||
if (state === JSDocState.BeginningOfLine || state === JSDocState.SawAsterisk) {
|
||||
removeTrailingNewlines(comments);
|
||||
@@ -6455,12 +6426,11 @@ namespace ts {
|
||||
pushComment(scanner.getTokenText());
|
||||
break;
|
||||
}
|
||||
t = nextJSDocToken();
|
||||
nextJSDocToken();
|
||||
}
|
||||
removeLeadingNewlines(comments);
|
||||
removeTrailingNewlines(comments);
|
||||
result = createJSDocComment();
|
||||
|
||||
});
|
||||
|
||||
return result;
|
||||
@@ -6516,54 +6486,42 @@ namespace ts {
|
||||
|
||||
const tagName = parseJSDocIdentifierName();
|
||||
skipWhitespace();
|
||||
if (!tagName) {
|
||||
return;
|
||||
}
|
||||
|
||||
let tag: JSDocTag | undefined;
|
||||
if (tagName) {
|
||||
switch (tagName.escapedText) {
|
||||
case "augments":
|
||||
case "extends":
|
||||
tag = parseAugmentsTag(atToken, tagName);
|
||||
break;
|
||||
case "class":
|
||||
case "constructor":
|
||||
tag = parseClassTag(atToken, tagName);
|
||||
break;
|
||||
case "arg":
|
||||
case "argument":
|
||||
case "param":
|
||||
return parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter, indent);
|
||||
case "return":
|
||||
case "returns":
|
||||
tag = parseReturnTag(atToken, tagName);
|
||||
break;
|
||||
case "template":
|
||||
tag = parseTemplateTag(atToken, tagName);
|
||||
break;
|
||||
case "type":
|
||||
tag = parseTypeTag(atToken, tagName);
|
||||
break;
|
||||
case "typedef":
|
||||
tag = parseTypedefTag(atToken, tagName, indent);
|
||||
break;
|
||||
case "callback":
|
||||
tag = parseCallbackTag(atToken, tagName, indent);
|
||||
break;
|
||||
default:
|
||||
tag = parseUnknownTag(atToken, tagName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
tag = parseUnknownTag(atToken, tagName);
|
||||
switch (tagName.escapedText) {
|
||||
case "augments":
|
||||
case "extends":
|
||||
tag = parseAugmentsTag(atToken, tagName);
|
||||
break;
|
||||
case "class":
|
||||
case "constructor":
|
||||
tag = parseClassTag(atToken, tagName);
|
||||
break;
|
||||
case "arg":
|
||||
case "argument":
|
||||
case "param":
|
||||
return parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter, indent);
|
||||
case "return":
|
||||
case "returns":
|
||||
tag = parseReturnTag(atToken, tagName);
|
||||
break;
|
||||
case "template":
|
||||
tag = parseTemplateTag(atToken, tagName);
|
||||
break;
|
||||
case "type":
|
||||
tag = parseTypeTag(atToken, tagName);
|
||||
break;
|
||||
case "typedef":
|
||||
tag = parseTypedefTag(atToken, tagName, indent);
|
||||
break;
|
||||
case "callback":
|
||||
tag = parseCallbackTag(atToken, tagName, indent);
|
||||
break;
|
||||
default:
|
||||
tag = parseUnknownTag(atToken, tagName);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!tag) {
|
||||
// a badly malformed tag should not be added to the list of tags
|
||||
return;
|
||||
}
|
||||
if (!tag.comment) {
|
||||
// some tags, like typedef and callback, have already parsed their comments earlier
|
||||
tag.comment = parseTagComments(indent + tag.end - tag.pos);
|
||||
@@ -6793,11 +6751,11 @@ namespace ts {
|
||||
}
|
||||
|
||||
function parsePropertyAccessEntityNameExpression() {
|
||||
let node: Identifier | PropertyAccessEntityNameExpression = parseJSDocIdentifierName(/*createIfMissing*/ true);
|
||||
let node: Identifier | PropertyAccessEntityNameExpression = parseJSDocIdentifierName();
|
||||
while (parseOptional(SyntaxKind.DotToken)) {
|
||||
const prop: PropertyAccessEntityNameExpression = createNode(SyntaxKind.PropertyAccessExpression, node.pos) as PropertyAccessEntityNameExpression;
|
||||
prop.expression = node;
|
||||
prop.name = parseJSDocIdentifierName()!; // TODO: GH#18217
|
||||
prop.name = parseJSDocIdentifierName();
|
||||
node = finishNode(prop);
|
||||
}
|
||||
return node;
|
||||
@@ -6862,9 +6820,11 @@ namespace ts {
|
||||
|
||||
function parseJSDocTypeNameWithNamespace(nested?: boolean) {
|
||||
const pos = scanner.getTokenPos();
|
||||
if (!tokenIsIdentifierOrKeyword(token())) {
|
||||
return undefined;
|
||||
}
|
||||
const typeNameOrNamespaceName = parseJSDocIdentifierName();
|
||||
|
||||
if (typeNameOrNamespaceName && parseOptional(SyntaxKind.DotToken)) {
|
||||
if (parseOptional(SyntaxKind.DotToken)) {
|
||||
const jsDocNamespaceNode = <JSDocNamespaceDeclaration>createNode(SyntaxKind.ModuleDeclaration, pos);
|
||||
if (nested) {
|
||||
jsDocNamespaceNode.flags |= NodeFlags.NestedNamespace;
|
||||
@@ -6874,7 +6834,7 @@ namespace ts {
|
||||
return finishNode(jsDocNamespaceNode);
|
||||
}
|
||||
|
||||
if (typeNameOrNamespaceName && nested) {
|
||||
if (nested) {
|
||||
typeNameOrNamespaceName.isInJSDocNamespace = true;
|
||||
}
|
||||
return typeNameOrNamespaceName;
|
||||
@@ -6897,8 +6857,7 @@ namespace ts {
|
||||
jsdocSignature.parameters = append(jsdocSignature.parameters as MutableNodeArray<JSDocParameterTag>, child);
|
||||
}
|
||||
const returnTag = tryParse(() => {
|
||||
if (token() === SyntaxKind.AtToken) {
|
||||
nextJSDocToken();
|
||||
if (parseOptionalJsdoc(SyntaxKind.AtToken)) {
|
||||
const tag = parseTag(indent);
|
||||
if (tag && tag.kind === SyntaxKind.JSDocReturnTag) {
|
||||
return tag as JSDocReturnTag;
|
||||
@@ -6985,9 +6944,6 @@ namespace ts {
|
||||
|
||||
const tagName = parseJSDocIdentifierName();
|
||||
skipWhitespace();
|
||||
if (!tagName) {
|
||||
return false;
|
||||
}
|
||||
let t: PropertyLikeParse;
|
||||
switch (tagName.escapedText) {
|
||||
case "type":
|
||||
@@ -7012,36 +6968,26 @@ namespace ts {
|
||||
return tag;
|
||||
}
|
||||
|
||||
function parseTemplateTag(atToken: AtToken, tagName: Identifier): JSDocTemplateTag | undefined {
|
||||
if (some(tags, isJSDocTemplateTag)) {
|
||||
parseErrorAt(tagName.pos, scanner.getTokenPos(), Diagnostics._0_tag_already_specified, tagName.escapedText);
|
||||
function parseTemplateTag(atToken: AtToken, tagName: Identifier): JSDocTemplateTag {
|
||||
// the template tag looks like '@template {Constraint} T,U,V'
|
||||
let constraint: JSDocTypeExpression | undefined;
|
||||
if (token() === SyntaxKind.OpenBraceToken) {
|
||||
constraint = parseJSDocTypeExpression();
|
||||
}
|
||||
|
||||
// Type parameter list looks like '@template T,U,V'
|
||||
const typeParameters = [];
|
||||
const typeParametersPos = getNodePos();
|
||||
|
||||
while (true) {
|
||||
const typeParameter = <TypeParameterDeclaration>createNode(SyntaxKind.TypeParameter);
|
||||
const name = parseJSDocIdentifierNameWithOptionalBraces();
|
||||
do {
|
||||
skipWhitespace();
|
||||
const typeParameter = <TypeParameterDeclaration>createNode(SyntaxKind.TypeParameter);
|
||||
typeParameter.name = parseJSDocIdentifierName(Diagnostics.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces);
|
||||
skipWhitespace();
|
||||
if (!name) {
|
||||
parseErrorAtPosition(scanner.getStartPos(), 0, Diagnostics.Identifier_expected);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
typeParameter.name = name;
|
||||
finishNode(typeParameter);
|
||||
|
||||
typeParameters.push(typeParameter);
|
||||
} while (parseOptionalJsdoc(SyntaxKind.CommaToken));
|
||||
|
||||
if (token() === SyntaxKind.CommaToken) {
|
||||
nextJSDocToken();
|
||||
skipWhitespace();
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
if (constraint) {
|
||||
first(typeParameters).constraint = constraint.type;
|
||||
}
|
||||
|
||||
const result = <JSDocTemplateTag>createNode(SyntaxKind.JSDocTemplateTag, atToken.pos);
|
||||
@@ -7052,21 +6998,20 @@ namespace ts {
|
||||
return result;
|
||||
}
|
||||
|
||||
function parseJSDocIdentifierNameWithOptionalBraces(): Identifier | undefined {
|
||||
const parsedBrace = parseOptional(SyntaxKind.OpenBraceToken);
|
||||
const res = parseJSDocIdentifierName();
|
||||
if (parsedBrace) {
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
function nextJSDocToken(): JsDocSyntaxKind {
|
||||
return currentToken = scanner.scanJSDocToken();
|
||||
}
|
||||
|
||||
function parseOptionalJsdoc(t: JsDocSyntaxKind): boolean {
|
||||
if (token() === t) {
|
||||
nextJSDocToken();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function parseJSDocEntityName(): EntityName {
|
||||
let entity: EntityName = parseJSDocIdentifierName(/*createIfMissing*/ true);
|
||||
let entity: EntityName = parseJSDocIdentifierName();
|
||||
if (parseOptional(SyntaxKind.OpenBracketToken)) {
|
||||
parseExpected(SyntaxKind.CloseBracketToken);
|
||||
// Note that y[] is accepted as an entity name, but the postfix brackets are not saved for checking.
|
||||
@@ -7074,7 +7019,7 @@ namespace ts {
|
||||
// but it's not worth it to enforce that restriction.
|
||||
}
|
||||
while (parseOptional(SyntaxKind.DotToken)) {
|
||||
const name = parseJSDocIdentifierName(/*createIfMissing*/ true);
|
||||
const name = parseJSDocIdentifierName();
|
||||
if (parseOptional(SyntaxKind.OpenBracketToken)) {
|
||||
parseExpected(SyntaxKind.CloseBracketToken);
|
||||
}
|
||||
@@ -7083,17 +7028,9 @@ namespace ts {
|
||||
return entity;
|
||||
}
|
||||
|
||||
function parseJSDocIdentifierName(): Identifier | undefined;
|
||||
function parseJSDocIdentifierName(createIfMissing: true): Identifier;
|
||||
function parseJSDocIdentifierName(createIfMissing = false): Identifier | undefined {
|
||||
function parseJSDocIdentifierName(message?: DiagnosticMessage): Identifier {
|
||||
if (!tokenIsIdentifierOrKeyword(token())) {
|
||||
if (createIfMissing) {
|
||||
return createMissingNode<Identifier>(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ true, Diagnostics.Identifier_expected);
|
||||
}
|
||||
else {
|
||||
parseErrorAtCurrentToken(Diagnostics.Identifier_expected);
|
||||
return undefined;
|
||||
}
|
||||
return createMissingNode<Identifier>(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ !message, message || Diagnostics.Identifier_expected);
|
||||
}
|
||||
|
||||
const pos = scanner.getTokenPos();
|
||||
@@ -7691,6 +7628,7 @@ namespace ts {
|
||||
checkJsDirective?: CheckJsDirective;
|
||||
referencedFiles: FileReference[];
|
||||
typeReferenceDirectives: FileReference[];
|
||||
libReferenceDirectives: FileReference[];
|
||||
amdDependencies: AmdDependency[];
|
||||
hasNoDefaultLib?: boolean;
|
||||
moduleName?: string;
|
||||
@@ -7744,6 +7682,7 @@ namespace ts {
|
||||
context.checkJsDirective = undefined;
|
||||
context.referencedFiles = [];
|
||||
context.typeReferenceDirectives = [];
|
||||
context.libReferenceDirectives = [];
|
||||
context.amdDependencies = [];
|
||||
context.hasNoDefaultLib = false;
|
||||
context.pragmas!.forEach((entryOrList, key) => { // TODO: GH#18217
|
||||
@@ -7753,6 +7692,7 @@ namespace ts {
|
||||
case "reference": {
|
||||
const referencedFiles = context.referencedFiles;
|
||||
const typeReferenceDirectives = context.typeReferenceDirectives;
|
||||
const libReferenceDirectives = context.libReferenceDirectives;
|
||||
forEach(toArray(entryOrList), (arg: PragmaPsuedoMap["reference"]) => {
|
||||
// TODO: GH#18217
|
||||
if (arg!.arguments["no-default-lib"]) {
|
||||
@@ -7761,6 +7701,9 @@ namespace ts {
|
||||
else if (arg!.arguments.types) {
|
||||
typeReferenceDirectives.push({ pos: arg!.arguments.types!.pos, end: arg!.arguments.types!.end, fileName: arg!.arguments.types!.value });
|
||||
}
|
||||
else if (arg!.arguments.lib) {
|
||||
libReferenceDirectives.push({ pos: arg!.arguments.lib!.pos, end: arg!.arguments.lib!.end, fileName: arg!.arguments.lib!.value });
|
||||
}
|
||||
else if (arg!.arguments.path) {
|
||||
referencedFiles.push({ pos: arg!.arguments.path!.pos, end: arg!.arguments.path!.end, fileName: arg!.arguments.path!.value });
|
||||
}
|
||||
@@ -7906,4 +7849,25 @@ namespace ts {
|
||||
}
|
||||
return argMap;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export function tagNamesAreEquivalent(lhs: JsxTagNameExpression, rhs: JsxTagNameExpression): boolean {
|
||||
if (lhs.kind !== rhs.kind) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (lhs.kind === SyntaxKind.Identifier) {
|
||||
return (<Identifier>lhs).escapedText === (<Identifier>rhs).escapedText;
|
||||
}
|
||||
|
||||
if (lhs.kind === SyntaxKind.ThisKeyword) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
|
||||
// take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression
|
||||
// it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element
|
||||
return (<PropertyAccessExpression>lhs).name.escapedText === (<PropertyAccessExpression>rhs).name.escapedText &&
|
||||
tagNamesAreEquivalent((<PropertyAccessExpression>lhs).expression as JsxTagNameExpression, (<PropertyAccessExpression>rhs).expression as JsxTagNameExpression);
|
||||
}
|
||||
}
|
||||
|
||||
Executable → Regular
+99
-24
@@ -491,6 +491,17 @@ namespace ts {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new 'Program' instance. A Program is an immutable collection of 'SourceFile's and a 'CompilerOptions'
|
||||
* that represent a compilation unit.
|
||||
*
|
||||
* Creating a program proceeds from a set of root files, expanding the set of inputs by following imports and
|
||||
* triple-slash-reference-path directives transitively. '@types' and triple-slash-reference-types are also pulled in.
|
||||
*
|
||||
* @param createProgramOptions - The options for creating a program.
|
||||
* @returns A 'Program' object.
|
||||
*/
|
||||
export function createProgram(createProgramOptions: CreateProgramOptions): Program;
|
||||
/**
|
||||
* Create a new 'Program' instance. A Program is an immutable collection of 'SourceFile's and a 'CompilerOptions'
|
||||
* that represent a compilation unit.
|
||||
@@ -505,7 +516,6 @@ namespace ts {
|
||||
* @param configFileParsingDiagnostics - error during config file parsing
|
||||
* @returns A 'Program' object.
|
||||
*/
|
||||
export function createProgram(createProgramOptions: CreateProgramOptions): Program;
|
||||
export function createProgram(rootNames: ReadonlyArray<string>, options: CompilerOptions, host?: CompilerHost, oldProgram?: Program, configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): Program;
|
||||
export function createProgram(rootNamesOrOptions: ReadonlyArray<string> | CreateProgramOptions, _options?: CompilerOptions, _host?: CompilerHost, _oldProgram?: Program, _configFileParsingDiagnostics?: ReadonlyArray<Diagnostic>): Program {
|
||||
const createProgramOptions = isArray(rootNamesOrOptions) ? createCreateProgramOptions(rootNamesOrOptions, _options!, _host, _oldProgram, _configFileParsingDiagnostics) : rootNamesOrOptions; // TODO: GH#18217
|
||||
@@ -513,7 +523,9 @@ namespace ts {
|
||||
let { oldProgram } = createProgramOptions;
|
||||
|
||||
let program: Program;
|
||||
let files: SourceFile[] = [];
|
||||
let processingDefaultLibFiles: SourceFile[] | undefined;
|
||||
let processingOtherFiles: SourceFile[] | undefined;
|
||||
let files: SourceFile[];
|
||||
let commonSourceDirectory: string;
|
||||
let diagnosticsProducingTypeChecker: TypeChecker;
|
||||
let noDiagnosticsTypeChecker: TypeChecker;
|
||||
@@ -613,7 +625,7 @@ namespace ts {
|
||||
if (parsedRef) {
|
||||
if (parsedRef.commandLine.options.outFile) {
|
||||
const dtsOutfile = changeExtension(parsedRef.commandLine.options.outFile, ".d.ts");
|
||||
processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*packageId*/ undefined);
|
||||
processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined);
|
||||
}
|
||||
addProjectReferenceRedirects(parsedRef.commandLine, projectReferenceRedirects);
|
||||
}
|
||||
@@ -623,7 +635,9 @@ namespace ts {
|
||||
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
|
||||
const structuralIsReused = tryReuseStructureFromOldProgram();
|
||||
if (structuralIsReused !== StructureIsReused.Completely) {
|
||||
forEach(rootNames, name => processRootFile(name, /*isDefaultLib*/ false));
|
||||
processingDefaultLibFiles = [];
|
||||
processingOtherFiles = [];
|
||||
forEach(rootNames, name => processRootFile(name, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false));
|
||||
|
||||
// load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders
|
||||
const typeReferences: string[] = getAutomaticTypeDirectiveNames(options, host);
|
||||
@@ -647,16 +661,19 @@ namespace ts {
|
||||
// otherwise, using options specified in '--lib' instead of '--target' default library file
|
||||
const defaultLibraryFileName = getDefaultLibraryFileName();
|
||||
if (!options.lib && defaultLibraryFileName) {
|
||||
processRootFile(defaultLibraryFileName, /*isDefaultLib*/ true);
|
||||
processRootFile(defaultLibraryFileName, /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ false);
|
||||
}
|
||||
else {
|
||||
forEach(options.lib, libFileName => {
|
||||
processRootFile(combinePaths(defaultLibraryPath, libFileName), /*isDefaultLib*/ true);
|
||||
processRootFile(combinePaths(defaultLibraryPath, libFileName), /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
missingFilePaths = arrayFrom(filesByName.keys(), p => <Path>p).filter(p => !filesByName.get(p));
|
||||
files = stableSort(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles);
|
||||
processingDefaultLibFiles = undefined;
|
||||
processingOtherFiles = undefined;
|
||||
}
|
||||
|
||||
Debug.assert(!!missingFilePaths);
|
||||
@@ -686,6 +703,7 @@ namespace ts {
|
||||
getOptionsDiagnostics,
|
||||
getGlobalDiagnostics,
|
||||
getSemanticDiagnostics,
|
||||
getSuggestionDiagnostics,
|
||||
getDeclarationDiagnostics,
|
||||
getTypeChecker,
|
||||
getClassifiableNames,
|
||||
@@ -703,6 +721,7 @@ namespace ts {
|
||||
isSourceFileDefaultLibrary,
|
||||
dropDiagnosticsProducingTypeChecker,
|
||||
getSourceFileFromReference,
|
||||
getLibFileFromReference,
|
||||
sourceFileToPackageName,
|
||||
redirectTargetsSet,
|
||||
isEmittedFile,
|
||||
@@ -717,6 +736,21 @@ namespace ts {
|
||||
|
||||
return program;
|
||||
|
||||
function compareDefaultLibFiles(a: SourceFile, b: SourceFile) {
|
||||
return compareValues(getDefaultLibFilePriority(a), getDefaultLibFilePriority(b));
|
||||
}
|
||||
|
||||
function getDefaultLibFilePriority(a: SourceFile) {
|
||||
if (containsPath(defaultLibraryPath, a.fileName, /*ignoreCase*/ false)) {
|
||||
const basename = getBaseFileName(a.fileName);
|
||||
if (basename === "lib.d.ts" || basename === "lib.es6.d.ts") return 0;
|
||||
const name = removeSuffix(removePrefix(basename, "lib."), ".d.ts");
|
||||
const index = libs.indexOf(name);
|
||||
if (index !== -1) return index + 1;
|
||||
}
|
||||
return libs.length + 2;
|
||||
}
|
||||
|
||||
function getResolvedModuleWithFailedLookupLocationsFromCache(moduleName: string, containingFile: string): ResolvedModuleWithFailedLookupLocations | undefined {
|
||||
return moduleResolutionCache && resolveModuleNameFromCache(moduleName, containingFile, moduleResolutionCache);
|
||||
}
|
||||
@@ -1039,6 +1073,11 @@ namespace ts {
|
||||
if (fileChanged) {
|
||||
// The `newSourceFile` object was created for the new program.
|
||||
|
||||
if (!arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
|
||||
// 'lib' references has changed. Matches behavior in changesAffectModuleResolution
|
||||
return oldProgram.structureIsReused = StructureIsReused.Not;
|
||||
}
|
||||
|
||||
if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
|
||||
// value of no-default-lib has changed
|
||||
// this will affect if default library is injected into the list of files
|
||||
@@ -1171,6 +1210,9 @@ namespace ts {
|
||||
writeFile: writeFileCallback || (
|
||||
(fileName, data, writeByteOrderMark, onError, sourceFiles) => host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles)),
|
||||
isEmitBlocked,
|
||||
readFile: f => host.readFile(f),
|
||||
fileExists: f => host.fileExists(f),
|
||||
...(host.directoryExists ? { directoryExists: f => host.directoryExists!(f) } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1427,6 +1469,12 @@ namespace ts {
|
||||
});
|
||||
}
|
||||
|
||||
function getSuggestionDiagnostics(sourceFile: SourceFile, cancellationToken: CancellationToken): ReadonlyArray<DiagnosticWithLocation> {
|
||||
return runWithCancellationToken(() => {
|
||||
return getDiagnosticsProducingTypeChecker().getSuggestionDiagnostics(sourceFile, cancellationToken);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Skip errors if previous line start with '// @ts-ignore' comment, not counting non-empty non-comment lines
|
||||
*/
|
||||
@@ -1696,8 +1744,8 @@ namespace ts {
|
||||
return configFileParsingDiagnostics || emptyArray;
|
||||
}
|
||||
|
||||
function processRootFile(fileName: string, isDefaultLib: boolean) {
|
||||
processSourceFile(normalizePath(fileName), isDefaultLib, /*packageId*/ undefined);
|
||||
function processRootFile(fileName: string, isDefaultLib: boolean, ignoreNoDefaultLib: boolean) {
|
||||
processSourceFile(normalizePath(fileName), isDefaultLib, ignoreNoDefaultLib, /*packageId*/ undefined);
|
||||
}
|
||||
|
||||
function fileReferenceIsEqualTo(a: FileReference, b: FileReference): boolean {
|
||||
@@ -1807,11 +1855,9 @@ namespace ts {
|
||||
else if (isLiteralImportTypeNode(node)) {
|
||||
imports = append(imports, node.argument.literal);
|
||||
}
|
||||
else {
|
||||
collectDynamicImportOrRequireCallsForEachChild(node);
|
||||
if (hasJSDocNodes(node)) {
|
||||
forEach(node.jsDoc, collectDynamicImportOrRequireCallsForEachChild);
|
||||
}
|
||||
collectDynamicImportOrRequireCallsForEachChild(node);
|
||||
if (hasJSDocNodes(node)) {
|
||||
forEach(node.jsDoc, collectDynamicImportOrRequireCallsForEachChild);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1820,6 +1866,14 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function getLibFileFromReference(ref: FileReference) {
|
||||
const libName = ref.fileName.toLocaleLowerCase();
|
||||
const libFileName = libMap.get(libName);
|
||||
if (libFileName) {
|
||||
return getSourceFile(combinePaths(defaultLibraryPath, libFileName));
|
||||
}
|
||||
}
|
||||
|
||||
/** This should have similar behavior to 'processSourceFile' without diagnostics or mutation. */
|
||||
function getSourceFileFromReference(referencingFile: SourceFile, ref: FileReference): SourceFile | undefined {
|
||||
return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), fileName => filesByName.get(toPath(fileName)));
|
||||
@@ -1870,9 +1924,9 @@ namespace ts {
|
||||
}
|
||||
|
||||
/** This has side effects through `findSourceFile`. */
|
||||
function processSourceFile(fileName: string, isDefaultLib: boolean, packageId: PackageId | undefined, refFile?: SourceFile, refPos?: number, refEnd?: number): void {
|
||||
function processSourceFile(fileName: string, isDefaultLib: boolean, ignoreNoDefaultLib: boolean, packageId: PackageId | undefined, refFile?: SourceFile, refPos?: number, refEnd?: number): void {
|
||||
getSourceFileFromReferenceWorker(fileName,
|
||||
fileName => findSourceFile(fileName, toPath(fileName), isDefaultLib, refFile!, refPos!, refEnd!, packageId), // TODO: GH#18217
|
||||
fileName => findSourceFile(fileName, toPath(fileName), isDefaultLib, ignoreNoDefaultLib, refFile!, refPos!, refEnd!, packageId), // TODO: GH#18217
|
||||
(diagnostic, ...args) => {
|
||||
fileProcessingDiagnostics.add(refFile !== undefined && refEnd !== undefined && refPos !== undefined
|
||||
? createFileDiagnostic(refFile, refPos, refEnd - refPos, diagnostic, ...args)
|
||||
@@ -1910,7 +1964,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
// Get source file from normalized fileName
|
||||
function findSourceFile(fileName: string, path: Path, isDefaultLib: boolean, refFile: SourceFile, refPos: number, refEnd: number, packageId: PackageId | undefined): SourceFile | undefined {
|
||||
function findSourceFile(fileName: string, path: Path, isDefaultLib: boolean, ignoreNoDefaultLib: boolean, refFile: SourceFile, refPos: number, refEnd: number, packageId: PackageId | undefined): SourceFile | undefined {
|
||||
if (filesByName.has(path)) {
|
||||
const file = filesByName.get(path);
|
||||
// try to check if we've already seen this file but with a different casing in path
|
||||
@@ -1928,6 +1982,8 @@ namespace ts {
|
||||
processTypeReferenceDirectives(file);
|
||||
}
|
||||
|
||||
processLibReferenceDirectives(file);
|
||||
|
||||
modulesWithElidedImports.set(file.path, false);
|
||||
processImportedModules(file);
|
||||
}
|
||||
@@ -1978,7 +2034,7 @@ namespace ts {
|
||||
redirectTargetsSet.set(fileFromPackageId.path, true);
|
||||
filesByName.set(path, dupFile);
|
||||
sourceFileToPackageName.set(path, packageId.name);
|
||||
files.push(dupFile);
|
||||
processingOtherFiles!.push(dupFile);
|
||||
return dupFile;
|
||||
}
|
||||
else if (file) {
|
||||
@@ -2010,21 +2066,23 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib;
|
||||
skipDefaultLib = skipDefaultLib || (file.hasNoDefaultLib && !ignoreNoDefaultLib);
|
||||
|
||||
if (!options.noResolve) {
|
||||
processReferencedFiles(file, isDefaultLib);
|
||||
processTypeReferenceDirectives(file);
|
||||
}
|
||||
|
||||
processLibReferenceDirectives(file);
|
||||
|
||||
// always process imported modules to record module name resolutions
|
||||
processImportedModules(file);
|
||||
|
||||
if (isDefaultLib) {
|
||||
files.unshift(file);
|
||||
processingDefaultLibFiles!.push(file);
|
||||
}
|
||||
else {
|
||||
files.push(file);
|
||||
processingOtherFiles!.push(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2051,7 +2109,7 @@ namespace ts {
|
||||
function processReferencedFiles(file: SourceFile, isDefaultLib: boolean) {
|
||||
forEach(file.referencedFiles, ref => {
|
||||
const referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName);
|
||||
processSourceFile(referencedFileName, isDefaultLib, /*packageId*/ undefined, file, ref.pos, ref.end);
|
||||
processSourceFile(referencedFileName, isDefaultLib, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined, file, ref.pos, ref.end);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2086,7 +2144,7 @@ namespace ts {
|
||||
if (resolvedTypeReferenceDirective) {
|
||||
if (resolvedTypeReferenceDirective.primary) {
|
||||
// resolved from the primary path
|
||||
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName!, /*isDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); // TODO: GH#18217
|
||||
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName!, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); // TODO: GH#18217
|
||||
}
|
||||
else {
|
||||
// If we already resolved to this file, it must have been a secondary reference. Check file contents
|
||||
@@ -2109,7 +2167,7 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
// First resolution of this library
|
||||
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName!, /*isDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd);
|
||||
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName!, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2122,6 +2180,23 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function processLibReferenceDirectives(file: SourceFile) {
|
||||
forEach(file.libReferenceDirectives, libReference => {
|
||||
const libName = libReference.fileName.toLocaleLowerCase();
|
||||
const libFileName = libMap.get(libName);
|
||||
if (libFileName) {
|
||||
// we ignore any 'no-default-lib' reference set on this file.
|
||||
processRootFile(combinePaths(defaultLibraryPath, libFileName), /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ true);
|
||||
}
|
||||
else {
|
||||
const unqualifiedLibName = removeSuffix(removePrefix(libName, "lib."), ".d.ts");
|
||||
const suggestion = getSpellingSuggestion(unqualifiedLibName, libs, identity);
|
||||
const message = suggestion ? Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : Diagnostics.Cannot_find_lib_definition_for_0;
|
||||
fileProcessingDiagnostics.add(createDiagnostic(file, libReference.pos, libReference.end, message, libName, suggestion));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function createDiagnostic(refFile: SourceFile, refPos: number, refEnd: number, message: DiagnosticMessage, ...args: any[]): Diagnostic {
|
||||
if (refFile === undefined || refPos === undefined || refEnd === undefined) {
|
||||
return createCompilerDiagnostic(message, ...args);
|
||||
@@ -2182,7 +2257,7 @@ namespace ts {
|
||||
else if (shouldAddFile) {
|
||||
const path = toPath(resolvedFileName);
|
||||
const pos = skipTrivia(file.text, file.imports[i].pos);
|
||||
findSourceFile(resolvedFileName, path, /*isDefaultLib*/ false, file, pos, file.imports[i].end, resolution.packageId);
|
||||
findSourceFile(resolvedFileName, path, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, file, pos, file.imports[i].end, resolution.packageId);
|
||||
}
|
||||
|
||||
if (isFromNodeModulesSearch) {
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace ts {
|
||||
* @param sourceFileOrBundle The input source file or bundle for the program.
|
||||
*/
|
||||
function initialize(filePath: string, sourceMapFilePath: string, sourceFileOrBundle: SourceFile | Bundle, outputSourceMapDataList?: SourceMapData[]) {
|
||||
if (disabled) {
|
||||
if (disabled || fileExtensionIs(filePath, Extension.Json)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -336,7 +336,7 @@ namespace ts {
|
||||
* @param pos The position.
|
||||
*/
|
||||
function emitPos(pos: number) {
|
||||
if (disabled || positionIsSynthesized(pos)) {
|
||||
if (disabled || positionIsSynthesized(pos) || isJsonSourceMapSource(currentSource)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -403,7 +403,7 @@ namespace ts {
|
||||
* @param emitCallback The callback used to emit the node.
|
||||
*/
|
||||
function emitNodeWithSourceMap(hint: EmitHint, node: Node, emitCallback: (hint: EmitHint, node: Node) => void) {
|
||||
if (disabled) {
|
||||
if (disabled || isInJsonFile(node)) {
|
||||
return emitCallback(hint, node);
|
||||
}
|
||||
|
||||
@@ -485,7 +485,7 @@ namespace ts {
|
||||
* @param emitCallback The callback used to emit the token.
|
||||
*/
|
||||
function emitTokenWithSourceMap(node: Node, token: SyntaxKind, writer: (s: string) => void, tokenPos: number, emitCallback: (token: SyntaxKind, writer: (s: string) => void, tokenStartPos: number) => number) {
|
||||
if (disabled) {
|
||||
if (disabled || isInJsonFile(node)) {
|
||||
return emitCallback(token, writer, tokenPos);
|
||||
}
|
||||
|
||||
@@ -508,6 +508,10 @@ namespace ts {
|
||||
return tokenPos;
|
||||
}
|
||||
|
||||
function isJsonSourceMapSource(sourceFile: SourceMapSource) {
|
||||
return fileExtensionIs(sourceFile.fileName, Extension.Json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current source file.
|
||||
*
|
||||
@@ -521,6 +525,10 @@ namespace ts {
|
||||
currentSource = sourceFile;
|
||||
currentSourceText = currentSource.text;
|
||||
|
||||
if (isJsonSourceMapSource(sourceFile)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the file to tsFilePaths
|
||||
// If sourceroot option: Use the relative path corresponding to the common directory path
|
||||
// otherwise source locations relative to map file location
|
||||
@@ -550,7 +558,7 @@ namespace ts {
|
||||
* Gets the text for the source map.
|
||||
*/
|
||||
function getText() {
|
||||
if (disabled) {
|
||||
if (disabled || isJsonSourceMapSource(currentSource)) {
|
||||
return undefined!; // TODO: GH#18217
|
||||
}
|
||||
|
||||
@@ -563,7 +571,7 @@ namespace ts {
|
||||
* Gets the SourceMappingURL for the source map.
|
||||
*/
|
||||
function getSourceMappingURL() {
|
||||
if (disabled) {
|
||||
if (disabled || isJsonSourceMapSource(currentSource)) {
|
||||
return undefined!; // TODO: GH#18217
|
||||
}
|
||||
|
||||
@@ -615,4 +623,4 @@ namespace ts {
|
||||
|
||||
return encodedStr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,12 +171,12 @@ namespace ts {
|
||||
[createModifier(SyntaxKind.DeclareKeyword)],
|
||||
createLiteral(getResolvedExternalModuleName(context.getEmitHost(), sourceFile)),
|
||||
createModuleBlock(setTextRange(createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements))
|
||||
)], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false);
|
||||
)], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
|
||||
return newFile;
|
||||
}
|
||||
needsDeclare = true;
|
||||
const updated = visitNodes(sourceFile.statements, visitDeclarationStatements);
|
||||
return updateSourceFileNode(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false);
|
||||
return updateSourceFileNode(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
|
||||
}
|
||||
), mapDefined(node.prepends, prepend => {
|
||||
if (prepend.kind === SyntaxKind.InputFiles) {
|
||||
|
||||
@@ -552,7 +552,9 @@ namespace ts {
|
||||
|
||||
function visitSourceFile(node: SourceFile) {
|
||||
const alwaysStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") &&
|
||||
!(isExternalModule(node) && moduleKind >= ModuleKind.ES2015);
|
||||
!(isExternalModule(node) && moduleKind >= ModuleKind.ES2015) &&
|
||||
!isJsonSourceFile(node);
|
||||
|
||||
return updateSourceFileNode(
|
||||
node,
|
||||
visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"builderState.ts",
|
||||
"builder.ts",
|
||||
"resolutionCache.ts",
|
||||
"moduleSpecifiers.ts",
|
||||
"watch.ts",
|
||||
"commandLineParser.ts",
|
||||
"tsbuild.ts",
|
||||
|
||||
+40
-20
@@ -1098,11 +1098,16 @@ namespace ts {
|
||||
|
||||
export type FunctionOrConstructorTypeNode = FunctionTypeNode | ConstructorTypeNode;
|
||||
|
||||
export interface FunctionTypeNode extends TypeNode, SignatureDeclarationBase {
|
||||
export interface FunctionOrConstructorTypeNodeBase extends TypeNode, SignatureDeclarationBase {
|
||||
kind: SyntaxKind.FunctionType | SyntaxKind.ConstructorType;
|
||||
type: TypeNode;
|
||||
}
|
||||
|
||||
export interface FunctionTypeNode extends FunctionOrConstructorTypeNodeBase {
|
||||
kind: SyntaxKind.FunctionType;
|
||||
}
|
||||
|
||||
export interface ConstructorTypeNode extends TypeNode, SignatureDeclarationBase {
|
||||
export interface ConstructorTypeNode extends FunctionOrConstructorTypeNodeBase {
|
||||
kind: SyntaxKind.ConstructorType;
|
||||
}
|
||||
|
||||
@@ -2566,6 +2571,7 @@ namespace ts {
|
||||
moduleName?: string;
|
||||
referencedFiles: ReadonlyArray<FileReference>;
|
||||
typeReferenceDirectives: ReadonlyArray<FileReference>;
|
||||
libReferenceDirectives: ReadonlyArray<FileReference>;
|
||||
languageVariant: LanguageVariant;
|
||||
isDeclarationFile: boolean;
|
||||
|
||||
@@ -2759,6 +2765,7 @@ namespace ts {
|
||||
getSemanticDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray<Diagnostic>;
|
||||
getDeclarationDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray<DiagnosticWithLocation>;
|
||||
getConfigFileParsingDiagnostics(): ReadonlyArray<Diagnostic>;
|
||||
/* @internal */ getSuggestionDiagnostics(sourceFile: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray<DiagnosticWithLocation>;
|
||||
|
||||
/**
|
||||
* Gets a type checker that can be used to semantically analyze source files in the program.
|
||||
@@ -2788,6 +2795,7 @@ namespace ts {
|
||||
/* @internal */ structureIsReused?: StructureIsReused;
|
||||
|
||||
/* @internal */ getSourceFileFromReference(referencingFile: SourceFile, ref: FileReference): SourceFile | undefined;
|
||||
/* @internal */ getLibFileFromReference(ref: FileReference): SourceFile | undefined;
|
||||
|
||||
/** Given a source file, get the name of the package it was imported from. */
|
||||
/* @internal */ sourceFileToPackageName: Map<string>;
|
||||
@@ -3080,7 +3088,7 @@ namespace ts {
|
||||
* Does *not* get *all* suggestion diagnostics, just the ones that were convenient to report in the checker.
|
||||
* Others are added in computeSuggestionDiagnostics.
|
||||
*/
|
||||
/* @internal */ getSuggestionDiagnostics(file: SourceFile): ReadonlyArray<DiagnosticWithLocation>;
|
||||
/* @internal */ getSuggestionDiagnostics(file: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray<DiagnosticWithLocation>;
|
||||
|
||||
/**
|
||||
* Depending on the operation performed, it may be appropriate to throw away the checker
|
||||
@@ -5029,8 +5037,9 @@ namespace ts {
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface EmitHost extends ScriptReferenceHost {
|
||||
export interface EmitHost extends ScriptReferenceHost, ModuleSpecifierResolutionHost {
|
||||
getSourceFiles(): ReadonlyArray<SourceFile>;
|
||||
getCurrentDirectory(): string;
|
||||
|
||||
/* @internal */
|
||||
isSourceFileFromExternalLibrary(file: SourceFile): boolean;
|
||||
@@ -5292,11 +5301,15 @@ namespace ts {
|
||||
isAtStartOfLine(): boolean;
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface ModuleNameResolverHost {
|
||||
getCanonicalFileName(f: string): string;
|
||||
getCommonSourceDirectory(): string;
|
||||
getCurrentDirectory(): string;
|
||||
export interface GetEffectiveTypeRootsHost {
|
||||
directoryExists?(directoryName: string): boolean;
|
||||
getCurrentDirectory?(): string;
|
||||
}
|
||||
/** @internal */
|
||||
export interface ModuleSpecifierResolutionHost extends GetEffectiveTypeRootsHost {
|
||||
useCaseSensitiveFileNames?(): boolean;
|
||||
fileExists?(path: string): boolean;
|
||||
readFile?(path: string): string | undefined;
|
||||
}
|
||||
|
||||
/** @deprecated See comment on SymbolWriter */
|
||||
@@ -5310,7 +5323,7 @@ namespace ts {
|
||||
reportPrivateInBaseOfClassExpression?(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError?(): void;
|
||||
/* @internal */
|
||||
moduleResolverHost?: ModuleNameResolverHost;
|
||||
moduleResolverHost?: ModuleSpecifierResolutionHost;
|
||||
/* @internal */
|
||||
trackReferencedAmbientModule?(decl: ModuleDeclaration): void;
|
||||
}
|
||||
@@ -5464,8 +5477,12 @@ namespace ts {
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface PragmaDefinition<T1 extends string = string, T2 extends string = string, T3 extends string = string> {
|
||||
args?: [PragmaArgumentSpecification<T1>] | [PragmaArgumentSpecification<T1>, PragmaArgumentSpecification<T2>] | [PragmaArgumentSpecification<T1>, PragmaArgumentSpecification<T2>, PragmaArgumentSpecification<T3>];
|
||||
export interface PragmaDefinition<T1 extends string = string, T2 extends string = string, T3 extends string = string, T4 extends string = string> {
|
||||
args?:
|
||||
| [PragmaArgumentSpecification<T1>]
|
||||
| [PragmaArgumentSpecification<T1>, PragmaArgumentSpecification<T2>]
|
||||
| [PragmaArgumentSpecification<T1>, PragmaArgumentSpecification<T2>, PragmaArgumentSpecification<T3>]
|
||||
| [PragmaArgumentSpecification<T1>, PragmaArgumentSpecification<T2>, PragmaArgumentSpecification<T3>, PragmaArgumentSpecification<T4>];
|
||||
// If not present, defaults to PragmaKindFlags.Default
|
||||
kind?: PragmaKindFlags;
|
||||
}
|
||||
@@ -5474,7 +5491,7 @@ namespace ts {
|
||||
* This function only exists to cause exact types to be inferred for all the literals within `commentPragmas`
|
||||
*/
|
||||
/* @internal */
|
||||
function _contextuallyTypePragmas<T extends {[name: string]: PragmaDefinition<K1, K2, K3>}, K1 extends string, K2 extends string, K3 extends string>(args: T): T {
|
||||
function _contextuallyTypePragmas<T extends {[name: string]: PragmaDefinition<K1, K2, K3, K4>}, K1 extends string, K2 extends string, K3 extends string, K4 extends string>(args: T): T {
|
||||
return args;
|
||||
}
|
||||
|
||||
@@ -5485,6 +5502,7 @@ namespace ts {
|
||||
"reference": {
|
||||
args: [
|
||||
{ name: "types", optional: true, captureSpan: true },
|
||||
{ name: "lib", optional: true, captureSpan: true },
|
||||
{ name: "path", optional: true, captureSpan: true },
|
||||
{ name: "no-default-lib", optional: true }
|
||||
],
|
||||
@@ -5525,13 +5543,15 @@ namespace ts {
|
||||
*/
|
||||
/* @internal */
|
||||
type PragmaArgumentType<T extends PragmaDefinition> =
|
||||
T extends { args: [PragmaArgumentSpecification<infer TName1>, PragmaArgumentSpecification<infer TName2>, PragmaArgumentSpecification<infer TName3>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName1> & PragmaArgTypeOptional<T["args"][1], TName2> & PragmaArgTypeOptional<T["args"][2], TName3>
|
||||
: T extends { args: [PragmaArgumentSpecification<infer TName1>, PragmaArgumentSpecification<infer TName2>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName1> & PragmaArgTypeOptional<T["args"][1], TName2>
|
||||
: T extends { args: [PragmaArgumentSpecification<infer TName>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName>
|
||||
: object;
|
||||
T extends { args: [PragmaArgumentSpecification<infer TName1>, PragmaArgumentSpecification<infer TName2>, PragmaArgumentSpecification<infer TName3>, PragmaArgumentSpecification<infer TName4>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName1> & PragmaArgTypeOptional<T["args"][1], TName2> & PragmaArgTypeOptional<T["args"][2], TName3> & PragmaArgTypeOptional<T["args"][2], TName4>
|
||||
: T extends { args: [PragmaArgumentSpecification<infer TName1>, PragmaArgumentSpecification<infer TName2>, PragmaArgumentSpecification<infer TName3>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName1> & PragmaArgTypeOptional<T["args"][1], TName2> & PragmaArgTypeOptional<T["args"][2], TName3>
|
||||
: T extends { args: [PragmaArgumentSpecification<infer TName1>, PragmaArgumentSpecification<infer TName2>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName1> & PragmaArgTypeOptional<T["args"][1], TName2>
|
||||
: T extends { args: [PragmaArgumentSpecification<infer TName>] }
|
||||
? PragmaArgTypeOptional<T["args"][0], TName>
|
||||
: object;
|
||||
// The above fallback to `object` when there's no args to allow `{}` (as intended), but not the number 2, for example
|
||||
// TODO: Swap to `undefined` for a cleaner API once strictNullChecks is enabled
|
||||
|
||||
|
||||
+70
-47
@@ -641,11 +641,6 @@ namespace ts {
|
||||
return createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
export function createDiagnosticForNodeSpan(sourceFile: SourceFile, startNode: Node, endNode: Node, message: DiagnosticMessage, arg0?: string | number, arg1?: string | number, arg2?: string | number, arg3?: string | number): DiagnosticWithLocation {
|
||||
const start = skipTrivia(sourceFile.text, startNode.pos);
|
||||
return createFileDiagnostic(sourceFile, start, endNode.end - start, message, arg0, arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
export function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): DiagnosticWithLocation {
|
||||
const sourceFile = getSourceFileOfNode(node);
|
||||
const span = getErrorSpanForNode(sourceFile, node);
|
||||
@@ -1088,7 +1083,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
export function getPropertyAssignment(objectLiteral: ObjectLiteralExpression, key: string, key2?: string): ReadonlyArray<PropertyAssignment> {
|
||||
return filter(objectLiteral.properties, (property): property is PropertyAssignment => {
|
||||
return objectLiteral.properties.filter((property): property is PropertyAssignment => {
|
||||
if (property.kind === SyntaxKind.PropertyAssignment) {
|
||||
const propName = getTextOfPropertyName(property.name);
|
||||
return key === propName || (!!key2 && key2 === propName);
|
||||
@@ -1105,12 +1100,15 @@ namespace ts {
|
||||
}
|
||||
|
||||
export function getTsConfigPropArrayElementValue(tsConfigSourceFile: TsConfigSourceFile | undefined, propKey: string, elementValue: string): StringLiteral | undefined {
|
||||
return firstDefined(getTsConfigPropArray(tsConfigSourceFile, propKey), property =>
|
||||
isArrayLiteralExpression(property.initializer) ?
|
||||
find(property.initializer.elements, (element): element is StringLiteral => isStringLiteral(element) && element.text === elementValue) :
|
||||
undefined);
|
||||
}
|
||||
|
||||
export function getTsConfigPropArray(tsConfigSourceFile: TsConfigSourceFile | undefined, propKey: string): ReadonlyArray<PropertyAssignment> {
|
||||
const jsonObjectLiteral = getTsConfigObjectLiteralExpression(tsConfigSourceFile);
|
||||
return jsonObjectLiteral &&
|
||||
firstDefined(getPropertyAssignment(jsonObjectLiteral, propKey), property =>
|
||||
isArrayLiteralExpression(property.initializer) ?
|
||||
find(property.initializer.elements, (element): element is StringLiteral => isStringLiteral(element) && element.text === elementValue) :
|
||||
undefined);
|
||||
return jsonObjectLiteral ? getPropertyAssignment(jsonObjectLiteral, propKey) : emptyArray;
|
||||
}
|
||||
|
||||
export function getContainingFunction(node: Node): SignatureDeclaration | undefined {
|
||||
@@ -1560,28 +1558,49 @@ namespace ts {
|
||||
return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === CharacterCodes.doubleQuote;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given the symbol of a declaration, find the symbol of its Javascript container-like initializer,
|
||||
* if it has one. Otherwise just return the original symbol.
|
||||
*
|
||||
* Container-like initializer behave like namespaces, so the binder needs to add contained symbols
|
||||
* to their exports. An example is a function with assignments to `this` inside.
|
||||
*/
|
||||
export function getJSInitializerSymbol(symbol: Symbol | undefined) {
|
||||
if (!symbol || !symbol.valueDeclaration) {
|
||||
return symbol;
|
||||
export function getDeclarationOfJSInitializer(node: Node): Node | undefined {
|
||||
if (!isInJavaScriptFile(node) || !node.parent) {
|
||||
return undefined;
|
||||
}
|
||||
const declaration = symbol.valueDeclaration;
|
||||
const e = getDeclaredJavascriptInitializer(declaration) || getAssignedJavascriptInitializer(declaration);
|
||||
return e && e.symbol ? e.symbol : symbol;
|
||||
let name: Expression | BindingName | undefined;
|
||||
let decl: Node | undefined;
|
||||
if (isVariableDeclaration(node.parent) && node.parent.initializer === node) {
|
||||
name = node.parent.name;
|
||||
decl = node.parent;
|
||||
}
|
||||
else if (isBinaryExpression(node.parent) && node.parent.operatorToken.kind === SyntaxKind.EqualsToken && node.parent.right === node) {
|
||||
name = node.parent.left;
|
||||
decl = name;
|
||||
}
|
||||
else if (isBinaryExpression(node.parent) && node.parent.operatorToken.kind === SyntaxKind.BarBarToken) {
|
||||
if (isVariableDeclaration(node.parent.parent) && node.parent.parent.initializer === node.parent) {
|
||||
name = node.parent.parent.name;
|
||||
decl = node.parent.parent;
|
||||
}
|
||||
else if (isBinaryExpression(node.parent.parent) && node.parent.parent.operatorToken.kind === SyntaxKind.EqualsToken && node.parent.parent.right === node.parent) {
|
||||
name = node.parent.parent.left;
|
||||
decl = name;
|
||||
}
|
||||
|
||||
if (!name || !isEntityNameExpression(name) || !isSameEntityName(name, node.parent.left)) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (!name || !getJavascriptInitializer(node, isPrototypeAccess(name))) {
|
||||
return undefined;
|
||||
}
|
||||
return decl;
|
||||
}
|
||||
|
||||
/** Get the declaration initializer, when the initializer is container-like (See getJavascriptInitializer) */
|
||||
export function getDeclaredJavascriptInitializer(node: Node) {
|
||||
if (node && isVariableDeclaration(node) && node.initializer) {
|
||||
return getJavascriptInitializer(node.initializer, /*isPrototypeAssignment*/ false) ||
|
||||
isIdentifier(node.name) && getDefaultedJavascriptInitializer(node.name, node.initializer, /*isPrototypeAssignment*/ false);
|
||||
/** Get the initializer, taking into account defaulted Javascript initializers */
|
||||
export function getEffectiveInitializer(node: HasExpressionInitializer) {
|
||||
if (isInJavaScriptFile(node) && node.initializer &&
|
||||
isBinaryExpression(node.initializer) && node.initializer.operatorToken.kind === SyntaxKind.BarBarToken &&
|
||||
node.name && isEntityNameExpression(node.name) && isSameEntityName(node.name, node.initializer.left)) {
|
||||
return node.initializer.right;
|
||||
}
|
||||
return node.initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1636,6 +1655,13 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
export function isDefaultedJavascriptInitializer(node: BinaryExpression) {
|
||||
const name = isVariableDeclaration(node.parent) ? node.parent.name :
|
||||
isBinaryExpression(node.parent) && node.parent.operatorToken.kind === SyntaxKind.EqualsToken ? node.parent.left :
|
||||
undefined;
|
||||
return name && getJavascriptInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
|
||||
}
|
||||
|
||||
/** Given a Javascript initializer, return the outer name. That is, the lhs of the assignment or the declaration name. */
|
||||
export function getOuterNameOfJsInitializer(node: Declaration): DeclarationName | undefined {
|
||||
if (isBinaryExpression(node.parent)) {
|
||||
@@ -1658,7 +1684,7 @@ namespace ts {
|
||||
* var min = window.min || {}
|
||||
* my.app = self.my.app || class { }
|
||||
*/
|
||||
function isSameEntityName(name: EntityNameExpression, initializer: EntityNameExpression): boolean {
|
||||
function isSameEntityName(name: Expression, initializer: Expression): boolean {
|
||||
if (isIdentifier(name) && isIdentifier(initializer)) {
|
||||
return name.escapedText === initializer.escapedText;
|
||||
}
|
||||
@@ -2916,11 +2942,11 @@ namespace ts {
|
||||
};
|
||||
}
|
||||
|
||||
export function getResolvedExternalModuleName(host: ModuleNameResolverHost, file: SourceFile, referenceFile?: SourceFile): string {
|
||||
export function getResolvedExternalModuleName(host: EmitHost, file: SourceFile, referenceFile?: SourceFile): string {
|
||||
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName);
|
||||
}
|
||||
|
||||
export function getExternalModuleNameFromDeclaration(host: ModuleNameResolverHost, resolver: EmitResolver, declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration | ModuleDeclaration | ImportTypeNode): string | undefined {
|
||||
export function getExternalModuleNameFromDeclaration(host: EmitHost, resolver: EmitResolver, declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration | ModuleDeclaration | ImportTypeNode): string | undefined {
|
||||
const file = resolver.getExternalModuleFileFromDeclaration(declaration);
|
||||
if (!file || file.isDeclarationFile) {
|
||||
return undefined;
|
||||
@@ -2931,7 +2957,7 @@ namespace ts {
|
||||
/**
|
||||
* Resolves a local path to a path which is absolute to the base of the emit
|
||||
*/
|
||||
export function getExternalModuleNameFromPath(host: ModuleNameResolverHost, fileName: string, referencePath?: string): string {
|
||||
export function getExternalModuleNameFromPath(host: EmitHost, fileName: string, referencePath?: string): string {
|
||||
const getCanonicalFileName = (f: string) => host.getCanonicalFileName(f);
|
||||
const dir = toPath(referencePath ? getDirectoryPath(referencePath) : host.getCommonSourceDirectory(), host.getCurrentDirectory(), getCanonicalFileName);
|
||||
const filePath = getNormalizedAbsolutePath(fileName, host.getCurrentDirectory());
|
||||
@@ -3146,21 +3172,18 @@ namespace ts {
|
||||
}
|
||||
if (isJSDocTypeAlias(node)) {
|
||||
Debug.assert(node.parent.kind === SyntaxKind.JSDocComment);
|
||||
const templateTags = flatMap(filter(node.parent.tags, isJSDocTemplateTag), tag => tag.typeParameters) as ReadonlyArray<TypeParameterDeclaration>;
|
||||
const templateTagNodes = templateTags as NodeArray<TypeParameterDeclaration>;
|
||||
templateTagNodes.pos = templateTagNodes.length > 0 ? first(templateTagNodes).pos : node.pos;
|
||||
templateTagNodes.end = templateTagNodes.length > 0 ? last(templateTagNodes).end : node.end;
|
||||
templateTagNodes.hasTrailingComma = false;
|
||||
return templateTagNodes;
|
||||
return flatMap(node.parent.tags, tag => isJSDocTemplateTag(tag) ? tag.typeParameters : undefined) as ReadonlyArray<TypeParameterDeclaration>;
|
||||
}
|
||||
return node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : emptyArray);
|
||||
}
|
||||
|
||||
export function getJSDocTypeParameterDeclarations(node: DeclarationWithTypeParameters): ReadonlyArray<TypeParameterDeclaration> {
|
||||
// template tags are only available when a typedef isn't already using them
|
||||
const tag = find(getJSDocTags(node), (tag): tag is JSDocTemplateTag =>
|
||||
isJSDocTemplateTag(tag) && !(tag.parent.kind === SyntaxKind.JSDocComment && tag.parent.tags!.some(isJSDocTypeAlias)));
|
||||
return (tag && tag.typeParameters) || emptyArray;
|
||||
return flatMap(getJSDocTags(node), tag => isNonTypeAliasTemplate(tag) ? tag.typeParameters : undefined);
|
||||
}
|
||||
|
||||
/** template tags are only available when a typedef isn't already using them */
|
||||
function isNonTypeAliasTemplate(tag: JSDocTag): tag is JSDocTemplateTag {
|
||||
return isJSDocTemplateTag(tag) && !(tag.parent.kind === SyntaxKind.JSDocComment && tag.parent.tags!.some(isJSDocTypeAlias));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3656,15 +3679,15 @@ namespace ts {
|
||||
return output;
|
||||
}
|
||||
|
||||
export function base64encode(host: { base64encode?(input: string): string }, input: string): string {
|
||||
if (host.base64encode) {
|
||||
export function base64encode(host: { base64encode?(input: string): string } | undefined, input: string): string {
|
||||
if (host && host.base64encode) {
|
||||
return host.base64encode(input);
|
||||
}
|
||||
return convertToBase64(input);
|
||||
}
|
||||
|
||||
export function base64decode(host: { base64decode?(input: string): string }, input: string): string {
|
||||
if (host.base64decode) {
|
||||
export function base64decode(host: { base64decode?(input: string): string } | undefined, input: string): string {
|
||||
if (host && host.base64decode) {
|
||||
return host.base64decode(input);
|
||||
}
|
||||
const length = input.length;
|
||||
|
||||
@@ -1468,7 +1468,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
return isNodeArray(statements)
|
||||
? setTextRange(createNodeArray(concatenate(declarations, statements)), statements)
|
||||
? setTextRange(createNodeArray(prependStatements(statements.slice(), declarations)), statements)
|
||||
: prependStatements(statements, declarations);
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -183,7 +183,7 @@ namespace compiler {
|
||||
|
||||
public getSourceMapRecord(): string | undefined {
|
||||
if (this.result!.sourceMaps && this.result!.sourceMaps!.length > 0) {
|
||||
return Harness.SourceMapRecorder.getSourceMapRecord(this.result!.sourceMaps!, this.program!, Array.from(this.js.values()), Array.from(this.dts.values()));
|
||||
return Harness.SourceMapRecorder.getSourceMapRecord(this.result!.sourceMaps!, this.program!, Array.from(this.js.values()).filter(d => !ts.fileExtensionIs(d.file, ts.Extension.Json)), Array.from(this.dts.values()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,6 +216,16 @@ namespace compiler {
|
||||
}
|
||||
return vpath.changeExtension(path, ext);
|
||||
}
|
||||
|
||||
public getNumberOfJsFiles() {
|
||||
let count = this.js.size;
|
||||
this.js.forEach(document => {
|
||||
if (ts.fileExtensionIs(document.file, ts.Extension.Json)) {
|
||||
count--;
|
||||
}
|
||||
});
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
export function compileFiles(host: fakes.CompilerHost, rootFiles: string[] | undefined, compilerOptions: ts.CompilerOptions): CompilationResult {
|
||||
|
||||
+23
-11
@@ -1090,7 +1090,7 @@ namespace FourSlash {
|
||||
}
|
||||
|
||||
private getNode(): ts.Node {
|
||||
return ts.getTouchingPropertyName(this.getSourceFile(), this.currentCaretPosition, /*includeJsDocComment*/ false);
|
||||
return ts.getTouchingPropertyName(this.getSourceFile(), this.currentCaretPosition);
|
||||
}
|
||||
|
||||
private goToAndGetNode(range: Range): ts.Node {
|
||||
@@ -2743,6 +2743,14 @@ Actual: ${stringify(fullActual)}`);
|
||||
}
|
||||
}
|
||||
|
||||
public verifyJsxClosingTag(map: { [markerName: string]: ts.JsxClosingTagInfo | undefined }): void {
|
||||
for (const markerName in map) {
|
||||
this.goToMarker(markerName);
|
||||
const actual = this.languageService.getJsxClosingTagAtPosition(this.activeFile.fileName, this.currentCaretPosition);
|
||||
assert.deepEqual(actual, map[markerName]);
|
||||
}
|
||||
}
|
||||
|
||||
public verifyMatchingBracePosition(bracePosition: number, expectedMatchPosition: number) {
|
||||
const actual = this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, bracePosition);
|
||||
|
||||
@@ -3131,8 +3139,12 @@ Actual: ${stringify(fullActual)}`);
|
||||
assert(action.name === "Move to a new file" && action.description === "Move to a new file");
|
||||
|
||||
const editInfo = this.languageService.getEditsForRefactor(this.activeFile.fileName, this.formatCodeSettings, range, refactor.name, action.name, options.preferences || ts.defaultPreferences)!;
|
||||
for (const edit of editInfo.edits) {
|
||||
const newContent = options.newFileContents[edit.fileName];
|
||||
this.testNewFileContents(editInfo.edits, options.newFileContents);
|
||||
}
|
||||
|
||||
private testNewFileContents(edits: ReadonlyArray<ts.FileTextChanges>, newFileContents: { [fileName: string]: string }): void {
|
||||
for (const edit of edits) {
|
||||
const newContent = newFileContents[edit.fileName];
|
||||
if (newContent === undefined) {
|
||||
this.raiseError(`There was an edit in ${edit.fileName} but new content was not specified.`);
|
||||
}
|
||||
@@ -3149,8 +3161,8 @@ Actual: ${stringify(fullActual)}`);
|
||||
}
|
||||
}
|
||||
|
||||
for (const fileName in options.newFileContents) {
|
||||
assert(editInfo.edits.some(e => e.fileName === fileName));
|
||||
for (const fileName in newFileContents) {
|
||||
assert(edits.some(e => e.fileName === fileName));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3360,12 +3372,8 @@ Actual: ${stringify(fullActual)}`);
|
||||
}
|
||||
|
||||
public getEditsForFileRename(options: FourSlashInterface.GetEditsForFileRenameOptions): void {
|
||||
const changes = this.languageService.getEditsForFileRename(options.oldPath, options.newPath, this.formatCodeSettings);
|
||||
this.applyChanges(changes);
|
||||
for (const fileName in options.newFileContents) {
|
||||
this.openFile(fileName);
|
||||
this.verifyCurrentFileContent(options.newFileContents[fileName]);
|
||||
}
|
||||
const changes = this.languageService.getEditsForFileRename(options.oldPath, options.newPath, this.formatCodeSettings, ts.defaultPreferences);
|
||||
this.testNewFileContents(changes, options.newFileContents);
|
||||
}
|
||||
|
||||
private getApplicableRefactors(positionOrRange: number | ts.TextRange, preferences = ts.defaultPreferences): ReadonlyArray<ts.ApplicableRefactorInfo> {
|
||||
@@ -4079,6 +4087,10 @@ namespace FourSlashInterface {
|
||||
this.state.verifyBraceCompletionAtPosition(this.negative, openingBrace);
|
||||
}
|
||||
|
||||
public jsxClosingTag(map: { [markerName: string]: ts.JsxClosingTagInfo | undefined }): void {
|
||||
this.state.verifyJsxClosingTag(map);
|
||||
}
|
||||
|
||||
public isInCommentAtPosition(onlyMultiLineDiverges?: boolean) {
|
||||
this.state.verifySpanOfEnclosingComment(this.negative, onlyMultiLineDiverges);
|
||||
}
|
||||
|
||||
@@ -1270,7 +1270,7 @@ namespace Harness {
|
||||
throw new Error("Only declaration files should be generated when emitDeclarationOnly:true");
|
||||
}
|
||||
}
|
||||
else if (result.dts.size !== result.js.size) {
|
||||
else if (result.dts.size !== result.getNumberOfJsFiles()) {
|
||||
throw new Error("There were no errors and declFiles generated did not match number of js files generated");
|
||||
}
|
||||
}
|
||||
@@ -1645,7 +1645,7 @@ namespace Harness {
|
||||
return;
|
||||
}
|
||||
else if (options.sourceMap || declMaps) {
|
||||
if (result.maps.size !== (result.js.size * (declMaps && options.sourceMap ? 2 : 1))) {
|
||||
if (result.maps.size !== (result.getNumberOfJsFiles() * (declMaps && options.sourceMap ? 2 : 1))) {
|
||||
throw new Error("Number of sourcemap files should be same as js files.");
|
||||
}
|
||||
|
||||
|
||||
@@ -509,6 +509,9 @@ namespace Harness.LanguageService {
|
||||
isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean {
|
||||
return unwrapJSONCallResult(this.shim.isValidBraceCompletionAtPosition(fileName, position, openingBrace));
|
||||
}
|
||||
getJsxClosingTagAtPosition(): never {
|
||||
throw new Error("Not supported on the shim.");
|
||||
}
|
||||
getSpanOfEnclosingComment(fileName: string, position: number, onlyMultiLine: boolean): ts.TextSpan {
|
||||
return unwrapJSONCallResult(this.shim.getSpanOfEnclosingComment(fileName, position, onlyMultiLine));
|
||||
}
|
||||
@@ -573,7 +576,8 @@ namespace Harness.LanguageService {
|
||||
importedFiles: [],
|
||||
ambientExternalModules: [],
|
||||
isLibFile: shimResult.isLibFile,
|
||||
typeReferenceDirectives: []
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: []
|
||||
};
|
||||
|
||||
ts.forEach(shimResult.referencedFiles, refFile => {
|
||||
@@ -794,7 +798,7 @@ namespace Harness.LanguageService {
|
||||
const proxy = makeDefaultProxy(info);
|
||||
proxy.getSemanticDiagnostics = filename => {
|
||||
const prev = info.languageService.getSemanticDiagnostics(filename);
|
||||
const sourceFile: ts.SourceFile = info.languageService.getSourceFile(filename);
|
||||
const sourceFile: ts.SourceFile = info.project.getSourceFile(ts.toPath(filename, /*basePath*/ undefined, ts.createGetCanonicalFileName(info.serverHost.useCaseSensitiveFileNames)))!;
|
||||
prev.push({
|
||||
category: ts.DiagnosticCategory.Warning,
|
||||
file: sourceFile,
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
"../compiler/builderState.ts",
|
||||
"../compiler/builder.ts",
|
||||
"../compiler/resolutionCache.ts",
|
||||
"../compiler/moduleSpecifiers.ts",
|
||||
"../compiler/watch.ts",
|
||||
"../compiler/tsbuild.ts",
|
||||
"../compiler/commandLineParser.ts",
|
||||
@@ -116,7 +117,6 @@
|
||||
"../services/codefixes/inferFromUsage.ts",
|
||||
"../services/codefixes/fixInvalidImportSyntax.ts",
|
||||
"../services/codefixes/fixStrictClassInitialization.ts",
|
||||
"../services/codefixes/moduleSpecifiers.ts",
|
||||
"../services/codefixes/requireInTs.ts",
|
||||
"../services/codefixes/useDefaultImport.ts",
|
||||
"../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts",
|
||||
|
||||
@@ -56,9 +56,19 @@ namespace ts {
|
||||
r => assert.exists(r.displayParts)
|
||||
);
|
||||
});
|
||||
|
||||
it("can cancel suggestion diagnostics mid-request", () => {
|
||||
verifyOperationCancelledAfter(file, 1, service => // The LS doesn't do any top-level checks on the token for suggestion diagnostics, so the first check is within the checker
|
||||
service.getSuggestionDiagnostics("file.js"),
|
||||
r => assert.notEqual(r.length, 0),
|
||||
"file.js",
|
||||
"function foo() { let a = 10; }",
|
||||
{ allowJs: true }
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
function verifyOperationCancelledAfter<T>(content: string, cancelAfter: number, operation: (service: LanguageService) => T, validator: (arg: T) => void) {
|
||||
function verifyOperationCancelledAfter<T>(content: string, cancelAfter: number, operation: (service: LanguageService) => T, validator: (arg: T) => void, fileName?: string, fileContent?: string, options?: CompilerOptions) {
|
||||
let checks = 0;
|
||||
const token: HostCancellationToken = {
|
||||
isCancellationRequested() {
|
||||
@@ -70,9 +80,9 @@ namespace ts {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
const adapter = new Harness.LanguageService.NativeLanguageServiceAdapter(token);
|
||||
const adapter = new Harness.LanguageService.NativeLanguageServiceAdapter(token, options);
|
||||
const host = adapter.getHost();
|
||||
host.addScript("file.ts", content, /*isRootFile*/ true);
|
||||
host.addScript(fileName || "file.ts", fileContent || content, /*isRootFile*/ true);
|
||||
const service = adapter.getLanguageService();
|
||||
assertCancelled(() => operation(service));
|
||||
validator(operation(service));
|
||||
@@ -92,4 +102,4 @@ namespace ts {
|
||||
assert.exists(caught, "Expected operation to be cancelled, but was not");
|
||||
assert.instanceOf(caught, OperationCanceledException);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace ts {
|
||||
assertParseResult(["--lib", "es5,invalidOption", "0.ts"],
|
||||
{
|
||||
errors: [{
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
file: undefined,
|
||||
@@ -262,7 +262,7 @@ namespace ts {
|
||||
assertParseResult(["--lib", "es5,", "es7", "0.ts"],
|
||||
{
|
||||
errors: [{
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
file: undefined,
|
||||
@@ -281,7 +281,7 @@ namespace ts {
|
||||
assertParseResult(["--lib", "es5, ", "es7", "0.ts"],
|
||||
{
|
||||
errors: [{
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
file: undefined,
|
||||
|
||||
@@ -268,7 +268,7 @@ namespace ts {
|
||||
file: undefined,
|
||||
start: 0,
|
||||
length: 0,
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
|
||||
}]
|
||||
@@ -299,7 +299,7 @@ namespace ts {
|
||||
file: undefined,
|
||||
start: 0,
|
||||
length: 0,
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
|
||||
}]
|
||||
@@ -330,7 +330,7 @@ namespace ts {
|
||||
file: undefined,
|
||||
start: 0,
|
||||
length: 0,
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
|
||||
}]
|
||||
@@ -361,7 +361,7 @@ namespace ts {
|
||||
file: undefined,
|
||||
start: 0,
|
||||
length: 0,
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.asynciterable'.",
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable'.",
|
||||
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
|
||||
}]
|
||||
|
||||
@@ -9,7 +9,7 @@ describe("forAwaitOfEvaluation", () => {
|
||||
case 0: return { value: 1, done: false };
|
||||
case 1: return { value: Promise.resolve(2), done: false };
|
||||
case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
|
||||
default: return { value: undefined: done: true };
|
||||
default: return { value: undefined, done: true };
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -35,7 +35,7 @@ describe("forAwaitOfEvaluation", () => {
|
||||
case 0: return { value: 1, done: false };
|
||||
case 1: return { value: Promise.resolve(2), done: false };
|
||||
case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
|
||||
default: return { value: undefined: done: true };
|
||||
default: return { value: undefined, done: true };
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -61,7 +61,7 @@ describe("forAwaitOfEvaluation", () => {
|
||||
case 0: return { value: 1, done: false };
|
||||
case 1: return { value: Promise.resolve(2), done: false };
|
||||
case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
|
||||
default: return { value: undefined: done: true };
|
||||
default: return { value: undefined, done: true };
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -87,7 +87,7 @@ describe("forAwaitOfEvaluation", () => {
|
||||
case 0: return { value: 1, done: false };
|
||||
case 1: return { value: Promise.resolve(2), done: false };
|
||||
case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
|
||||
default: return { value: undefined: done: true };
|
||||
default: return { value: undefined, done: true };
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -102,4 +102,4 @@ describe("forAwaitOfEvaluation", () => {
|
||||
assert.instanceOf(result.output[1], Promise);
|
||||
assert.instanceOf(result.output[2], Promise);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9,6 +9,7 @@ describe("PreProcessFile:", () => {
|
||||
checkFileReferenceList("Imported files", expectedPreProcess.importedFiles, resultPreProcess.importedFiles);
|
||||
checkFileReferenceList("Referenced files", expectedPreProcess.referencedFiles, resultPreProcess.referencedFiles);
|
||||
checkFileReferenceList("Type reference directives", expectedPreProcess.typeReferenceDirectives, resultPreProcess.typeReferenceDirectives);
|
||||
checkFileReferenceList("Lib reference directives", expectedPreProcess.libReferenceDirectives, resultPreProcess.libReferenceDirectives);
|
||||
|
||||
assert.deepEqual(resultPreProcess.ambientExternalModules, expectedPreProcess.ambientExternalModules);
|
||||
}
|
||||
@@ -41,6 +42,7 @@ describe("PreProcessFile:", () => {
|
||||
{ fileName: "refFile3.ts", pos: 94, end: 105 }, { fileName: "..\\refFile4d.ts", pos: 131, end: 146 }],
|
||||
importedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
});
|
||||
@@ -54,6 +56,7 @@ describe("PreProcessFile:", () => {
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
importedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
});
|
||||
@@ -67,6 +70,7 @@ describe("PreProcessFile:", () => {
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
importedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
});
|
||||
@@ -80,6 +84,7 @@ describe("PreProcessFile:", () => {
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
importedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
});
|
||||
@@ -92,6 +97,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [{ fileName: "r1.ts", pos: 20, end: 25 }, { fileName: "r2.ts", pos: 49, end: 54 }, { fileName: "r3.ts", pos: 78, end: 83 },
|
||||
{ fileName: "r4.ts", pos: 106, end: 111 }, { fileName: "r5.ts", pos: 138, end: 143 }],
|
||||
ambientExternalModules: undefined,
|
||||
@@ -106,6 +112,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: <ts.FileReference[]>[],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
@@ -119,6 +126,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: <ts.FileReference[]>[],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [{ fileName: "r3.ts", pos: 73, end: 78 }],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
@@ -132,6 +140,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [{ fileName: "refFile1.ts", pos: 20, end: 31 }, { fileName: "refFile2.ts", pos: 57, end: 68 }],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [{ fileName: "r1.ts", pos: 92, end: 97 }, { fileName: "r2.ts", pos: 121, end: 126 }],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
@@ -145,6 +154,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [{ fileName: "refFile1.ts", pos: 20, end: 31 }],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [{ fileName: "r1.ts", pos: 91, end: 96 }, { fileName: "r3.ts", pos: 148, end: 153 }],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
@@ -164,6 +174,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m1", pos: 20, end: 22 },
|
||||
{ fileName: "m2", pos: 51, end: 53 },
|
||||
@@ -188,6 +199,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m1", pos: 14, end: 16 },
|
||||
{ fileName: "m2", pos: 36, end: 38 },
|
||||
@@ -212,6 +224,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [],
|
||||
ambientExternalModules: ["B"],
|
||||
isLibFile: false
|
||||
@@ -225,6 +238,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m1", pos: 26, end: 28 }
|
||||
],
|
||||
@@ -244,6 +258,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m1", pos: 39, end: 41 },
|
||||
{ fileName: "m2", pos: 74, end: 76 },
|
||||
@@ -264,6 +279,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "mod1", pos: 21, end: 25 },
|
||||
{ fileName: "mod2", pos: 29, end: 33 },
|
||||
@@ -282,6 +298,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "mod1", pos: 28, end: 32 },
|
||||
{ fileName: "mod2", pos: 36, end: 40 },
|
||||
@@ -303,6 +320,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
],
|
||||
@@ -323,6 +341,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m", pos: 123, end: 124 },
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
@@ -344,6 +363,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m", pos: 123, end: 124 },
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
@@ -365,6 +385,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
],
|
||||
@@ -385,6 +406,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
],
|
||||
@@ -404,6 +426,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "../Observable", pos: 28, end: 41 }
|
||||
],
|
||||
@@ -425,6 +448,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m2", pos: 65, end: 67 },
|
||||
{ fileName: "augmentation", pos: 102, end: 114 }
|
||||
@@ -449,6 +473,7 @@ describe("PreProcessFile:", () => {
|
||||
{
|
||||
referencedFiles: [],
|
||||
typeReferenceDirectives: [],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [
|
||||
{ fileName: "m2", pos: 127, end: 129 },
|
||||
{ fileName: "augmentation", pos: 164, end: 176 }
|
||||
@@ -475,6 +500,32 @@ describe("PreProcessFile:", () => {
|
||||
{ pos: 73, end: 75, fileName: "a1" },
|
||||
{ pos: 152, end: 154, fileName: "a3" }
|
||||
],
|
||||
libReferenceDirectives: [],
|
||||
importedFiles: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
});
|
||||
});
|
||||
it ("correctly recognizes lib reference directives", () => {
|
||||
test(`
|
||||
/// <reference path="a"/>
|
||||
/// <reference lib="a1"/>
|
||||
/// <reference path="a2"/>
|
||||
/// <reference lib="a3"/>
|
||||
`,
|
||||
/*readImportFile*/ true,
|
||||
/*detectJavaScriptImports*/ false,
|
||||
{
|
||||
referencedFiles: [
|
||||
{ pos: 34, end: 35, fileName: "a" },
|
||||
{ pos: 110, end: 112, fileName: "a2" }
|
||||
],
|
||||
typeReferenceDirectives: [
|
||||
],
|
||||
libReferenceDirectives: [
|
||||
{ pos: 71, end: 73, fileName: "a1" },
|
||||
{ pos: 148, end: 150, fileName: "a3" }
|
||||
],
|
||||
importedFiles: [],
|
||||
ambientExternalModules: undefined,
|
||||
isLibFile: false
|
||||
|
||||
@@ -224,6 +224,7 @@ namespace ts.server {
|
||||
CommandNames.Occurrences,
|
||||
CommandNames.DocumentHighlights,
|
||||
CommandNames.DocumentHighlightsFull,
|
||||
CommandNames.JsxClosingTag,
|
||||
CommandNames.Open,
|
||||
CommandNames.Quickinfo,
|
||||
CommandNames.QuickinfoFull,
|
||||
|
||||
@@ -267,7 +267,7 @@ namespace ts {
|
||||
const fs = vfs.createFromFileSystem(Harness.IO, /*caseSensitive*/ true, { documents: [new documents.TextDocument("/.src/index.ts", text)] });
|
||||
const host = new fakes.CompilerHost(fs, opts.compilerOptions);
|
||||
const program = createProgram(["/.src/index.ts"], opts.compilerOptions!, host);
|
||||
program.emit(program.getSourceFiles()[1], (p, s, bom) => host.writeFile(p, s, bom), /*cancellationToken*/ undefined, /*onlyDts*/ true, opts.transformers);
|
||||
program.emit(program.getSourceFile("/.src/index.ts"), (p, s, bom) => host.writeFile(p, s, bom), /*cancellationToken*/ undefined, /*onlyDts*/ true, opts.transformers);
|
||||
return fs.readFileSync("/.src/index.d.ts").toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -8400,15 +8400,23 @@ new C();`
|
||||
path: "/user.ts",
|
||||
content: 'import { x } from "./old";',
|
||||
};
|
||||
const newTs: File = {
|
||||
path: "/new.ts",
|
||||
content: "export const x = 0;",
|
||||
};
|
||||
const tsconfig: File = {
|
||||
path: "/tsconfig.json",
|
||||
content: "{}",
|
||||
};
|
||||
|
||||
const host = createServerHost([userTs]);
|
||||
const host = createServerHost([userTs, newTs, tsconfig]);
|
||||
const projectService = createProjectService(host);
|
||||
projectService.openClientFile(userTs.path);
|
||||
const project = first(projectService.inferredProjects);
|
||||
const project = projectService.configuredProjects.get(tsconfig.path)!;
|
||||
|
||||
Debug.assert(!!project.resolveModuleNames);
|
||||
|
||||
const edits = project.getLanguageService().getEditsForFileRename("/old.ts", "/new.ts", testFormatOptions);
|
||||
const edits = project.getLanguageService().getEditsForFileRename("/old.ts", "/new.ts", testFormatOptions, defaultPreferences);
|
||||
assert.deepEqual<ReadonlyArray<FileTextChanges>>(edits, [{
|
||||
fileName: "/user.ts",
|
||||
textChanges: [{
|
||||
|
||||
@@ -1340,6 +1340,27 @@ namespace ts.projectSystem {
|
||||
assert.deepEqual(result.newTypingNames, ["bar"]);
|
||||
});
|
||||
|
||||
it("should gracefully handle packages that have been removed from the types-registry", () => {
|
||||
const f = {
|
||||
path: "/a/b/app.js",
|
||||
content: ""
|
||||
};
|
||||
const node = {
|
||||
path: "/a/b/node.d.ts",
|
||||
content: ""
|
||||
};
|
||||
const host = createServerHost([f, node]);
|
||||
const cache = createMapFromTemplate<JsTyping.CachedTyping>({ node: { typingLocation: node.path, version: Semver.parse("1.3.0") } });
|
||||
const logger = trackingLogger();
|
||||
const result = JsTyping.discoverTypings(host, logger.log, [f.path], getDirectoryPath(<Path>f.path), emptySafeList, cache, { enable: true }, ["fs", "bar"], emptyMap);
|
||||
assert.deepEqual(logger.finish(), [
|
||||
'Inferred typings from unresolved imports: ["node","bar"]',
|
||||
'Result: {"cachedTypingPaths":[],"newTypingNames":["node","bar"],"filesToWatch":["/a/b/bower_components","/a/b/node_modules"]}',
|
||||
]);
|
||||
assert.deepEqual(result.cachedTypingPaths, []);
|
||||
assert.deepEqual(result.newTypingNames, ["node", "bar"]);
|
||||
});
|
||||
|
||||
it("should search only 2 levels deep", () => {
|
||||
const app = {
|
||||
path: "/app.js",
|
||||
|
||||
Vendored
+2147
-929
File diff suppressed because it is too large
Load Diff
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
/// <reference path="lib.dom.d.ts" />
|
||||
/// <reference lib="dom" />
|
||||
|
||||
interface DOMTokenList {
|
||||
[Symbol.iterator](): IterableIterator<string>;
|
||||
|
||||
Vendored
+188
@@ -0,0 +1,188 @@
|
||||
/////////////////////////////
|
||||
/// DOM Iterable APIs
|
||||
/////////////////////////////
|
||||
|
||||
interface AudioParamMap extends ReadonlyMap<string, AudioParam> {
|
||||
}
|
||||
|
||||
interface AudioTrackList {
|
||||
[Symbol.iterator](): IterableIterator<AudioTrack>;
|
||||
}
|
||||
|
||||
interface CSSRuleList {
|
||||
[Symbol.iterator](): IterableIterator<CSSRule>;
|
||||
}
|
||||
|
||||
interface CSSStyleDeclaration {
|
||||
[Symbol.iterator](): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface ClientRectList {
|
||||
[Symbol.iterator](): IterableIterator<ClientRect>;
|
||||
}
|
||||
|
||||
interface DOMRectList {
|
||||
[Symbol.iterator](): IterableIterator<DOMRect>;
|
||||
}
|
||||
|
||||
interface DOMStringList {
|
||||
[Symbol.iterator](): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface DOMTokenList {
|
||||
[Symbol.iterator](): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface DataTransferItemList {
|
||||
[Symbol.iterator](): IterableIterator<File>;
|
||||
}
|
||||
|
||||
interface FileList {
|
||||
[Symbol.iterator](): IterableIterator<File>;
|
||||
}
|
||||
|
||||
interface FormData {
|
||||
[Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
|
||||
/**
|
||||
* Returns an array of key, value pairs for every entry in the list.
|
||||
*/
|
||||
entries(): IterableIterator<[string, FormDataEntryValue]>;
|
||||
/**
|
||||
* Returns a list of keys in the list.
|
||||
*/
|
||||
keys(): IterableIterator<string>;
|
||||
/**
|
||||
* Returns a list of values in the list.
|
||||
*/
|
||||
values(): IterableIterator<FormDataEntryValue>;
|
||||
}
|
||||
|
||||
interface HTMLAllCollection {
|
||||
[Symbol.iterator](): IterableIterator<Element>;
|
||||
}
|
||||
|
||||
interface HTMLCollectionBase {
|
||||
[Symbol.iterator](): IterableIterator<Element>;
|
||||
}
|
||||
|
||||
interface HTMLCollectionOf<T extends Element> {
|
||||
[Symbol.iterator](): IterableIterator<T>;
|
||||
entries(): IterableIterator<[number, T]>;
|
||||
keys(): IterableIterator<number>;
|
||||
values(): IterableIterator<T>;
|
||||
}
|
||||
|
||||
interface HTMLSelectElement {
|
||||
[Symbol.iterator](): IterableIterator<Element>;
|
||||
}
|
||||
|
||||
interface Headers {
|
||||
[Symbol.iterator](): IterableIterator<[string, string]>;
|
||||
/**
|
||||
* Returns an iterator allowing to go through all key/value pairs contained in this object.
|
||||
*/
|
||||
entries(): IterableIterator<[string, string]>;
|
||||
/**
|
||||
* Returns an iterator allowing to go through all keys of the key/value pairs contained in this object.
|
||||
*/
|
||||
keys(): IterableIterator<string>;
|
||||
/**
|
||||
* Returns an iterator allowing to go through all values of the key/value pairs contained in this object.
|
||||
*/
|
||||
values(): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface MediaList {
|
||||
[Symbol.iterator](): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface MimeTypeArray {
|
||||
[Symbol.iterator](): IterableIterator<Plugin>;
|
||||
}
|
||||
|
||||
interface NamedNodeMap {
|
||||
[Symbol.iterator](): IterableIterator<Attr>;
|
||||
}
|
||||
|
||||
interface NodeList {
|
||||
[Symbol.iterator](): IterableIterator<Node>;
|
||||
/**
|
||||
* Returns an array of key, value pairs for every entry in the list.
|
||||
*/
|
||||
entries(): IterableIterator<[number, Node]>;
|
||||
/**
|
||||
* Returns an list of keys in the list.
|
||||
*/
|
||||
keys(): IterableIterator<number>;
|
||||
/**
|
||||
* Returns an list of values in the list.
|
||||
*/
|
||||
values(): IterableIterator<Node>;
|
||||
}
|
||||
|
||||
interface NodeListOf<TNode extends Node> {
|
||||
[Symbol.iterator](): IterableIterator<TNode>;
|
||||
/**
|
||||
* Returns an array of key, value pairs for every entry in the list.
|
||||
*/
|
||||
entries(): IterableIterator<[number, TNode]>;
|
||||
/**
|
||||
* Returns an list of keys in the list.
|
||||
*/
|
||||
keys(): IterableIterator<number>;
|
||||
/**
|
||||
* Returns an list of values in the list.
|
||||
*/
|
||||
values(): IterableIterator<TNode>;
|
||||
}
|
||||
|
||||
interface Plugin {
|
||||
[Symbol.iterator](): IterableIterator<MimeType>;
|
||||
}
|
||||
|
||||
interface PluginArray {
|
||||
[Symbol.iterator](): IterableIterator<Plugin>;
|
||||
}
|
||||
|
||||
interface RTCStatsReport extends ReadonlyMap<string, any> {
|
||||
}
|
||||
|
||||
interface SourceBufferList {
|
||||
[Symbol.iterator](): IterableIterator<SourceBuffer>;
|
||||
}
|
||||
|
||||
interface StyleSheetList {
|
||||
[Symbol.iterator](): IterableIterator<StyleSheet>;
|
||||
}
|
||||
|
||||
interface TextTrackCueList {
|
||||
[Symbol.iterator](): IterableIterator<TextTrackCue>;
|
||||
}
|
||||
|
||||
interface TextTrackList {
|
||||
[Symbol.iterator](): IterableIterator<TextTrack>;
|
||||
}
|
||||
|
||||
interface TouchList {
|
||||
[Symbol.iterator](): IterableIterator<Touch>;
|
||||
}
|
||||
|
||||
interface URLSearchParams {
|
||||
[Symbol.iterator](): IterableIterator<[string, string]>;
|
||||
/**
|
||||
* Returns an array of key, value pairs for every entry in the search params.
|
||||
*/
|
||||
entries(): IterableIterator<[string, string]>;
|
||||
/**
|
||||
* Returns a list of keys in the search params.
|
||||
*/
|
||||
keys(): IterableIterator<string>;
|
||||
/**
|
||||
* Returns a list of values in the search params.
|
||||
*/
|
||||
values(): IterableIterator<string>;
|
||||
}
|
||||
|
||||
interface VideoTrackList {
|
||||
[Symbol.iterator](): IterableIterator<VideoTrack>;
|
||||
}
|
||||
Vendored
+10
-10
@@ -1,10 +1,10 @@
|
||||
/// <reference path="lib.es2015.core.d.ts" />
|
||||
/// <reference path="lib.es2015.collection.d.ts" />
|
||||
/// <reference path="lib.es2015.generator.d.ts" />
|
||||
/// <reference path="lib.es2015.promise.d.ts" />
|
||||
/// <reference path="lib.es2015.iterable.d.ts" />
|
||||
/// <reference path="lib.es2015.proxy.d.ts" />
|
||||
/// <reference path="lib.es2015.reflect.d.ts" />
|
||||
/// <reference path="lib.es2015.symbol.d.ts" />
|
||||
/// <reference path="lib.es2015.symbol.wellknown.d.ts" />
|
||||
/// <reference path="lib.es5.d.ts" />
|
||||
/// <reference lib="es5" />
|
||||
/// <reference lib="es2015.core" />
|
||||
/// <reference lib="es2015.collection" />
|
||||
/// <reference lib="es2015.generator" />
|
||||
/// <reference lib="es2015.promise" />
|
||||
/// <reference lib="es2015.iterable" />
|
||||
/// <reference lib="es2015.proxy" />
|
||||
/// <reference lib="es2015.reflect" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
/// <reference lib="es2015.symbol.wellknown" />
|
||||
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
/// <reference lib="es2015" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="dom.iterable" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
/// <reference path="lib.es2015.symbol.d.ts" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
|
||||
interface SymbolConstructor {
|
||||
/**
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
/// <reference path="lib.es2015.symbol.d.ts" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
|
||||
interface SymbolConstructor {
|
||||
/**
|
||||
|
||||
Vendored
+2
-2
@@ -1,2 +1,2 @@
|
||||
/// <reference path="lib.es2015.d.ts" />
|
||||
/// <reference path="lib.es2016.array.include.d.ts" />
|
||||
/// <reference lib="es2015" />
|
||||
/// <reference lib="es2016.array.include" />
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
/// <reference lib="es2016" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
/// <reference lib="dom.iterable" />
|
||||
Vendored
+6
-6
@@ -1,6 +1,6 @@
|
||||
/// <reference path="lib.es2016.d.ts" />
|
||||
/// <reference path="lib.es2017.object.d.ts" />
|
||||
/// <reference path="lib.es2017.sharedmemory.d.ts" />
|
||||
/// <reference path="lib.es2017.string.d.ts" />
|
||||
/// <reference path="lib.es2017.intl.d.ts" />
|
||||
/// <reference path="lib.es2017.typedarrays.d.ts" />
|
||||
/// <reference lib="es2016" />
|
||||
/// <reference lib="es2017.object" />
|
||||
/// <reference lib="es2017.sharedmemory" />
|
||||
/// <reference lib="es2017.string" />
|
||||
/// <reference lib="es2017.intl" />
|
||||
/// <reference lib="es2017.typedarrays" />
|
||||
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
/// <reference lib="es2017" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
/// <reference lib="dom.iterable" />
|
||||
Vendored
+2
-2
@@ -1,5 +1,5 @@
|
||||
/// <reference path="lib.es2015.symbol.d.ts" />
|
||||
/// <reference path="lib.es2015.symbol.wellknown.d.ts" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
/// <reference lib="es2015.symbol.wellknown" />
|
||||
|
||||
interface SharedArrayBuffer {
|
||||
/**
|
||||
|
||||
Vendored
+4
-4
@@ -1,4 +1,4 @@
|
||||
/// <reference path="lib.es2017.d.ts" />
|
||||
/// <reference path="lib.es2018.promise.d.ts" />
|
||||
/// <reference path="lib.es2018.regexp.d.ts" />
|
||||
/// <reference path="lib.es2018.intl.d.ts" />
|
||||
/// <reference lib="es2017" />
|
||||
/// <reference lib="es2018.promise" />
|
||||
/// <reference lib="es2018.regexp" />
|
||||
/// <reference lib="es2018.intl" />
|
||||
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
/// <reference lib="es2018" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
/// <reference lib="dom.iterable" />
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
/// <reference lib="es5" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
Vendored
+19
-19
@@ -3,7 +3,7 @@ interface ReadonlyArray<T> {
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array. Then, flattens the result into
|
||||
* a new array.
|
||||
* This is identical to a map followed by a flatten of depth 1.
|
||||
* This is identical to a map followed by flat with depth 1.
|
||||
*
|
||||
* @param callback A function that accepts up to three arguments. The flatMap method calls the
|
||||
* callback function one time for each element in the array.
|
||||
@@ -22,7 +22,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][][][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U[][][]>> |
|
||||
@@ -51,7 +51,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U>[][]> |
|
||||
@@ -71,7 +71,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[][]> |
|
||||
|
||||
ReadonlyArray<ReadonlyArray<U[]>> |
|
||||
@@ -86,7 +86,7 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U[]> |
|
||||
ReadonlyArray<ReadonlyArray<U>>,
|
||||
depth?: 1
|
||||
@@ -98,18 +98,18 @@ interface ReadonlyArray<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this:
|
||||
flat<U>(this:
|
||||
ReadonlyArray<U>,
|
||||
depth: 0
|
||||
): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
|
||||
* specified depth. If no depth is provided, flat method defaults to the depth of 1.
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(depth?: number): any[];
|
||||
flat<U>(depth?: number): any[];
|
||||
}
|
||||
|
||||
interface Array<T> {
|
||||
@@ -117,7 +117,7 @@ interface Array<T> {
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array. Then, flattens the result into
|
||||
* a new array.
|
||||
* This is identical to a map followed by a flatten of depth 1.
|
||||
* This is identical to a map followed by flat with depth 1.
|
||||
*
|
||||
* @param callback A function that accepts up to three arguments. The flatMap method calls the
|
||||
* callback function one time for each element in the array.
|
||||
@@ -135,7 +135,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][][][], depth: 7): U[];
|
||||
flat<U>(this: U[][][][][][][][], depth: 7): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -143,7 +143,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][][], depth: 6): U[];
|
||||
flat<U>(this: U[][][][][][][], depth: 6): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -151,7 +151,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][][], depth: 5): U[];
|
||||
flat<U>(this: U[][][][][][], depth: 5): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -159,7 +159,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][][], depth: 4): U[];
|
||||
flat<U>(this: U[][][][][], depth: 4): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -167,7 +167,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][][], depth: 3): U[];
|
||||
flat<U>(this: U[][][][], depth: 3): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -175,7 +175,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][][], depth: 2): U[];
|
||||
flat<U>(this: U[][][], depth: 2): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -183,7 +183,7 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[][], depth?: 1): U[];
|
||||
flat<U>(this: U[][], depth?: 1): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
@@ -191,13 +191,13 @@ interface Array<T> {
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(this: U[], depth: 0): U[];
|
||||
flat<U>(this: U[], depth: 0): U[];
|
||||
|
||||
/**
|
||||
* Returns a new array with all sub-array elements concatenated into it recursively up to the
|
||||
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
|
||||
* specified depth. If no depth is provided, flat method defaults to the depth of 1.
|
||||
*
|
||||
* @param depth The maximum recursion depth
|
||||
*/
|
||||
flatten<U>(depth?: number): any[];
|
||||
flat<U>(depth?: number): any[];
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -1,5 +1,5 @@
|
||||
/// <reference path="lib.es2015.symbol.d.ts" />
|
||||
/// <reference path="lib.es2015.iterable.d.ts" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
/// <reference lib="es2015.iterable" />
|
||||
|
||||
interface SymbolConstructor {
|
||||
/**
|
||||
|
||||
Vendored
+4
-3
@@ -1,3 +1,4 @@
|
||||
/// <reference path="lib.es2018.d.ts" />
|
||||
/// <reference path="lib.esnext.asynciterable.d.ts" />
|
||||
/// <reference path="lib.esnext.array.d.ts" />
|
||||
/// <reference lib="es2018" />
|
||||
/// <reference lib="esnext.asynciterable" />
|
||||
/// <reference lib="esnext.array" />
|
||||
/// <reference lib="esnext.symbol" />
|
||||
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
/// <reference lib="esnext" />
|
||||
/// <reference lib="dom" />
|
||||
/// <reference lib="webworker.importscripts" />
|
||||
/// <reference lib="scripthost" />
|
||||
/// <reference lib="dom.iterable" />
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
interface Symbol {
|
||||
/**
|
||||
* expose the [[Description]] internal slot of a symbol directly
|
||||
*/
|
||||
readonly description: string;
|
||||
}
|
||||
+4
-53
@@ -9,8 +9,9 @@
|
||||
"esnext",
|
||||
// Host only
|
||||
"dom.generated",
|
||||
"dom.iterable",
|
||||
"dom.iterable.generated",
|
||||
"webworker.generated",
|
||||
"webworker.importscripts",
|
||||
"scripthost",
|
||||
// By-feature options
|
||||
"es2015.core",
|
||||
@@ -33,6 +34,7 @@
|
||||
"es2018.intl",
|
||||
"esnext.asynciterable",
|
||||
"esnext.array",
|
||||
"esnext.symbol",
|
||||
// Default libraries
|
||||
"es5.full",
|
||||
"es2015.full",
|
||||
@@ -43,60 +45,9 @@
|
||||
],
|
||||
"paths": {
|
||||
"dom.generated": "lib.dom.d.ts",
|
||||
"dom.iterable.generated": "lib.dom.iterable.d.ts",
|
||||
"webworker.generated": "lib.webworker.d.ts",
|
||||
"es5.full": "lib.d.ts",
|
||||
"es2015.full": "lib.es6.d.ts"
|
||||
},
|
||||
"sources": {
|
||||
"es5.full": [
|
||||
"es5.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts"
|
||||
],
|
||||
"es2015.full": [
|
||||
"es5.d.ts",
|
||||
"es2015.core.d.ts",
|
||||
"es2015.collection.d.ts",
|
||||
"es2015.generator.d.ts",
|
||||
"es2015.iterable.d.ts",
|
||||
"es2015.promise.d.ts",
|
||||
"es2015.proxy.d.ts",
|
||||
"es2015.reflect.d.ts",
|
||||
"es2015.symbol.d.ts",
|
||||
"es2015.symbol.wellknown.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts",
|
||||
"dom.iterable.d.ts"
|
||||
],
|
||||
"es2016.full": [
|
||||
"es2016.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts",
|
||||
"dom.iterable.d.ts"
|
||||
],
|
||||
"es2017.full": [
|
||||
"es2017.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts",
|
||||
"dom.iterable.d.ts"
|
||||
],
|
||||
"es2018.full": [
|
||||
"es2018.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts",
|
||||
"dom.iterable.d.ts"
|
||||
],
|
||||
"esnext.full": [
|
||||
"esnext.d.ts",
|
||||
"dom.generated.d.ts",
|
||||
"webworker.importscripts.d.ts",
|
||||
"scripthost.d.ts",
|
||||
"dom.iterable.d.ts"
|
||||
]
|
||||
}
|
||||
}
|
||||
Vendored
+1159
-327
File diff suppressed because it is too large
Load Diff
@@ -2619,6 +2619,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[将命名导入转换为命名空间导入]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[将命名空间导入转换为命名导入]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5451,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[对象的类型为 "unknown"。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2619,6 +2619,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[將具名匯入轉換為命名空間匯入]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[將命名空間匯入轉換為具名匯入]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5451,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[物件的類型為 '未知'。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2628,6 +2628,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Převést pojmenované importy na import oboru názvů]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Převést import oboru názvů na pojmenované importy]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5442,6 +5460,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Objekt je typu Neznámý.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2616,6 +2616,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Benannte Importe in Namespaceimport konvertieren]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Namespaceimport in benannte Importe konvertieren]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5430,6 +5448,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Das Objekt ist vom Typ "Unbekannt".]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
@@ -8676,6 +8703,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. A type parameter name was expected without curly braces.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_expected_1179" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. '{' expected.]]></Val>
|
||||
|
||||
@@ -2406,6 +2406,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Class name cannot be 'Object' when targeting ES5 with module {0}.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[El nombre de clase no puede ser "Object" cuando el destino es ES5 con un módulo {0}.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Class static side '{0}' incorrectly extends base class static side '{1}'.]]></Val>
|
||||
@@ -2571,6 +2580,9 @@
|
||||
<Item ItemId=";Convert_0_to_mapped_object_type_95055" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert '{0}' to mapped object type]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertir "{0}" en el tipo de objeto asignado]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
@@ -2619,6 +2631,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertir importaciones con nombre en una importación de espacio de nombres]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertir una importación de espacio de nombres en importaciones con nombre]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5463,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[El objeto es de tipo "desconocido".]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2631,6 +2631,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertir les importations nommées en importation d'espace de noms]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertir l'importation d'espace de noms en importations nommées]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5445,6 +5463,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[L'objet est de type 'unknown'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2619,6 +2619,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertire le importazioni denominate in importazione spazi dei nomi]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Convertire l'importazione spazi dei nomi in importazioni denominate]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5451,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[L'oggetto è di tipo 'unknown'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2619,6 +2619,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[名前付きインポートを名前空間インポートに変換します]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[名前空間インポートを名前付きインポートに変換します]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5451,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[オブジェクト型は 'unknown' です。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
@@ -8682,6 +8709,12 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. A type parameter name was expected without curly braces.]]></Val>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Unexpected_token_expected_1179" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Unexpected token. '{' expected.]]></Val>
|
||||
|
||||
@@ -2619,6 +2619,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[명명된 가져오기를 네임스페이스 가져오기로 변환]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[네임스페이스 가져오기를 명명된 가져오기로 변환]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5433,6 +5451,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[개체가 '알 수 없는' 형식입니다.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2609,6 +2609,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Konwertuj importy nazwane na import przestrzeni nazw]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Konwertuj import przestrzeni nazw na importy nazwane]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5423,6 +5441,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Obiekt jest typu „nieznany”.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2612,6 +2612,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Converter importações nomeadas em importação de namespace]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Converter importação de namespace em importações nomeadas]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5426,6 +5444,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[O objeto é do tipo 'desconhecido'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
@@ -2618,6 +2618,24 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_named_imports_to_namespace_import_95057" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert named imports to namespace import]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Преобразовать операции импорта имен в импорт пространства имен]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_namespace_import_to_named_imports_95056" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert namespace import to named imports]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Преобразовать импорт пространства имен в операции импорта имен]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Convert_require_to_import_95047" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Convert 'require' to 'import']]></Val>
|
||||
@@ -5432,6 +5450,15 @@
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_of_type_unknown_2571" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is of type 'unknown'.]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Объект имеет тип "Неизвестный".]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";Object_is_possibly_null_2531" ItemType="0" PsrId="306" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Object is possibly 'null'.]]></Val>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user