diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt index 1922a1a938e..d538d94210a 100644 --- a/ThirdPartyNotices.txt +++ b/ThirdPartyNotices.txt @@ -50,7 +50,7 @@ This project incorporates components from the projects listed below. The origina 42. textmate/xml.tmbundle (https://github.com/textmate/xml.tmbundle) 43. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle) 44. typescript version 1.5 (https://github.com/Microsoft/TypeScript) -45. typescript version 1.7.5 (https://github.com/Microsoft/TypeScript) +45. typescript version 1.8.2 (https://github.com/Microsoft/TypeScript) 46. typescript-sublime-plugin version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage) 47. unity-shader-files version 0.1.0 (https://github.com/nashella/unity-shader-files) 48. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift) diff --git a/build/gulpfile.plugins.js b/build/gulpfile.plugins.js index 51f0b50c6fa..efbf493216a 100644 --- a/build/gulpfile.plugins.js +++ b/build/gulpfile.plugins.js @@ -114,7 +114,7 @@ var tasks = readAllPlugins() .pipe(tsFilter) .pipe(compilation()) .pipe(tsFilter.restore) - .pipe(quiet ? es.through() : reporter()); + .pipe(quiet ? es.through() : reporter.end()); return es.duplex(input, output); }; diff --git a/build/lib/reporter.js b/build/lib/reporter.js index e3e61b9da91..84c1e9d4805 100644 --- a/build/lib/reporter.js +++ b/build/lib/reporter.js @@ -18,7 +18,7 @@ function onEnd() { } var errors = _.flatten(allErrors); - errors.map(function (err) { console.log('*** Error:', err); }); + errors.map(function (err) { console.error('*** Error:', err); }); console.log('*** Finished with', errors.length, 'errors.'); } @@ -26,17 +26,23 @@ module.exports = function () { var errors = []; allErrors.push(errors); - return function (err) { - if (err) { - errors.push(err); - return; - } + var result = function (err) { + errors.push(err); + }; + result.end = function (emitError) { errors.length = 0; onStart(); return es.through(null, function () { onEnd(); - this.emit('end'); + + if (emitError && errors.length > 0) { + this.emit('error', 'Errors occurred.'); + } else { + this.emit('end'); + } }); }; + + return result; }; \ No newline at end of file diff --git a/extensions/javascript/schemas/jsconfig.schema.json b/extensions/javascript/schemas/jsconfig.schema.json index ebdb4115f64..3c5df132995 100644 --- a/extensions/javascript/schemas/jsconfig.schema.json +++ b/extensions/javascript/schemas/jsconfig.schema.json @@ -29,27 +29,31 @@ "format": "uri" }, "module": { - "description": "Module code generation to resolve against: 'commonjs', 'amd', 'system', or 'umd'.", + "description": "Specify module code generation: 'CommonJS', 'Amd', 'System', 'UMD', 'es6', or 'es2015'.", "enum": [ "commonjs", "amd", + "umd", "system", - "umd" + "es6", + "es2015" ] }, + "noLib": { "description": "Do not include the default library file (lib.d.ts).", "type": "boolean" }, "target": { - "description": "Specify ECMAScript target version: 'ES3', 'ES5', or 'ES6' (default).", + "description": "Specify ECMAScript target version.", "enum": [ "ES3", "ES5", "ES6", "es3", "es5", - "es6" + "es6", + "es2015" ], "default": "ES6" }, diff --git a/extensions/json/server/src/jsonParser.ts b/extensions/json/server/src/jsonParser.ts index 230f7d5b816..810b7d51b0f 100644 --- a/extensions/json/server/src/jsonParser.ts +++ b/extensions/json/server/src/jsonParser.ts @@ -417,9 +417,9 @@ export class StringASTNode extends ASTNode { public value: string; constructor(parent: ASTNode, name: string, isKey: boolean, start: number, end?: number) { + super(parent, 'string', name, start, end); this.isKey = isKey; this.value = ''; - super(parent, 'string', name, start, end); } public getValue(): any { diff --git a/extensions/typescript/OSSREADME.json b/extensions/typescript/OSSREADME.json index a5f61122888..6680f0eac84 100644 --- a/extensions/typescript/OSSREADME.json +++ b/extensions/typescript/OSSREADME.json @@ -192,7 +192,7 @@ }, { "name": "typescript", - "version": "1.8.0", + "version": "1.8.2", "license": "Apache2", "repositoryURL": "https://github.com/Microsoft/TypeScript", "description": "The contents of the folder lib is from the TypeScript project https://github.com/Microsoft/TypeScript.", diff --git a/extensions/typescript/server/typescript/lib/tsserver.js b/extensions/typescript/server/typescript/lib/tsserver.js index 769b53e189a..fa283aa461d 100644 --- a/extensions/typescript/server/typescript/lib/tsserver.js +++ b/extensions/typescript/server/typescript/lib/tsserver.js @@ -13,6 +13,11 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; var ts; (function (ts) { var OperationCanceledException = (function () { @@ -1042,7 +1047,7 @@ var ts; var filePath = typeof relativeFileName !== "string" ? undefined : ts.toPath(relativeFileName, baseDirPath, ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)); - if (eventName === "change" && fileWatcherCallbacks.contains(filePath)) { + if ((eventName === "change" || eventName === "rename") && fileWatcherCallbacks.contains(filePath)) { for (var _i = 0, _a = fileWatcherCallbacks.get(filePath); _i < _a.length; _i++) { var fileCallback = _a[_i]; fileCallback(filePath); @@ -1342,7 +1347,7 @@ var ts; Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: ts.DiagnosticCategory.Error, key: "Modifiers_not_permitted_on_index_signature_members_1145", message: "Modifiers not permitted on index signature members." }, Declaration_expected: { code: 1146, category: ts.DiagnosticCategory.Error, key: "Declaration_expected_1146", message: "Declaration expected." }, Import_declarations_in_a_namespace_cannot_reference_a_module: { code: 1147, category: ts.DiagnosticCategory.Error, key: "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", message: "Import declarations in a namespace cannot reference a module." }, - Cannot_compile_modules_unless_the_module_flag_is_provided_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_unless_the_module_flag_is_provided_Consider_setting_the_module_compiler_optio_1148", message: "Cannot compile modules unless the '--module' flag is provided. Consider setting the 'module' compiler option in a 'tsconfig.json' file." }, + Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting__1148", message: "Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file." }, File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: ts.DiagnosticCategory.Error, key: "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", message: "File name '{0}' differs from already included file name '{1}' only in casing" }, new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: ts.DiagnosticCategory.Error, key: "new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150", message: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, const_declarations_must_be_initialized: { code: 1155, category: ts.DiagnosticCategory.Error, key: "const_declarations_must_be_initialized_1155", message: "'const' declarations must be initialized" }, @@ -1402,7 +1407,7 @@ var ts; Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: { code: 1214, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", message: "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode." }, Invalid_use_of_0_Modules_are_automatically_in_strict_mode: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", message: "Invalid use of '{0}'. Modules are automatically in strict mode." }, Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: ts.DiagnosticCategory.Error, key: "Export_assignment_is_not_supported_when_module_flag_is_system_1218", message: "Export assignment is not supported when '--module' flag is 'system'." }, - Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Specify_experimentalDecorators_to_remove_this_warning: { code: 1219, category: ts.DiagnosticCategory.Error, key: "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Speci_1219", message: "Experimental support for decorators is a feature that is subject to change in a future release. Specify '--experimentalDecorators' to remove this warning." }, + Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: { code: 1219, category: ts.DiagnosticCategory.Error, key: "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219", message: "Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning." }, Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 1220, category: ts.DiagnosticCategory.Error, key: "Generators_are_only_available_when_targeting_ECMAScript_6_or_higher_1220", message: "Generators are only available when targeting ECMAScript 6 or higher." }, Generators_are_not_allowed_in_an_ambient_context: { code: 1221, category: ts.DiagnosticCategory.Error, key: "Generators_are_not_allowed_in_an_ambient_context_1221", message: "Generators are not allowed in an ambient context." }, An_overload_signature_cannot_be_declared_as_a_generator: { code: 1222, category: ts.DiagnosticCategory.Error, key: "An_overload_signature_cannot_be_declared_as_a_generator_1222", message: "An overload signature cannot be declared as a generator." }, @@ -1411,6 +1416,7 @@ var ts; Cannot_find_parameter_0: { code: 1225, category: ts.DiagnosticCategory.Error, key: "Cannot_find_parameter_0_1225", message: "Cannot find parameter '{0}'." }, Type_predicate_0_is_not_assignable_to_1: { code: 1226, category: ts.DiagnosticCategory.Error, key: "Type_predicate_0_is_not_assignable_to_1_1226", message: "Type predicate '{0}' is not assignable to '{1}'." }, Parameter_0_is_not_in_the_same_position_as_parameter_1: { code: 1227, category: ts.DiagnosticCategory.Error, key: "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", message: "Parameter '{0}' is not in the same position as parameter '{1}'." }, + A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: { code: 1228, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", message: "A type predicate is only allowed in return type position for functions and methods." }, A_type_predicate_cannot_reference_a_rest_parameter: { code: 1229, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_a_rest_parameter_1229", message: "A type predicate cannot reference a rest parameter." }, A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: { code: 1230, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", message: "A type predicate cannot reference element '{0}' in a binding pattern." }, An_export_assignment_can_only_be_used_in_a_module: { code: 1231, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_can_only_be_used_in_a_module_1231", message: "An export assignment can only be used in a module." }, @@ -1685,6 +1691,7 @@ var ts; export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: { code: 2669, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", message: "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations." }, Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: { code: 2670, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", message: "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context." }, + Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: { code: 2671, category: ts.DiagnosticCategory.Error, key: "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", message: "Cannot augment module '{0}' because it resolves to a non-module entity." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import_declaration_0_is_using_private_name_1_4000", message: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", message: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", message: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, @@ -1807,7 +1814,7 @@ var ts; Generates_corresponding_map_file: { code: 6043, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_map_file_6043", message: "Generates corresponding '.map' file." }, Compiler_option_0_expects_an_argument: { code: 6044, category: ts.DiagnosticCategory.Error, key: "Compiler_option_0_expects_an_argument_6044", message: "Compiler option '{0}' expects an argument." }, Unterminated_quoted_string_in_response_file_0: { code: 6045, category: ts.DiagnosticCategory.Error, key: "Unterminated_quoted_string_in_response_file_0_6045", message: "Unterminated quoted string in response file '{0}'." }, - Argument_for_module_option_must_be_commonjs_amd_system_umd_or_es2015: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument_for_module_option_must_be_commonjs_amd_system_umd_or_es2015_6046", message: "Argument for '--module' option must be 'commonjs', 'amd', 'system', 'umd', or 'es2015'." }, + Argument_for_module_option_must_be_commonjs_amd_system_umd_es2015_or_none: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument_for_module_option_must_be_commonjs_amd_system_umd_es2015_or_none_6046", message: "Argument for '--module' option must be 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'none'." }, Argument_for_target_option_must_be_ES3_ES5_or_ES2015: { code: 6047, category: ts.DiagnosticCategory.Error, key: "Argument_for_target_option_must_be_ES3_ES5_or_ES2015_6047", message: "Argument for '--target' option must be 'ES3', 'ES5', or 'ES2015'." }, Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: ts.DiagnosticCategory.Error, key: "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", message: "Locale must be of the form or -. For example '{0}' or '{1}'." }, Unsupported_locale_0: { code: 6049, category: ts.DiagnosticCategory.Error, key: "Unsupported_locale_0_6049", message: "Unsupported locale '{0}'." }, @@ -1842,6 +1849,7 @@ var ts; Only_amd_and_system_modules_are_supported_alongside_0: { code: 6082, category: ts.DiagnosticCategory.Error, key: "Only_amd_and_system_modules_are_supported_alongside_0_6082", message: "Only 'amd' and 'system' modules are supported alongside --{0}." }, Allow_javascript_files_to_be_compiled: { code: 6083, category: ts.DiagnosticCategory.Message, key: "Allow_javascript_files_to_be_compiled_6083", message: "Allow javascript files to be compiled." }, Specifies_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit: { code: 6084, category: ts.DiagnosticCategory.Message, key: "Specifies_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit_6084", message: "Specifies the object invoked for createElement and __spread when targeting 'react' JSX emit" }, + Do_not_emit_use_strict_directives_in_module_output: { code: 6112, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_use_strict_directives_in_module_output_6112", message: "Do not emit 'use strict' directives in module output." }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, @@ -1880,7 +1888,6 @@ var ts; property_declarations_can_only_be_used_in_a_ts_file: { code: 8014, category: ts.DiagnosticCategory.Error, key: "property_declarations_can_only_be_used_in_a_ts_file_8014", message: "'property declarations' can only be used in a .ts file." }, enum_declarations_can_only_be_used_in_a_ts_file: { code: 8015, category: ts.DiagnosticCategory.Error, key: "enum_declarations_can_only_be_used_in_a_ts_file_8015", message: "'enum declarations' can only be used in a .ts file." }, type_assertion_expressions_can_only_be_used_in_a_ts_file: { code: 8016, category: ts.DiagnosticCategory.Error, key: "type_assertion_expressions_can_only_be_used_in_a_ts_file_8016", message: "'type assertion expressions' can only be used in a .ts file." }, - decorators_can_only_be_used_in_a_ts_file: { code: 8017, category: ts.DiagnosticCategory.Error, key: "decorators_can_only_be_used_in_a_ts_file_8017", message: "'decorators' can only be used in a .ts file." }, Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { code: 9002, category: ts.DiagnosticCategory.Error, key: "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002", message: "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses." }, class_expressions_are_not_currently_supported: { code: 9003, category: ts.DiagnosticCategory.Error, key: "class_expressions_are_not_currently_supported_9003", message: "'class' expressions are not currently supported." }, JSX_attributes_must_only_be_assigned_a_non_empty_expression: { code: 17000, category: ts.DiagnosticCategory.Error, key: "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", message: "JSX attributes must only be assigned a non-empty 'expression'." }, @@ -1891,7 +1898,8 @@ var ts; A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: { code: 17005, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", message: "A constructor cannot contain a 'super' call when its class extends 'null'" }, An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17006, category: ts.DiagnosticCategory.Error, key: "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", message: "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }, A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17007, category: ts.DiagnosticCategory.Error, key: "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", message: "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }, - JSX_element_0_has_no_corresponding_closing_tag: { code: 17008, category: ts.DiagnosticCategory.Error, key: "JSX_element_0_has_no_corresponding_closing_tag_17008", message: "JSX element '{0}' has no corresponding closing tag." } + JSX_element_0_has_no_corresponding_closing_tag: { code: 17008, category: ts.DiagnosticCategory.Error, key: "JSX_element_0_has_no_corresponding_closing_tag_17008", message: "JSX element '{0}' has no corresponding closing tag." }, + super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { code: 17009, category: ts.DiagnosticCategory.Error, key: "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", message: "'super' must be called before accessing 'this' in the constructor of a derived class." } }; })(ts || (ts = {})); var ts; @@ -3444,6 +3452,7 @@ var ts; name: "module", shortName: "m", type: { + "none": 0, "commonjs": 1, "amd": 2, "system": 4, @@ -3453,7 +3462,7 @@ var ts; }, description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015, paramType: ts.Diagnostics.KIND, - error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_amd_system_umd_or_es2015 + error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_amd_system_umd_es2015_or_none }, { name: "newLine", @@ -3659,6 +3668,16 @@ var ts; name: "allowJs", type: "boolean", description: ts.Diagnostics.Allow_javascript_files_to_be_compiled + }, + { + name: "noImplicitUseStrict", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output + }, + { + name: "noCustomAsyncPromise", + type: "boolean", + experimental: true } ]; var optionNameMapCache; @@ -3835,7 +3854,18 @@ var ts; } else { var filesSeen = {}; - var exclude = json["exclude"] instanceof Array ? ts.map(json["exclude"], ts.normalizeSlashes) : undefined; + var exclude = []; + if (json["exclude"] instanceof Array) { + exclude = json["exclude"]; + } + else { + exclude = ["node_modules"]; + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); + } + } + exclude = ts.map(exclude, ts.normalizeSlashes); var supportedExtensions = ts.getSupportedExtensions(options); ts.Debug.assert(ts.indexOf(supportedExtensions, ".ts") < ts.indexOf(supportedExtensions, ".d.ts"), "Changed priority of extensions to pick"); for (var _i = 0, supportedExtensions_1 = supportedExtensions; _i < supportedExtensions_1.length; _i++) { @@ -3846,6 +3876,9 @@ var ts; if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { continue; } + if (/\.min\.js$/.test(fileName)) { + continue; + } if (extension === ".d.ts" || (options.allowJs && ts.contains(ts.supportedJavascriptExtensions, extension))) { var baseName = fileName.substr(0, fileName.length - extension.length); if (ts.hasProperty(filesSeen, baseName + ".ts") || ts.hasProperty(filesSeen, baseName + ".tsx")) { @@ -3865,7 +3898,6 @@ var ts; var options = {}; var errors = []; if (configFileName && ts.getBaseFileName(configFileName) === "jsconfig.json") { - options.module = 1; options.allowJs = true; } if (!jsonOptions) { @@ -4270,6 +4302,10 @@ var ts; return !!(getCombinedNodeFlags(node) & 8192); } ts.isLet = isLet; + function isSuperCallExpression(n) { + return n.kind === 171 && n.expression.kind === 95; + } + ts.isSuperCallExpression = isSuperCallExpression; function isPrologueDirective(node) { return node.kind === 198 && node.expression.kind === 9; } @@ -4514,6 +4550,10 @@ var ts; return predicate && predicate.kind === 1; } ts.isIdentifierTypePredicate = isIdentifierTypePredicate; + function isThisTypePredicate(predicate) { + return predicate && predicate.kind === 0; + } + ts.isThisTypePredicate = isThisTypePredicate; function getContainingFunction(node) { while (true) { node = node.parent; @@ -4807,11 +4847,12 @@ var ts; return node && !!(node.parserContextFlags & 32); } ts.isInJavaScriptFile = isInJavaScriptFile; - function isRequireCall(expression) { - return expression.kind === 171 && + function isRequireCall(expression, checkArgumentIsStringLiteral) { + var isRequire = expression.kind === 171 && expression.expression.kind === 69 && expression.expression.text === "require" && expression.arguments.length === 1; + return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9); } ts.isRequireCall = isRequireCall; function getSpecialPropertyAssignmentKind(expression) { @@ -4908,7 +4949,21 @@ var ts; node.parent.initializer === node && node.parent.parent.parent.kind === 196; var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; - return variableStatementNode && variableStatementNode.jsDocComment; + if (variableStatementNode) { + return variableStatementNode.jsDocComment; + } + var parent_3 = node.parent; + var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && + parent_3.kind === 184 && + parent_3.operatorToken.kind === 56 && + parent_3.parent.kind === 198; + if (isSourceOfAssignmentExpressionStatement) { + return parent_3.parent.jsDocComment; + } + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 248; + if (isPropertyAssignmentExpression) { + return parent_3.jsDocComment; + } } return undefined; } @@ -5565,9 +5620,9 @@ var ts; } ts.getEmitScriptTarget = getEmitScriptTarget; function getEmitModuleKind(compilerOptions) { - return compilerOptions.module ? + return typeof compilerOptions.module === "number" ? compilerOptions.module : - getEmitScriptTarget(compilerOptions) === 2 ? 5 : 0; + getEmitScriptTarget(compilerOptions) === 2 ? 5 : 1; } ts.getEmitModuleKind = getEmitModuleKind; function forEachExpectedEmitFile(host, action, targetSourceFile) { @@ -5585,7 +5640,18 @@ var ts; } } function onSingleFileEmit(host, sourceFile) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, sourceFile.languageVariant === 1 && options.jsx === 1 ? ".jsx" : ".js"); + var extension = ".js"; + if (options.jsx === 1) { + if (isSourceFileJavaScript(sourceFile)) { + if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) { + extension = ".jsx"; + } + } + else if (sourceFile.languageVariant === 1) { + extension = ".jsx"; + } + } + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, extension); var emitFileNames = { jsFilePath: jsFilePath, sourceMapFilePath: getSourceMapFilePath(jsFilePath, options), @@ -7537,7 +7603,7 @@ var ts; } return finishNode(node); } - function parseTypePredicate(lhs) { + function parseThisTypePredicate(lhs) { nextToken(); var node = createNode(151, lhs.pos); node.parameterName = lhs; @@ -7842,7 +7908,7 @@ var ts; case 97: { var thisKeyword = parseThisTypeNode(); if (token === 124 && !scanner.hasPrecedingLineBreak()) { - return parseTypePredicate(thisKeyword); + return parseThisTypePredicate(thisKeyword); } else { return thisKeyword; @@ -8884,7 +8950,7 @@ var ts; shorthandDeclaration.equalsToken = equalsToken; shorthandDeclaration.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher); } - return finishNode(shorthandDeclaration); + return addJSDocComment(finishNode(shorthandDeclaration)); } else { var propertyAssignment = createNode(248, fullStart); @@ -8893,7 +8959,7 @@ var ts; propertyAssignment.questionToken = questionToken; parseExpected(54); propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher); - return finishNode(propertyAssignment); + return addJSDocComment(finishNode(propertyAssignment)); } } function parseObjectLiteralExpression() { @@ -8927,7 +8993,7 @@ var ts; if (saveDecoratorContext) { setDecoratorContext(true); } - return finishNode(node); + return addJSDocComment(finishNode(node)); } function parseOptionalIdentifier() { return isIdentifier() ? parseIdentifier() : undefined; @@ -9149,13 +9215,13 @@ var ts; var labeledStatement = createNode(210, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); - return finishNode(labeledStatement); + return addJSDocComment(finishNode(labeledStatement)); } else { var expressionStatement = createNode(198, fullStart); expressionStatement.expression = expression; parseSemicolon(); - return finishNode(expressionStatement); + return addJSDocComment(finishNode(expressionStatement)); } } function nextTokenIsIdentifierOrKeywordOnSameLine() { @@ -9510,7 +9576,7 @@ var ts; parseExpected(121); fillSignature(54, false, false, false, node); node.body = parseFunctionBlockOrSemicolon(false, false, ts.Diagnostics.or_expected); - return finishNode(node); + return addJSDocComment(finishNode(node)); } function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { var method = createNode(144, fullStart); @@ -9523,7 +9589,7 @@ var ts; var isAsync = !!(method.flags & 256); fillSignature(54, isGenerator, isAsync, false, method); method.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage); - return finishNode(method); + return addJSDocComment(finishNode(method)); } function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { var property = createNode(142, fullStart); @@ -10228,18 +10294,26 @@ var ts; function parseJSDocParameter() { var parameter = createNode(139); parameter.type = parseJSDocType(); + if (parseOptional(56)) { + parameter.questionToken = createNode(56); + } return finishNode(parameter); } function parseJSDocTypeReference() { var result = createNode(262); result.name = parseSimplePropertyName(); - while (parseOptional(21)) { - if (token === 25) { - result.typeArguments = parseTypeArguments(); - break; - } - else { - result.name = parseQualifiedName(result.name); + if (token === 25) { + result.typeArguments = parseTypeArguments(); + } + else { + while (parseOptional(21)) { + if (token === 25) { + result.typeArguments = parseTypeArguments(); + break; + } + else { + result.name = parseQualifiedName(result.name); + } } } return finishNode(result); @@ -11824,7 +11898,7 @@ var ts; if (!container.symbol || !container.symbol.exports) { bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); } - else if (boundExpression.kind === 69) { + else if (boundExpression.kind === 69 && node.kind === 230) { declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608); } else { @@ -11861,22 +11935,27 @@ var ts; function bindThisPropertyAssignment(node) { if (container.kind === 176 || container.kind === 216) { container.symbol.members = container.symbol.members || {}; - declareSymbol(container.symbol.members, container.symbol, node, 4, 107455); + declareSymbol(container.symbol.members, container.symbol, node, 4, 107455 & ~4); } } function bindPrototypePropertyAssignment(node) { - var classId = node.left.expression.expression; - var funcSymbol = container.locals[classId.text]; + var leftSideOfAssignment = node.left; + var classPrototype = leftSideOfAssignment.expression; + var constructorFunction = classPrototype.expression; + leftSideOfAssignment.parent = node; + constructorFunction.parent = classPrototype; + classPrototype.parent = leftSideOfAssignment; + var funcSymbol = container.locals[constructorFunction.text]; if (!funcSymbol || !(funcSymbol.flags & 16)) { return; } if (!funcSymbol.members) { funcSymbol.members = {}; } - declareSymbol(funcSymbol.members, funcSymbol, node.left, 4, 107455); + declareSymbol(funcSymbol.members, funcSymbol, leftSideOfAssignment, 4, 107455); } function bindCallExpression(node) { - if (!file.commonJsModuleIndicator && ts.isRequireCall(node)) { + if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) { setCommonJsModuleIndicator(node); } } @@ -12108,7 +12187,7 @@ var ts; var emptySymbols = {}; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0; - var modulekind = compilerOptions.module ? compilerOptions.module : languageVersion === 2 ? 5 : 0; + var modulekind = ts.getEmitModuleKind(compilerOptions); var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === 4; var emitResolver = createResolver(); var undefinedSymbol = createSymbol(4 | 67108864, "undefined"); @@ -12175,8 +12254,8 @@ var ts; var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); anyFunctionType.flags |= 8388608; var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false); - var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false); + var anySignature = createSignature(undefined, undefined, emptyArray, anyType, undefined, 0, false, false); + var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, undefined, 0, false, false); var globals = {}; var globalESSymbolConstructorSymbol; var getGlobalPromiseConstructorSymbol; @@ -12410,8 +12489,14 @@ var ts; if (!mainModule) { return; } - mainModule = mainModule.flags & 33554432 ? mainModule : cloneSymbol(mainModule); - mergeSymbol(mainModule, moduleAugmentation.symbol); + mainModule = resolveExternalModuleSymbol(mainModule); + if (mainModule.flags & 1536) { + mainModule = mainModule.flags & 33554432 ? mainModule : cloneSymbol(mainModule); + mergeSymbol(mainModule, moduleAugmentation.symbol); + } + else { + error(moduleName, ts.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); + } } } function addToSymbolTable(target, source, message) { @@ -12755,7 +12840,7 @@ var ts; error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); } else if (!exportDefaultSymbol && allowSyntheticDefaultImports) { - return resolveSymbol(moduleSymbol.exports["export="]) || resolveSymbol(moduleSymbol); + return resolveExternalModuleSymbol(moduleSymbol) || resolveSymbol(moduleSymbol); } return exportDefaultSymbol; } @@ -12977,7 +13062,7 @@ var ts; return undefined; } function resolveExternalModuleSymbol(moduleSymbol) { - return moduleSymbol && resolveSymbol(moduleSymbol.exports["export="]) || moduleSymbol; + return moduleSymbol && getMergedSymbol(resolveSymbol(moduleSymbol.exports["export="])) || moduleSymbol; } function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression) { var symbol = resolveExternalModuleSymbol(moduleSymbol); @@ -12987,8 +13072,8 @@ var ts; } return symbol; } - function getExportAssignmentSymbol(moduleSymbol) { - return moduleSymbol.exports["export="]; + function hasExportAssignmentSymbol(moduleSymbol) { + return moduleSymbol.exports["export="] !== undefined; } function getExportsOfModuleAsArray(moduleSymbol) { return symbolsToArray(getExportsOfModule(moduleSymbol)); @@ -13362,6 +13447,13 @@ var ts; } return result; } + function typePredicateToString(typePredicate, enclosingDeclaration, flags) { + var writer = ts.getSingleLineStringWriter(); + getSymbolDisplayBuilder().buildTypePredicateDisplay(typePredicate, writer, enclosingDeclaration, flags); + var result = writer.string(); + ts.releaseStringWriter(writer); + return result; + } function getTypeAliasForTypeLiteral(type) { if (type.symbol && type.symbol.flags & 2048) { var node = type.symbol.declarations[0].parent; @@ -13455,15 +13547,9 @@ var ts; return writeType(type, globalFlags); function writeType(type, flags) { if (type.flags & 16777343) { - if (type.flags & 134217728) { - buildTypePredicateDisplay(writer, type.predicate); - buildTypeDisplay(type.predicate.type, writer, enclosingDeclaration, flags, symbolStack); - } - else { - writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) - ? "any" - : type.intrinsicName); - } + writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) + ? "any" + : type.intrinsicName); } else if (type.flags & 33554432) { if (inObjectTypeLiteral) { @@ -13540,12 +13626,12 @@ var ts; var length_1 = outerTypeParameters.length; while (i < length_1) { var start = i; - var parent_3 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + var parent_4 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; - } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_3); + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_4); if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { - writeSymbolTypeReference(parent_3, typeArguments, start, i, flags); + writeSymbolTypeReference(parent_4, typeArguments, start, i, flags); writePunctuation(writer, 21); } } @@ -13732,10 +13818,10 @@ var ts; inObjectTypeLiteral = saveInObjectTypeLiteral; } } - function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) { + function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration, flags) { var targetSymbol = getTargetSymbol(symbol); if (targetSymbol.flags & 32 || targetSymbol.flags & 64 || targetSymbol.flags & 524288) { - buildDisplayForTypeParametersAndDelimiters(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaraiton, flags); + buildDisplayForTypeParametersAndDelimiters(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaration, flags); } } function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, symbolStack) { @@ -13798,7 +13884,7 @@ var ts; } writePunctuation(writer, 18); } - function buildTypePredicateDisplay(writer, predicate) { + function buildTypePredicateDisplay(predicate, writer, enclosingDeclaration, flags, symbolStack) { if (ts.isIdentifierTypePredicate(predicate)) { writer.writeParameter(predicate.parameterName); } @@ -13808,6 +13894,7 @@ var ts; writeSpace(writer); writeKeyword(writer, 124); writeSpace(writer); + buildTypeDisplay(predicate.type, writer, enclosingDeclaration, flags, symbolStack); } function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) { if (flags & 8) { @@ -13818,8 +13905,13 @@ var ts; writePunctuation(writer, 54); } writeSpace(writer); - var returnType = getReturnTypeOfSignature(signature); - buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack); + if (signature.typePredicate) { + buildTypePredicateDisplay(signature.typePredicate, writer, enclosingDeclaration, flags, symbolStack); + } + else { + var returnType = getReturnTypeOfSignature(signature); + buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack); + } } function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind, symbolStack) { if (kind === 1) { @@ -13839,6 +13931,7 @@ var ts; buildSymbolDisplay: buildSymbolDisplay, buildTypeDisplay: buildTypeDisplay, buildTypeParameterDisplay: buildTypeParameterDisplay, + buildTypePredicateDisplay: buildTypePredicateDisplay, buildParameterDisplay: buildParameterDisplay, buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters, buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters, @@ -13875,12 +13968,12 @@ var ts; if (ts.isExternalModuleAugmentation(node)) { return true; } - var parent_4 = getDeclarationContainer(node); + var parent_5 = getDeclarationContainer(node); if (!(ts.getCombinedNodeFlags(node) & 2) && - !(node.kind !== 224 && parent_4.kind !== 251 && ts.isInAmbientContext(parent_4))) { - return isGlobalSourceFile(parent_4); + !(node.kind !== 224 && parent_5.kind !== 251 && ts.isInAmbientContext(parent_5))) { + return isGlobalSourceFile(parent_5); } - return isDeclarationVisible(parent_4); + return isDeclarationVisible(parent_5); case 142: case 141: case 146: @@ -14018,7 +14111,7 @@ var ts; } } function getTypeOfPrototypeProperty(prototype) { - var classType = getDeclaredTypeOfSymbol(getMergedSymbol(prototype.parent)); + var classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; } function getTypeOfPropertyOfType(type, name) { @@ -14107,14 +14200,14 @@ var ts; } function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration) { var typeTag = ts.getJSDocTypeTag(declaration); - if (typeTag) { + if (typeTag && typeTag.typeExpression) { return typeTag.typeExpression.type; } if (declaration.kind === 214 && declaration.parent.kind === 215 && declaration.parent.parent.kind === 196) { var annotation = ts.getJSDocTypeTag(declaration.parent.parent); - if (annotation) { + if (annotation && annotation.typeExpression) { return annotation.typeExpression.type; } } @@ -14230,9 +14323,6 @@ var ts; if (declaration.kind === 248) { return type; } - if (type.flags & 134217728 && (declaration.kind === 142 || declaration.kind === 141)) { - return type; - } return getWidenedType(type); } type = declaration.dotDotDotToken ? anyArrayType : anyType; @@ -14258,7 +14348,7 @@ var ts; return links.type = checkExpression(declaration.expression); } if (declaration.kind === 184) { - return links.type = checkExpression(declaration.right); + return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); } if (declaration.kind === 169) { if (declaration.parent.kind === 184) { @@ -14847,25 +14937,26 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; sig.resolvedReturnType = resolvedReturnType; + sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; sig.hasRestParameter = hasRestParameter; sig.hasStringLiterals = hasStringLiterals; return sig; } function cloneSignature(sig) { - return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); + return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); var baseSignatures = getSignaturesOfType(baseConstructorType, 1); if (baseSignatures.length === 0) { - return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, 0, false, false)]; + return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, false, false)]; } var baseTypeNode = getBaseTypeNodeOfClass(classType); var typeArguments = ts.map(baseTypeNode.typeArguments, getTypeFromTypeNode); @@ -15303,6 +15394,7 @@ var ts; var minArgumentCount = -1; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); var returnType = undefined; + var typePredicate = undefined; for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { var param = declaration.parameters[i]; var paramSymbol = param.symbol; @@ -15335,6 +15427,9 @@ var ts; } else if (declaration.type) { returnType = getTypeFromTypeNode(declaration.type); + if (declaration.type.kind === 151) { + typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); + } } else { if (declaration.parserContextFlags & 32) { @@ -15351,7 +15446,7 @@ var ts; returnType = anyType; } } - links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); + links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -15932,22 +16027,6 @@ var ts; } return links.resolvedType; } - function getPredicateType(node) { - return createPredicateType(getSymbolOfNode(node), createTypePredicateFromTypePredicateNode(node)); - } - function createPredicateType(symbol, predicate) { - var type = createType(8 | 134217728); - type.symbol = symbol; - type.predicate = predicate; - return type; - } - function getTypeFromPredicateTypeNode(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - links.resolvedType = getPredicateType(node); - } - return links.resolvedType; - } function getTypeFromTypeNode(node) { switch (node.kind) { case 117: @@ -15972,7 +16051,7 @@ var ts; case 262: return getTypeFromTypeReference(node); case 151: - return getTypeFromPredicateTypeNode(node); + return booleanType; case 191: return getTypeFromTypeReference(node); case 155: @@ -16111,6 +16190,7 @@ var ts; } function instantiateSignature(signature, mapper, eraseTypeParameters) { var freshTypeParameters; + var freshTypePredicate; if (signature.typeParameters && !eraseTypeParameters) { freshTypeParameters = ts.map(signature.typeParameters, cloneTypeParameter); mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); @@ -16119,7 +16199,10 @@ var ts; tp.mapper = mapper; } } - var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); + if (signature.typePredicate) { + freshTypePredicate = cloneTypePredicate(signature.typePredicate, mapper); + } + var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), freshTypePredicate, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); result.target = signature; result.mapper = mapper; return result; @@ -16177,10 +16260,6 @@ var ts; if (type.flags & 32768) { return getIntersectionType(instantiateList(type.types, mapper, instantiateType)); } - if (type.flags & 134217728) { - var predicate = type.predicate; - return createPredicateType(type.symbol, cloneTypePredicate(predicate, mapper)); - } } return type; } @@ -16284,18 +16363,48 @@ var ts; return result; } var sourceReturnType = getReturnTypeOfSignature(source); - if (targetReturnType.flags & 134217728 && targetReturnType.predicate.kind === 1) { - if (!(sourceReturnType.flags & 134217728)) { + if (target.typePredicate) { + if (source.typePredicate) { + result &= compareTypePredicateRelatedTo(source.typePredicate, target.typePredicate, reportErrors, errorReporter, compareTypes); + } + else if (ts.isIdentifierTypePredicate(target.typePredicate)) { if (reportErrors) { errorReporter(ts.Diagnostics.Signature_0_must_have_a_type_predicate, signatureToString(source)); } return 0; } } - result &= compareTypes(sourceReturnType, targetReturnType, reportErrors); + else { + result &= compareTypes(sourceReturnType, targetReturnType, reportErrors); + } } return result; } + function compareTypePredicateRelatedTo(source, target, reportErrors, errorReporter, compareTypes) { + if (source.kind !== target.kind) { + if (reportErrors) { + errorReporter(ts.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0; + } + if (source.kind === 1) { + var sourceIdentifierPredicate = source; + var targetIdentifierPredicate = target; + if (sourceIdentifierPredicate.parameterIndex !== targetIdentifierPredicate.parameterIndex) { + if (reportErrors) { + errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourceIdentifierPredicate.parameterName, targetIdentifierPredicate.parameterName); + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0; + } + } + var related = compareTypes(source.type, target.type, reportErrors); + if (related === 0 && reportErrors) { + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return related; + } function isImplementationCompatibleWithOverload(implementation, overload) { var erasedSource = getErasedSignature(implementation); var erasedTarget = getErasedSignature(overload); @@ -16391,33 +16500,6 @@ var ts; return -1; } if (source.flags & 8 && target.flags & 8) { - if (source.flags & 134217728 && target.flags & 134217728) { - var sourcePredicate = source; - var targetPredicate = target; - if (sourcePredicate.predicate.kind !== targetPredicate.predicate.kind) { - if (reportErrors) { - reportError(ts.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); - reportError(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typeToString(source), typeToString(target)); - } - return 0; - } - if (sourcePredicate.predicate.kind === 1) { - var sourceIdentifierPredicate = sourcePredicate.predicate; - var targetIdentifierPredicate = targetPredicate.predicate; - if (sourceIdentifierPredicate.parameterIndex !== targetIdentifierPredicate.parameterIndex) { - if (reportErrors) { - reportError(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourceIdentifierPredicate.parameterName, targetIdentifierPredicate.parameterName); - reportError(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typeToString(source), typeToString(target)); - } - return 0; - } - } - var related = isRelatedTo(sourcePredicate.predicate.type, targetPredicate.predicate.type, reportErrors, headMessage); - if (related === 0 && reportErrors) { - reportError(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typeToString(source), typeToString(target)); - } - return related; - } return -1; } if (source.flags & 1048576) { @@ -16724,8 +16806,8 @@ var ts; } else if (targetPropFlags & 32) { var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32; - var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined; - var targetClass = getDeclaredTypeOfSymbol(targetProp.parent); + var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(getParentOfSymbol(sourceProp)) : undefined; + var targetClass = getDeclaredTypeOfSymbol(getParentOfSymbol(targetProp)); if (!sourceClass || !hasBaseType(sourceClass, targetClass)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass)); @@ -17127,13 +17209,10 @@ var ts; return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType); } function getWidenedType(type) { - if (type.flags & 140509184) { + if (type.flags & 6291456) { if (type.flags & (32 | 64)) { return anyType; } - if (type.flags & 134217728) { - return booleanType; - } if (type.flags & 524288) { return getWidenedTypeOfObjectLiteral(type); } @@ -17322,11 +17401,6 @@ var ts; inferFromTypes(sourceTypes[i], targetTypes[i]); } } - else if (source.flags & 134217728 && target.flags & 134217728) { - if (source.predicate.kind === target.predicate.kind) { - inferFromTypes(source.predicate.type, target.predicate.type); - } - } else if (source.flags & 8192 && target.flags & 8192 && source.elementTypes.length === target.elementTypes.length) { var sourceTypes = source.elementTypes; var targetTypes = target.elementTypes; @@ -17411,7 +17485,12 @@ var ts; } function inferFromSignature(source, target) { forEachMatchingParameterType(source, target, inferFromTypes); - inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + if (source.typePredicate && target.typePredicate && source.typePredicate.kind === target.typePredicate.kind) { + inferFromTypes(source.typePredicate.type, target.typePredicate.type); + } + else { + inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + } } function inferFromIndexTypes(source, target, sourceKind, targetKind) { var targetIndexType = getIndexTypeOfType(target, targetKind); @@ -17760,42 +17839,30 @@ var ts; } return originalType; } - function narrowTypeByTypePredicate(type, expr, assumeTrue) { + function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { if (type.flags & 1) { return type; } - var signature = getResolvedSignature(expr); - var predicateType = getReturnTypeOfSignature(signature); - if (!predicateType || !(predicateType.flags & 134217728)) { + var signature = getResolvedSignature(callExpression); + var predicate = signature.typePredicate; + if (!predicate) { return type; } - var predicate = predicateType.predicate; if (ts.isIdentifierTypePredicate(predicate)) { - var callExpression = expr; if (callExpression.arguments[predicate.parameterIndex] && getSymbolAtTypePredicatePosition(callExpression.arguments[predicate.parameterIndex]) === symbol) { return getNarrowedType(type, predicate.type, assumeTrue); } } else { - var expression = skipParenthesizedNodes(expr.expression); - return narrowTypeByThisTypePredicate(type, predicate, expression, assumeTrue); + var invokedExpression = skipParenthesizedNodes(callExpression.expression); + return narrowTypeByThisTypePredicate(type, predicate, invokedExpression, assumeTrue); } return type; } - function narrowTypeByTypePredicateMember(type, expr, assumeTrue) { - if (type.flags & 1) { - return type; - } - var memberType = getTypeOfExpression(expr); - if (!(memberType.flags & 134217728)) { - return type; - } - return narrowTypeByThisTypePredicate(type, memberType.predicate, expr, assumeTrue); - } - function narrowTypeByThisTypePredicate(type, predicate, expression, assumeTrue) { - if (expression.kind === 170 || expression.kind === 169) { - var accessExpression = expression; + function narrowTypeByThisTypePredicate(type, predicate, invokedExpression, assumeTrue) { + if (invokedExpression.kind === 170 || invokedExpression.kind === 169) { + var accessExpression = invokedExpression; var possibleIdentifier = skipParenthesizedNodes(accessExpression.expression); if (possibleIdentifier.kind === 69 && getSymbolAtTypePredicatePosition(possibleIdentifier) === symbol) { return getNarrowedType(type, predicate.type, assumeTrue); @@ -17808,7 +17875,6 @@ var ts; switch (expr.kind) { case 69: case 169: - case 136: return getSymbolOfEntityNameOrPropertyAccessExpression(expr); } } @@ -17838,9 +17904,6 @@ var ts; return narrowType(type, expr.operand, !assumeTrue); } break; - case 170: - case 169: - return narrowTypeByTypePredicateMember(type, expr, assumeTrue); } return type; } @@ -17867,10 +17930,25 @@ var ts; if (symbol.flags & 8388608 && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { markAliasSymbolAsReferenced(symbol); } + var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + if (languageVersion === 2 + && localOrExportSymbol.flags & 32 + && localOrExportSymbol.valueDeclaration.kind === 217 + && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { + var container = ts.getContainingClass(node); + while (container !== undefined) { + if (container === localOrExportSymbol.valueDeclaration && container.name !== node) { + getNodeLinks(container).flags |= 524288; + getNodeLinks(node).flags |= 1048576; + break; + } + container = ts.getContainingClass(container); + } + } checkCollisionWithCapturedSuperVariable(node, node); checkCollisionWithCapturedThisVariable(node, node); checkNestedBlockScopedBinding(node, symbol); - return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node); + return getNarrowedTypeOfSymbol(localOrExportSymbol, node); } function isInsideFunction(node, threshold) { var current = node; @@ -17903,12 +17981,43 @@ var ts; if (usedInFunction) { getNodeLinks(current).flags |= 65536; } + if (container.kind === 202 && + ts.getAncestor(symbol.valueDeclaration, 215).parent === container && + isAssignedInBodyOfForStatement(node, container)) { + getNodeLinks(symbol.valueDeclaration).flags |= 2097152; + } getNodeLinks(symbol.valueDeclaration).flags |= 262144; } if (usedInFunction) { getNodeLinks(symbol.valueDeclaration).flags |= 131072; } } + function isAssignedInBodyOfForStatement(node, container) { + var current = node; + while (current.parent.kind === 175) { + current = current.parent; + } + var isAssigned = false; + if (current.parent.kind === 184) { + isAssigned = current.parent.left === current && ts.isAssignmentOperator(current.parent.operatorToken.kind); + } + if ((current.parent.kind === 182 || current.parent.kind === 183)) { + var expr = current.parent; + isAssigned = expr.operator === 41 || expr.operator === 42; + } + if (!isAssigned) { + return false; + } + while (current !== container) { + if (current === container.statement) { + return true; + } + else { + current = current.parent; + } + } + return false; + } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2; if (container.kind === 142 || container.kind === 145) { @@ -17919,9 +18028,42 @@ var ts; getNodeLinks(container).flags |= 4; } } + function findFirstSuperCall(n) { + if (ts.isSuperCallExpression(n)) { + return n; + } + else if (ts.isFunctionLike(n)) { + return undefined; + } + return ts.forEachChild(n, findFirstSuperCall); + } + function getSuperCallInConstructor(constructor) { + var links = getNodeLinks(constructor); + if (links.hasSuperCall === undefined) { + links.superCall = findFirstSuperCall(constructor.body); + links.hasSuperCall = links.superCall ? true : false; + } + return links.superCall; + } + function classDeclarationExtendsNull(classDecl) { + var classSymbol = getSymbolOfNode(classDecl); + var classInstanceType = getDeclaredTypeOfSymbol(classSymbol); + var baseConstructorType = getBaseConstructorTypeOfClass(classInstanceType); + return baseConstructorType === nullType; + } function checkThisExpression(node) { var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; + if (container.kind === 145) { + var containingClassDecl = container.parent; + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); + if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { + var superCall = getSuperCallInConstructor(container); + if (!superCall || superCall.end > node.pos) { + error(node, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class); + } + } + } if (container.kind === 177) { container = ts.getThisContainer(container, false); needToCaptureLexicalThis = (languageVersion < 2); @@ -17977,7 +18119,7 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var typeTag = ts.getJSDocTypeTag(node); - if (typeTag && typeTag.typeExpression.type.kind === 264) { + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 264) { var jsDocFunctionType = typeTag.typeExpression.type; if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 267) { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); @@ -18959,7 +19101,7 @@ var ts; } function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); - var declaringClass = getDeclaredTypeOfSymbol(prop.parent); + var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); if (left.kind === 95) { var errorNode = node.kind === 169 ? node.name : @@ -19214,19 +19356,19 @@ var ts; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var signature = signatures_2[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent_5 = signature.declaration && signature.declaration.parent; + var parent_6 = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent_5 === lastParent) { + if (lastParent && parent_6 === lastParent) { index++; } else { - lastParent = parent_5; + lastParent = parent_6; index = cutoffIndex; } } else { index = cutoffIndex = result.length; - lastParent = parent_5; + lastParent = parent_6; } lastSymbol = symbol; if (signature.hasStringLiterals) { @@ -19878,7 +20020,7 @@ var ts; return anyType; } } - if (ts.isInJavaScriptFile(node) && ts.isRequireCall(node)) { + if (ts.isInJavaScriptFile(node) && ts.isRequireCall(node, true)) { return resolveExternalModuleTypeByLiteral(node.arguments[0]); } return getReturnTypeOfSignature(signature); @@ -19942,9 +20084,10 @@ var ts; } function getReturnTypeFromJSDocComment(func) { var returnTag = ts.getJSDocReturnTag(func); - if (returnTag) { + if (returnTag && returnTag.typeExpression) { return getTypeFromTypeNode(returnTag.typeExpression.type); } + return undefined; } function createPromiseType(promisedType) { var globalPromiseType = getGlobalPromiseType(); @@ -20004,7 +20147,7 @@ var ts; } else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); - return unknownType; + return getUnionType(types); } } if (funcIsGenerator) { @@ -20847,18 +20990,18 @@ var ts; function checkTypePredicate(node) { var parent = getTypePredicateParent(node); if (!parent) { + error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); return; } - var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(parent)); - if (!returnType || !(returnType.flags & 134217728)) { + var typePredicate = getSignatureFromDeclaration(parent).typePredicate; + if (!typePredicate) { return; } var parameterName = node.parameterName; - if (parameterName.kind === 162) { + if (ts.isThisTypePredicate(typePredicate)) { getTypeFromThisTypeNode(parameterName); } else { - var typePredicate = returnType.predicate; if (typePredicate.parameterIndex >= 0) { if (parent.parameters[typePredicate.parameterIndex].dotDotDotToken) { error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); @@ -20871,8 +21014,7 @@ var ts; var hasReportedError = false; for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) { var name_14 = _a[_i].name; - if ((name_14.kind === 164 || - name_14.kind === 165) && + if (ts.isBindingPattern(name_14) && checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_14, parameterName, typePredicate.parameterName)) { hasReportedError = true; break; @@ -20893,9 +21035,9 @@ var ts; case 153: case 144: case 143: - var parent_6 = node.parent; - if (node === parent_6.type) { - return parent_6; + var parent_7 = node.parent; + if (node === parent_7.type) { + return parent_7; } } } @@ -20926,7 +21068,9 @@ var ts; } checkTypeParameters(node.typeParameters); ts.forEach(node.parameters, checkParameter); - checkSourceElement(node.type); + if (node.type) { + checkSourceElement(node.type); + } if (produceDiagnostics) { checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { @@ -21021,24 +21165,6 @@ var ts; if (!produceDiagnostics) { return; } - function isSuperCallExpression(n) { - return n.kind === 171 && n.expression.kind === 95; - } - function containsSuperCallAsComputedPropertyName(n) { - return n.name && containsSuperCall(n.name); - } - function containsSuperCall(n) { - if (isSuperCallExpression(n)) { - return true; - } - else if (ts.isFunctionLike(n)) { - return false; - } - else if (ts.isClassLike(n)) { - return ts.forEach(n.members, containsSuperCallAsComputedPropertyName); - } - return ts.forEachChild(n, containsSuperCall); - } function markThisReferencesAsErrors(n) { if (n.kind === 97) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); @@ -21054,12 +21180,11 @@ var ts; } var containingClassDecl = node.parent; if (ts.getClassExtendsHeritageClauseElement(containingClassDecl)) { - var containingClassSymbol = getSymbolOfNode(containingClassDecl); - var containingClassInstanceType = getDeclaredTypeOfSymbol(containingClassSymbol); - var baseConstructorType = getBaseConstructorTypeOfClass(containingClassInstanceType); - if (containsSuperCall(node.body)) { - if (baseConstructorType === nullType) { - error(node, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); + var classExtendsNull = classDeclarationExtendsNull(containingClassDecl); + var superCall = getSuperCallInConstructor(node); + if (superCall) { + if (classExtendsNull) { + error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); } var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (8 | 16 | 32); }); @@ -21068,7 +21193,7 @@ var ts; var superCallStatement = void 0; for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) { var statement = statements_2[_i]; - if (statement.kind === 198 && isSuperCallExpression(statement.expression)) { + if (statement.kind === 198 && ts.isSuperCallExpression(statement.expression)) { superCallStatement = statement; break; } @@ -21079,12 +21204,9 @@ var ts; if (!superCallStatement) { error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); } - else { - markThisReferencesAsErrors(superCallStatement.expression); - } } } - else if (baseConstructorType !== nullType) { + else if (!classExtendsNull) { error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); } } @@ -21571,7 +21693,7 @@ var ts; return unknownType; } function checkAsyncFunctionReturnType(node) { - if (languageVersion >= 2) { + if (compilerOptions.noCustomAsyncPromise && languageVersion >= 2) { var returnType = getTypeFromTypeNode(node.type); return checkCorrectPromiseType(returnType, node.type); } @@ -21671,7 +21793,7 @@ var ts; return; } if (!compilerOptions.experimentalDecorators) { - error(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Specify_experimentalDecorators_to_remove_this_warning); + error(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning); } if (compilerOptions.emitDecoratorMetadata) { switch (node.kind) { @@ -21828,6 +21950,9 @@ var ts; } } function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) { + if (!compilerOptions.noCustomAsyncPromise) { + return; + } if (!needCollisionCheckForIdentifier(node, name, "Promise")) { return; } @@ -22247,7 +22372,7 @@ var ts; error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } } - else if (func.type || isGetAccessorWithAnnotatatedSetAccessor(func) || returnType.flags & 134217728) { + else if (func.type || isGetAccessorWithAnnotatatedSetAccessor(func)) { if (ts.isAsyncFunctionLike(func)) { var promisedType = getPromisedType(returnType); var awaitedType = checkAwaitedType(exprType, node.expression, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); @@ -23188,7 +23313,7 @@ var ts; } else { var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); - if (moduleSymbol && moduleSymbol.exports["export="]) { + if (moduleSymbol && hasExportAssignmentSymbol(moduleSymbol)) { error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol)); } } @@ -23610,6 +23735,18 @@ var ts; if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 169) { + var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); + switch (specialPropertyAssignmentKind) { + case 1: + case 3: + return getSymbolOfNode(entityName.parent); + case 4: + case 2: + return getSymbolOfNode(entityName.parent.parent); + default: + } + } if (entityName.parent.kind === 230) { return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608); } @@ -23839,7 +23976,7 @@ var ts; if (!moduleSymbol) { return true; } - var hasExportAssignment = getExportAssignmentSymbol(moduleSymbol) !== undefined; + var hasExportAssignment = hasExportAssignmentSymbol(moduleSymbol); moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); var symbolLinks = getSymbolLinks(moduleSymbol); if (symbolLinks.exportsSomeValue === undefined) { @@ -24108,7 +24245,7 @@ var ts; if (!ts.isExternalOrCommonJsModule(file)) { mergeSymbolTable(globals, file.locals); } - if (file.moduleAugmentations) { + if (file.moduleAugmentations.length) { (augmentations || (augmentations = [])).push(file.moduleAugmentations); } }); @@ -24717,7 +24854,7 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var prop = _a[_i]; var state_2 = _loop_1(prop); - if (typeof state_2 === "object") return state_2.value + if (typeof state_2 === "object") return state_2.value; if (state_2 === "continue") continue; } } @@ -25107,6 +25244,13 @@ var ts; var ts; (function (ts) { var nullSourceMapWriter; + var defaultLastEncodedSourceMapSpan = { + emittedLine: 1, + emittedColumn: 1, + sourceLine: 1, + sourceColumn: 1, + sourceIndex: 0 + }; function getNullSourceMapWriter() { if (nullSourceMapWriter === undefined) { nullSourceMapWriter = { @@ -25155,13 +25299,7 @@ var ts; currentSourceFile = undefined; sourceMapSourceIndex = -1; lastRecordedSourceMapSpan = undefined; - lastEncodedSourceMapSpan = { - emittedLine: 1, - emittedColumn: 1, - sourceLine: 1, - sourceColumn: 1, - sourceIndex: 0 - }; + lastEncodedSourceMapSpan = defaultLastEncodedSourceMapSpan; lastEncodedNameIndex = 0; sourceMapData = { sourceMapFilePath: sourceMapFilePath, @@ -25214,7 +25352,7 @@ var ts; sourceMapData.sourceMapDecodedMappings.pop(); lastEncodedSourceMapSpan = sourceMapData.sourceMapDecodedMappings.length ? sourceMapData.sourceMapDecodedMappings[sourceMapData.sourceMapDecodedMappings.length - 1] : - undefined; + defaultLastEncodedSourceMapSpan; var sourceMapMappings = sourceMapData.sourceMapMappings; var lenthToSet = sourceMapMappings.length - 1; for (; lenthToSet >= 0; lenthToSet--) { @@ -25919,9 +26057,6 @@ var ts; } } function writeImportDeclaration(node) { - if (!node.importClause && !(node.flags & 2)) { - return; - } emitJsDocComments(node); if (node.flags & 2) { write("export "); @@ -27116,9 +27251,11 @@ var ts; var isEs6Module; var isCurrentFileExternalModule; var exportFunctionForFile; + var contextObjectForFile; var generatedNameSet; var nodeToGeneratedName; var computedPropertyNamesToGeneratedNames; + var decoratedClassAliases; var convertedLoopState; var extendsEmitted; var decorateEmitted; @@ -27157,6 +27294,7 @@ var ts; sourceMap.initialize(jsFilePath, sourceMapFilePath, sourceFiles, isBundledEmit); generatedNameSet = {}; nodeToGeneratedName = []; + decoratedClassAliases = []; isOwnFileEmit = !isBundledEmit; if (isBundledEmit && modulekind) { ts.forEach(sourceFiles, emitEmitHelpers); @@ -27174,8 +27312,10 @@ var ts; currentText = undefined; currentLineMap = undefined; exportFunctionForFile = undefined; + contextObjectForFile = undefined; generatedNameSet = undefined; nodeToGeneratedName = undefined; + decoratedClassAliases = undefined; computedPropertyNamesToGeneratedNames = undefined; convertedLoopState = undefined; extendsEmitted = false; @@ -27200,6 +27340,7 @@ var ts; currentText = sourceFile.text; currentLineMap = ts.getLineStarts(sourceFile); exportFunctionForFile = undefined; + contextObjectForFile = undefined; isEs6Module = sourceFile.symbol && sourceFile.symbol.exports && !!sourceFile.symbol.exports["___esModule"]; renamedDependencies = sourceFile.renamedDependencies; currentFileIdentifiers = sourceFile.identifiers; @@ -27914,13 +28055,23 @@ var ts; } } } - if (languageVersion !== 2) { + if (languageVersion < 2) { var declaration = resolver.getReferencedDeclarationWithCollidingName(node); if (declaration) { write(getGeneratedNameForNode(declaration.name)); return; } } + else if (resolver.getNodeCheckFlags(node) & 1048576) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration) { + var classAlias = decoratedClassAliases[ts.getNodeId(declaration)]; + if (classAlias !== undefined) { + write(classAlias); + return; + } + } + } } if (ts.nodeIsSynthesized(node)) { write(node.text); @@ -27931,13 +28082,13 @@ var ts; } function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { if (languageVersion < 2) { - var parent_7 = node.parent; - switch (parent_7.kind) { + var parent_8 = node.parent; + switch (parent_8.kind) { case 166: case 217: case 220: case 214: - return parent_7.name === node && resolver.isDeclarationWithCollidingName(parent_7); + return parent_8.name === node && resolver.isDeclarationWithCollidingName(parent_8); } } return false; @@ -28710,12 +28861,12 @@ var ts; if (!node || !isCurrentFileSystemExternalModule()) { return false; } - var current = node; + var current = ts.getRootDeclaration(node).parent; while (current) { if (current.kind === 251) { return !isExported || ((ts.getCombinedNodeFlags(node) & 2) !== 0); } - else if (ts.isFunctionLike(current) || current.kind === 222) { + else if (ts.isDeclaration(current)) { return false; } else { @@ -29001,24 +29152,20 @@ var ts; break; } var loopParameters; + var loopOutParameters; if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 24576)) { loopParameters = []; for (var _a = 0, _b = loopInitializer.declarations; _a < _b.length; _a++) { var varDeclaration = _b[_a]; - collectNames(varDeclaration.name); + processVariableDeclaration(varDeclaration.name); } } var bodyIsBlock = node.statement.kind === 195; var paramList = loopParameters ? loopParameters.join(", ") : ""; writeLine(); write("var " + functionName + " = function(" + paramList + ")"); - if (!bodyIsBlock) { - write(" {"); - writeLine(); - increaseIndent(); - } var convertedOuterLoopState = convertedLoopState; - convertedLoopState = {}; + convertedLoopState = { loopOutParameters: loopOutParameters }; if (convertedOuterLoopState) { if (convertedOuterLoopState.argumentsName) { convertedLoopState.argumentsName = convertedOuterLoopState.argumentsName; @@ -29030,14 +29177,32 @@ var ts; convertedLoopState.hoistedLocalVariables = convertedOuterLoopState.hoistedLocalVariables; } } - emitEmbeddedStatement(node.statement); - if (!bodyIsBlock) { - decreaseIndent(); - writeLine(); - write("}"); - } - write(";"); + write(" {"); writeLine(); + increaseIndent(); + if (bodyIsBlock) { + emitLines(node.statement.statements); + } + else { + emit(node.statement); + } + writeLine(); + copyLoopOutParameters(convertedLoopState, 1, true); + decreaseIndent(); + writeLine(); + write("};"); + writeLine(); + if (loopOutParameters) { + write("var "); + for (var i = 0; i < loopOutParameters.length; i++) { + if (i !== 0) { + write(", "); + } + write(loopOutParameters[i].outParamName); + } + write(";"); + writeLine(); + } if (convertedLoopState.argumentsName) { if (convertedOuterLoopState) { convertedOuterLoopState.argumentsName = convertedLoopState.argumentsName; @@ -29083,15 +29248,21 @@ var ts; var currentLoopState = convertedLoopState; convertedLoopState = convertedOuterLoopState; return { functionName: functionName, paramList: paramList, state: currentLoopState }; - function collectNames(name) { + function processVariableDeclaration(name) { if (name.kind === 69) { - var nameText = isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(name) ? getGeneratedNameForNode(name) : name.text; + var nameText = isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(name) + ? getGeneratedNameForNode(name) + : name.text; loopParameters.push(nameText); + if (resolver.getNodeCheckFlags(name.parent) & 2097152) { + var reassignedVariable = { originalName: name, outParamName: makeUniqueName("out_" + nameText) }; + (loopOutParameters || (loopOutParameters = [])).push(reassignedVariable); + } } else { for (var _a = 0, _b = name.elements; _a < _b.length; _a++) { var element = _b[_a]; - collectNames(element.name); + processVariableDeclaration(element.name); } } } @@ -29116,6 +29287,28 @@ var ts; convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; } } + function copyLoopOutParameters(state, copyDirection, emitAsStatements) { + if (state.loopOutParameters) { + for (var _a = 0, _b = state.loopOutParameters; _a < _b.length; _a++) { + var outParam = _b[_a]; + if (copyDirection === 0) { + emitIdentifier(outParam.originalName); + write(" = " + outParam.outParamName); + } + else { + write(outParam.outParamName + " = "); + emitIdentifier(outParam.originalName); + } + if (emitAsStatements) { + write(";"); + writeLine(); + } + else { + write(", "); + } + } + } + } function emitConvertedLoopCall(loop, emitAsBlock) { if (emitAsBlock) { write(" {"); @@ -29130,6 +29323,8 @@ var ts; write("var " + loopResult + " = "); } write(loop.functionName + "(" + loop.paramList + ");"); + writeLine(); + copyLoopOutParameters(loop.state, 0, true); if (!isSimpleLoop) { writeLine(); if (loop.state.nonLocalJumps & 8) { @@ -29139,7 +29334,7 @@ var ts; convertedLoopState.nonLocalJumps |= 8; } else { - write("return " + loopResult + ".value"); + write("return " + loopResult + ".value;"); } writeLine(); } @@ -29349,14 +29544,16 @@ var ts; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { + write("return "); + copyLoopOutParameters(convertedLoopState, 1, false); if (!node.label) { if (node.kind === 206) { convertedLoopState.nonLocalJumps |= 2; - write("return \"break\";"); + write("\"break\";"); } else { convertedLoopState.nonLocalJumps |= 4; - write("return \"continue\";"); + write("\"continue\";"); } } else { @@ -29369,7 +29566,7 @@ var ts; labelMarker = "continue-" + node.label.text; setLabeledJump(convertedLoopState, false, node.label.text, labelMarker); } - write("return \"" + labelMarker + "\";"); + write("\"" + labelMarker + "\";"); } return; } @@ -30171,7 +30368,7 @@ var ts; else { write(", void 0, "); } - if (languageVersion >= 2 || !promiseConstructor) { + if (!promiseConstructor || (compilerOptions.noCustomAsyncPromise && languageVersion >= 2)) { write("void 0"); } else { @@ -30314,18 +30511,17 @@ var ts; } emitToken(16, body.statements.end); } - function findInitialSuperCall(ctor) { - if (ctor.body) { - var statement = ctor.body.statements[0]; - if (statement && statement.kind === 198) { - var expr = statement.expression; - if (expr && expr.kind === 171) { - var func = expr.expression; - if (func && func.kind === 95) { - return statement; - } - } - } + function getSuperCallAtGivenIndex(ctor, index) { + if (!ctor.body) { + return undefined; + } + var statements = ctor.body.statements; + if (!statements || index >= statements.length) { + return undefined; + } + var statement = statements[index]; + if (statement.kind === 198) { + return ts.isSuperCallExpression(statement.expression) ? statement : undefined; } } function emitParameterPropertyAssignments(node) { @@ -30571,7 +30767,7 @@ var ts; emitDefaultValueAssignments(ctor); emitRestParameter(ctor); if (baseTypeElement) { - superCall = findInitialSuperCall(ctor); + superCall = getSuperCallAtGivenIndex(ctor, startIndex); if (superCall) { writeLine(); emit(superCall); @@ -30630,14 +30826,24 @@ var ts; } } function emitClassLikeDeclarationForES6AndHigher(node) { + var decoratedClassAlias; var thisNodeIsDecorated = ts.nodeIsDecorated(node); if (node.kind === 217) { if (thisNodeIsDecorated) { + if (resolver.getNodeCheckFlags(node) & 524288) { + decoratedClassAlias = ts.unescapeIdentifier(makeUniqueName(node.name ? node.name.text : "default")); + decoratedClassAliases[ts.getNodeId(node)] = decoratedClassAlias; + write("let " + decoratedClassAlias + ";"); + writeLine(); + } if (isES6ExportedDeclaration(node) && !(node.flags & 512)) { write("export "); } write("let "); emitDeclarationName(node); + if (decoratedClassAlias !== undefined) { + write(" = " + decoratedClassAlias); + } write(" = "); } else if (isES6ExportedDeclaration(node)) { @@ -30658,7 +30864,7 @@ var ts; write(" = "); } write("class"); - if ((node.name || (node.flags & 512 && (staticProperties.length > 0 || modulekind !== 5))) && !thisNodeIsDecorated) { + if (node.name || (node.flags & 512 && (staticProperties.length > 0 || modulekind !== 5) && !thisNodeIsDecorated)) { write(" "); emitDeclarationName(node); } @@ -30676,6 +30882,7 @@ var ts; writeLine(); emitToken(16, node.members.end); if (thisNodeIsDecorated) { + decoratedClassAliases[ts.getNodeId(node)] = undefined; write(";"); } if (isClassExpressionWithStaticProperties) { @@ -30694,7 +30901,7 @@ var ts; else { writeLine(); emitPropertyDeclarations(node, staticProperties); - emitDecoratorsOfClass(node); + emitDecoratorsOfClass(node, decoratedClassAlias); } if (!(node.flags & 2)) { return; @@ -30760,7 +30967,7 @@ var ts; emitMemberFunctionsForES5AndLower(node); emitPropertyDeclarations(node, getInitializedProperties(node, true)); writeLine(); - emitDecoratorsOfClass(node); + emitDecoratorsOfClass(node, undefined); writeLine(); emitToken(16, node.members.end, function () { write("return "); @@ -30797,12 +31004,12 @@ var ts; write(".prototype"); } } - function emitDecoratorsOfClass(node) { + function emitDecoratorsOfClass(node, decoratedClassAlias) { emitDecoratorsOfMembers(node, 0); emitDecoratorsOfMembers(node, 64); - emitDecoratorsOfConstructor(node); + emitDecoratorsOfConstructor(node, decoratedClassAlias); } - function emitDecoratorsOfConstructor(node) { + function emitDecoratorsOfConstructor(node, decoratedClassAlias) { var decorators = node.decorators; var constructor = ts.getFirstConstructorWithBody(node); var firstParameterDecorator = constructor && ts.forEach(constructor.parameters, function (parameter) { return parameter.decorators; }); @@ -30812,6 +31019,9 @@ var ts; writeLine(); emitStart(node.decorators || firstParameterDecorator); emitDeclarationName(node); + if (decoratedClassAlias !== undefined) { + write(" = " + decoratedClassAlias); + } write(" = __decorate(["); increaseIndent(); writeLine(); @@ -32087,6 +32297,7 @@ var ts; collectExternalModuleInfo(node); ts.Debug.assert(!exportFunctionForFile); exportFunctionForFile = makeUniqueName("exports"); + contextObjectForFile = makeUniqueName("context"); writeLine(); write("System.register("); writeModuleName(node, emitRelativePathAsModuleName); @@ -32095,13 +32306,17 @@ var ts; var dependencyGroups = []; for (var i = 0; i < externalImports.length; i++) { var text = getExternalModuleNameText(externalImports[i], emitRelativePathAsModuleName); - if (ts.hasProperty(groupIndices, text)) { - var groupIndex = groupIndices[text]; + if (text === undefined) { + continue; + } + var key = text.substr(1, text.length - 2); + if (ts.hasProperty(groupIndices, key)) { + var groupIndex = groupIndices[key]; dependencyGroups[groupIndex].push(externalImports[i]); continue; } else { - groupIndices[text] = dependencyGroups.length; + groupIndices[key] = dependencyGroups.length; dependencyGroups.push([externalImports[i]]); } if (i !== 0) { @@ -32109,10 +32324,13 @@ var ts; } write(text); } - write("], function(" + exportFunctionForFile + ") {"); + write("], function(" + exportFunctionForFile + ", " + contextObjectForFile + ") {"); writeLine(); increaseIndent(); - var startIndex = emitDirectivePrologues(node.statements, true, true); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); + writeLine(); + write("var __moduleName = " + contextObjectForFile + " && " + contextObjectForFile + ".id;"); + writeLine(); emitEmitHelpers(node); emitCaptureThisForNodeIfNecessary(node); emitSystemModuleBody(node, dependencyGroups, startIndex); @@ -32184,7 +32402,7 @@ var ts; writeModuleName(node, emitRelativePathAsModuleName); emitAMDDependencies(node, true, emitRelativePathAsModuleName); increaseIndent(); - var startIndex = emitDirectivePrologues(node.statements, true, true); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); emitExportStarHelper(); emitCaptureThisForNodeIfNecessary(node); emitLinesStartingAt(node.statements, startIndex); @@ -32195,7 +32413,7 @@ var ts; write("});"); } function emitCommonJSModule(node) { - var startIndex = emitDirectivePrologues(node.statements, false, true); + var startIndex = emitDirectivePrologues(node.statements, false, !compilerOptions.noImplicitUseStrict); emitEmitHelpers(node); collectExternalModuleInfo(node); emitExportStarHelper(); @@ -32214,7 +32432,7 @@ var ts; writeLines(" }\n})("); emitAMDFactoryHeader(dependencyNames); increaseIndent(); - var startIndex = emitDirectivePrologues(node.statements, true, true); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); emitExportStarHelper(); emitCaptureThisForNodeIfNecessary(node); emitLinesStartingAt(node.statements, startIndex); @@ -32815,7 +33033,7 @@ var ts; ts.ioReadTime = 0; ts.ioWriteTime = 0; var emptyArray = []; - ts.version = "1.8.0"; + ts.version = "1.8.2"; function findConfigFile(searchPath, fileExists) { var fileName = "tsconfig.json"; while (true) { @@ -32841,7 +33059,7 @@ var ts; function resolveModuleName(moduleName, containingFile, compilerOptions, host) { var moduleResolution = compilerOptions.moduleResolution !== undefined ? compilerOptions.moduleResolution - : compilerOptions.module === 1 ? 2 : 1; + : ts.getEmitModuleKind(compilerOptions) === 1 ? 2 : 1; switch (moduleResolution) { case 2: return nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host); case 1: return classicNameResolver(moduleName, containingFile, compilerOptions, host); @@ -33284,9 +33502,13 @@ var ts; } function emitWorker(program, sourceFile, writeFileCallback, cancellationToken) { if (options.noEmitOnError) { - var preEmitDiagnostics = getPreEmitDiagnostics(program, undefined, cancellationToken); - if (preEmitDiagnostics.length > 0) { - return { diagnostics: preEmitDiagnostics, sourceMaps: undefined, emitSkipped: true }; + var diagnostics = program.getOptionsDiagnostics(cancellationToken).concat(program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken)); + var declarationDiagnostics = []; + if (diagnostics.length === 0 && program.getCompilerOptions().declaration) { + declarationDiagnostics = program.getDeclarationDiagnostics(undefined, cancellationToken); + } + if (diagnostics.length > 0 || declarationDiagnostics.length > 0) { + return { diagnostics: declarationDiagnostics, sourceMaps: undefined, emitSkipped: true }; } } var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver((options.outFile || options.out) ? undefined : sourceFile); @@ -33362,8 +33584,11 @@ var ts; diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return true; case 230: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); - return true; + if (node.isExportEquals) { + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); + return true; + } + break; case 217: var classDeclaration = node; if (checkModifiers(classDeclaration.modifiers) || @@ -33451,7 +33676,9 @@ var ts; diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return true; case 140: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.decorators_can_only_be_used_in_a_ts_file)); + if (!options.experimentalDecorators) { + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning)); + } return true; } return ts.forEachChild(node, walk); @@ -33579,7 +33806,7 @@ var ts; } } function collectRequireCalls(node) { - if (ts.isRequireCall(node)) { + if (ts.isRequireCall(node, true)) { (imports || (imports = [])).push(node.arguments[0]); } else { @@ -33702,7 +33929,7 @@ var ts; if (shouldAddFile) { var importedFile = findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); if (importedFile && resolution.isExternalLibraryImport) { - if (!ts.isExternalModule(importedFile)) { + if (!ts.isExternalModule(importedFile) && importedFile.statements.length) { var start_5 = ts.getTokenPosOfNode(file.imports[i], file); fileProcessingDiagnostics.add(ts.createFileDiagnostic(file, start_5, file.imports[i].end - start_5, ts.Diagnostics.Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition, importedFile.fileName)); } @@ -33815,7 +34042,7 @@ var ts; var outFile = options.outFile || options.out; var firstExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; }); if (options.isolatedModules) { - if (!options.module && languageVersion < 2) { + if (options.module === 0 && languageVersion < 2) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher)); } var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !ts.isDeclarationFile(f) ? f : undefined; }); @@ -33824,9 +34051,9 @@ var ts; programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided)); } } - else if (firstExternalModuleSourceFile && languageVersion < 2 && !options.module) { + else if (firstExternalModuleSourceFile && languageVersion < 2 && options.module === 0) { var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); - programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file)); + programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file)); } if (options.module === 5 && languageVersion < 2) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower)); @@ -33866,7 +34093,7 @@ var ts; if (options.reactNamespace && !ts.isIdentifier(options.reactNamespace, languageVersion)) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Invalide_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace)); } - if (!options.noEmit) { + if (!options.noEmit && !options.suppressOutputPathCheck) { var emitHost = getEmitHost(); var emitFilesSeen_1 = ts.createFileMap(!host.useCaseSensitiveFileNames() ? function (key) { return key.toLocaleLowerCase(); } : undefined); ts.forEachExpectedEmitFile(emitHost, function (emitFileNames, sourceFiles, isBundledEmit) { @@ -34463,24 +34690,24 @@ var ts; switch (n.kind) { case 195: if (!ts.isFunctionBlock(n)) { - var parent_8 = n.parent; + var parent_9 = n.parent; var openBrace = ts.findChildOfKind(n, 15, sourceFile); var closeBrace = ts.findChildOfKind(n, 16, sourceFile); - if (parent_8.kind === 200 || - parent_8.kind === 203 || - parent_8.kind === 204 || - parent_8.kind === 202 || - parent_8.kind === 199 || - parent_8.kind === 201 || - parent_8.kind === 208 || - parent_8.kind === 247) { - addOutliningSpan(parent_8, openBrace, closeBrace, autoCollapse(n)); + if (parent_9.kind === 200 || + parent_9.kind === 203 || + parent_9.kind === 204 || + parent_9.kind === 202 || + parent_9.kind === 199 || + parent_9.kind === 201 || + parent_9.kind === 208 || + parent_9.kind === 247) { + addOutliningSpan(parent_9, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_8.kind === 212) { - var tryStatement = parent_8; + if (parent_9.kind === 212) { + var tryStatement = parent_9; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_8, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_9, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -38741,11 +38968,6 @@ var ts; })(SmartIndenter = formatting.SmartIndenter || (formatting.SmartIndenter = {})); })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; var ts; (function (ts) { ts.servicesVersion = "0.4"; @@ -39561,8 +39783,8 @@ var ts; if (declaration.kind !== 214 && declaration.kind !== 216) { return false; } - for (var parent_9 = declaration.parent; !ts.isFunctionBlock(parent_9); parent_9 = parent_9.parent) { - if (parent_9.kind === 251 || parent_9.kind === 222) { + for (var parent_10 = declaration.parent; !ts.isFunctionBlock(parent_10); parent_10 = parent_10.parent) { + if (parent_10.kind === 251 || parent_10.kind === 222) { return false; } } @@ -39572,7 +39794,6 @@ var ts; function getDefaultCompilerOptions() { return { target: 1, - module: 0, jsx: 1 }; } @@ -39673,6 +39894,7 @@ var ts; function transpileModule(input, transpileOptions) { var options = transpileOptions.compilerOptions ? ts.clone(transpileOptions.compilerOptions) : getDefaultCompilerOptions(); options.isolatedModules = true; + options.suppressOutputPathCheck = true; options.allowNonTsExtensions = true; options.noLib = true; options.noResolve = true; @@ -39728,7 +39950,6 @@ var ts; var text = scriptSnapshot.getText(0, scriptSnapshot.getLength()); var sourceFile = ts.createSourceFile(fileName, text, scriptTarget, setNodeParents); setSourceFileFields(sourceFile, scriptSnapshot, version); - sourceFile.nameTable = sourceFile.identifiers; return sourceFile; } ts.createLanguageServiceSourceFile = createLanguageServiceSourceFile; @@ -40525,13 +40746,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_10 = contextToken.parent, kind = contextToken.kind; + var parent_11 = contextToken.parent, kind = contextToken.kind; if (kind === 21) { - if (parent_10.kind === 169) { + if (parent_11.kind === 169) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_10.kind === 136) { + else if (parent_11.kind === 136) { node = contextToken.parent.left; isRightOfDot = true; } @@ -40810,9 +41031,9 @@ var ts; switch (contextToken.kind) { case 15: case 24: - var parent_11 = contextToken.parent; - if (parent_11 && (parent_11.kind === 168 || parent_11.kind === 164)) { - return parent_11; + var parent_12 = contextToken.parent; + if (parent_12 && (parent_12.kind === 168 || parent_12.kind === 164)) { + return parent_12; } break; } @@ -40835,34 +41056,34 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_12 = contextToken.parent; + var parent_13 = contextToken.parent; switch (contextToken.kind) { case 26: case 39: case 69: case 241: case 242: - if (parent_12 && (parent_12.kind === 237 || parent_12.kind === 238)) { - return parent_12; + if (parent_13 && (parent_13.kind === 237 || parent_13.kind === 238)) { + return parent_13; } - else if (parent_12.kind === 241) { - return parent_12.parent; + else if (parent_13.kind === 241) { + return parent_13.parent; } break; case 9: - if (parent_12 && ((parent_12.kind === 241) || (parent_12.kind === 242))) { - return parent_12.parent; + if (parent_13 && ((parent_13.kind === 241) || (parent_13.kind === 242))) { + return parent_13.parent; } break; case 16: - if (parent_12 && - parent_12.kind === 243 && - parent_12.parent && - (parent_12.parent.kind === 241)) { - return parent_12.parent.parent; + if (parent_13 && + parent_13.kind === 243 && + parent_13.parent && + (parent_13.parent.kind === 241)) { + return parent_13.parent.parent; } - if (parent_12 && parent_12.kind === 242) { - return parent_12.parent; + if (parent_13 && parent_13.kind === 242) { + return parent_13.parent; } break; } @@ -41042,15 +41263,15 @@ var ts; if (!completionData) { return undefined; } - var symbols = completionData.symbols, isMemberCompletion = completionData.isMemberCompletion, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, isRightOfDot = completionData.isRightOfDot, isJsDocTagName = completionData.isJsDocTagName; + var symbols = completionData.symbols, isMemberCompletion = completionData.isMemberCompletion, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, isJsDocTagName = completionData.isJsDocTagName; if (isJsDocTagName) { return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: getAllJsDocCompletionEntries() }; } var sourceFile = getValidSourceFile(fileName); var entries = []; - if (isRightOfDot && ts.isSourceFileJavaScript(sourceFile)) { + if (ts.isSourceFileJavaScript(sourceFile)) { var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries); - ts.addRange(entries, getJavaScriptCompletionEntries(sourceFile, uniqueNames)); + ts.addRange(entries, getJavaScriptCompletionEntries(sourceFile, location.pos, uniqueNames)); } else { if (!symbols || symbols.length === 0) { @@ -41074,11 +41295,14 @@ var ts; ts.addRange(entries, keywordCompletions); } return { isMemberCompletion: isMemberCompletion, isNewIdentifierLocation: isNewIdentifierLocation, entries: entries }; - function getJavaScriptCompletionEntries(sourceFile, uniqueNames) { + function getJavaScriptCompletionEntries(sourceFile, position, uniqueNames) { var entries = []; var target = program.getCompilerOptions().target; var nameTable = getNameTable(sourceFile); for (var name_36 in nameTable) { + if (nameTable[name_36] === position) { + continue; + } if (!uniqueNames[name_36]) { uniqueNames[name_36] = name_36; var displayName = getCompletionEntryDisplayName(name_36, target, true); @@ -41950,17 +42174,17 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_13 = child.parent; - if (ts.isFunctionBlock(parent_13) || parent_13.kind === 251) { - return parent_13; + var parent_14 = child.parent; + if (ts.isFunctionBlock(parent_14) || parent_14.kind === 251) { + return parent_14; } - if (parent_13.kind === 212) { - var tryStatement = parent_13; + if (parent_14.kind === 212) { + var tryStatement = parent_14; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_13; + child = parent_14; } return undefined; } @@ -42365,7 +42589,7 @@ var ts; var sourceFile = sourceFiles_3[_i]; cancellationToken.throwIfCancellationRequested(); var nameTable = getNameTable(sourceFile); - if (ts.lookUp(nameTable, internedName)) { + if (ts.lookUp(nameTable, internedName) !== undefined) { result = result || []; getReferencesInNode(sourceFile, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result, symbolToIndex); } @@ -43330,19 +43554,49 @@ var ts; pushClassification(start, end - start, type); } } - function classifyTokenOrJsxText(token) { - if (ts.nodeIsMissing(token)) { - return; + function tryClassifyNode(node) { + if (ts.nodeIsMissing(node)) { + return true; } - var tokenStart = token.kind === 239 ? token.pos : classifyLeadingTriviaAndGetTokenStart(token); - var tokenWidth = token.end - tokenStart; + var classifiedElementName = tryClassifyJsxElementName(node); + if (!ts.isToken(node) && node.kind !== 239 && classifiedElementName === undefined) { + return false; + } + var tokenStart = node.kind === 239 ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + var tokenWidth = node.end - tokenStart; ts.Debug.assert(tokenWidth >= 0); if (tokenWidth > 0) { - var type = classifyTokenType(token.kind, token); + var type = classifiedElementName || classifyTokenType(node.kind, node); if (type) { pushClassification(tokenStart, tokenWidth, type); } } + return true; + } + function tryClassifyJsxElementName(token) { + switch (token.parent && token.parent.kind) { + case 238: + if (token.parent.tagName === token) { + return 19; + } + break; + case 240: + if (token.parent.tagName === token) { + return 20; + } + break; + case 237: + if (token.parent.tagName === token) { + return 21; + } + break; + case 241: + if (token.parent.name === token) { + return 22; + } + break; + } + return undefined; } function classifyTokenType(tokenKind, token) { if (ts.isKeyword(tokenKind)) { @@ -43420,25 +43674,6 @@ var ts; return 17; } return; - case 238: - if (token.parent.tagName === token) { - return 19; - } - return; - case 240: - if (token.parent.tagName === token) { - return 20; - } - return; - case 237: - if (token.parent.tagName === token) { - return 21; - } - return; - case 241: - if (token.parent.name === token) { - return 22; - } } } return 2; @@ -43453,10 +43688,7 @@ var ts; var children = element.getChildren(sourceFile); for (var i = 0, n = children.length; i < n; i++) { var child = children[i]; - if (ts.isToken(child) || child.kind === 239) { - classifyTokenOrJsxText(child); - } - else { + if (!tryClassifyNode(child)) { processElement(child); } } @@ -43788,14 +44020,14 @@ var ts; function walk(node) { switch (node.kind) { case 69: - nameTable[node.text] = node.text; + nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; break; case 9: case 8: if (ts.isDeclarationName(node) || node.parent.kind === 235 || isArgumentOfElementAccessExpression(node)) { - nameTable[node.text] = node.text; + nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; } break; default: diff --git a/extensions/typescript/server/typescript/package.json b/extensions/typescript/server/typescript/package.json index 75f7010d929..d227b113157 100644 --- a/extensions/typescript/server/typescript/package.json +++ b/extensions/typescript/server/typescript/package.json @@ -4,7 +4,7 @@ "name": "Microsoft Corp." }, "homepage": "http://typescriptlang.org/", - "version": "1.8.0", + "version": "1.8.2", "license": "Apache-2.0", "description": "TypeScript is a language for application scale JavaScript development", "keywords": [ @@ -19,7 +19,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/Microsoft/TypeScript.git" + "url": "https://github.com/Microsoft/TypeScript.git" }, "main": "./lib/typescript.js", "typings": "./lib/typescript.d.ts", @@ -58,10 +58,10 @@ "os": false, "path": false }, - "gitHead": "a288b84632c1400806df55025ca6b568cfa4d00e", - "_id": "typescript@1.8.0", - "_shasum": "cc5bc63d7f7d84ea26debd7adb774c0362b0ec11", - "_from": "typescript@1.8.0", + "gitHead": "e5dd34f9e69f517182abfc996a10b8312b14e015", + "_id": "typescript@1.8.2", + "_shasum": "4d2ad7db172be67a913d09862b510133bad61b33", + "_from": "typescript@latest", "_npmVersion": "2.0.0", "_npmUser": { "name": "typescript", @@ -74,10 +74,9 @@ } ], "dist": { - "shasum": "cc5bc63d7f7d84ea26debd7adb774c0362b0ec11", - "tarball": "http://registry.npmjs.org/typescript/-/typescript-1.8.0.tgz" + "shasum": "4d2ad7db172be67a913d09862b510133bad61b33", + "tarball": "http://registry.npmjs.org/typescript/-/typescript-1.8.2.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.0.tgz", - "readme": "ERROR: No README data found!" + "_resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.2.tgz" } diff --git a/gulpfile.js b/gulpfile.js index 28159b34305..c09da17f696 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -39,11 +39,13 @@ var tsOptions = { sourceRoot: util.toFileUri(rootDir) }; -function createCompile(build) { +function createCompile(build, emitError) { var opts = _.clone(tsOptions); opts.inlineSources = !!build; - var ts = tsb.create(opts, null, null, quiet ? null : function (err) { reporter(err.toString()); }); + var ts = tsb.create(opts, null, null, quiet ? null : function (err) { + reporter(err.toString()); + }); return function (token) { var utf8Filter = filter('**/test/**/*utf8*', { restore: true }); @@ -67,14 +69,14 @@ function createCompile(build) { sourceRoot: tsOptions.sourceRoot })) .pipe(tsFilter.restore) - .pipe(quiet ? es.through() : reporter()); + .pipe(quiet ? es.through() : reporter.end(emitError)); return es.duplex(input, output); }; } function compileTask(out, build) { - var compile = createCompile(build); + var compile = createCompile(build, true); return function () { var src = gulp.src('src/**', { base: 'src' }); diff --git a/src/vs/editor/browser/config/configuration.ts b/src/vs/editor/browser/config/configuration.ts index 49d6c778b05..35ec3a59860 100644 --- a/src/vs/editor/browser/config/configuration.ts +++ b/src/vs/editor/browser/config/configuration.ts @@ -269,12 +269,8 @@ export class Configuration extends CommonEditorConfiguration { } } - private _elementSizeObserver: ElementSizeObserver; - constructor(options:any, referenceDomElement:HTMLElement = null, indentationGuesser:(tabSize:number)=>IGuessedIndentation = null) { - this._elementSizeObserver = new ElementSizeObserver(referenceDomElement, () => this._onReferenceDomElementSizeChanged()); - - super(options, indentationGuesser); + super(options, new ElementSizeObserver(referenceDomElement, () => this._onReferenceDomElementSizeChanged()), indentationGuesser); this._register(CSSBasedConfiguration.INSTANCE.onDidChange(() => () => this._onCSSBasedConfigurationChanged())); diff --git a/src/vs/editor/browser/config/elementSizeObserver.ts b/src/vs/editor/browser/config/elementSizeObserver.ts index a981f01be98..f7e25066845 100644 --- a/src/vs/editor/browser/config/elementSizeObserver.ts +++ b/src/vs/editor/browser/config/elementSizeObserver.ts @@ -6,8 +6,9 @@ import {Disposable} from 'vs/base/common/lifecycle'; import {IDimension} from 'vs/editor/common/editorCommon'; +import {IElementSizeObserver} from 'vs/editor/common/config/commonEditorConfig'; -export class ElementSizeObserver extends Disposable { +export class ElementSizeObserver extends Disposable implements IElementSizeObserver { private referenceDomElement:HTMLElement; private measureReferenceDomElementToken:number; diff --git a/src/vs/editor/browser/standalone/simpleServices.ts b/src/vs/editor/browser/standalone/simpleServices.ts index 7c45fb30990..026bd7d68f4 100644 --- a/src/vs/editor/browser/standalone/simpleServices.ts +++ b/src/vs/editor/browser/standalone/simpleServices.ts @@ -216,9 +216,12 @@ export class StandaloneKeybindingService extends KeybindingService { private _dynamicCommands: ICommandsMap; constructor(domNode: HTMLElement) { + super(); + this._dynamicKeybindings = []; this._dynamicCommands = Object.create(null); - super(domNode); + + this._beginListening(domNode); } public addDynamicKeybinding(keybinding: number, handler:ICommandHandler, context:string, commandId:string = null): string { diff --git a/src/vs/editor/browser/standalone/standaloneCodeEditor.ts b/src/vs/editor/browser/standalone/standaloneCodeEditor.ts index a6919c4e49a..c2caea97a25 100644 --- a/src/vs/editor/browser/standalone/standaloneCodeEditor.ts +++ b/src/vs/editor/browser/standalone/standaloneCodeEditor.ts @@ -40,6 +40,7 @@ import {DiffEditorWidget} from 'vs/editor/browser/widget/diffEditorWidget'; // Set defaults for standalone editor DefaultConfig.editor.wrappingIndent = 'none'; +DefaultConfig.editor.folding = false; export interface IEditorConstructionOptions extends ICodeEditorWidgetCreationOptions { value?: string; @@ -73,6 +74,9 @@ class StandaloneEditor extends CodeEditorWidget { (keybindingService).setInstantiationService(instantiationService); } + options = options || {}; + super(domElement, options, instantiationService, codeEditorService, keybindingService, telemetryService); + if (keybindingService instanceof StandaloneKeybindingService) { this._standaloneKeybindingService = keybindingService; } @@ -82,15 +86,17 @@ class StandaloneEditor extends CodeEditorWidget { this._markerService = markerService; this._toDispose2 = toDispose; - options = options || {}; + let model: IModel = null; if (typeof options.model === 'undefined') { - options.model = (self).Monaco.Editor.createModel(options.value || '', options.mode || 'text/plain'); + model = (self).Monaco.Editor.createModel(options.value || '', options.mode || 'text/plain'); this._ownsModel = true; } else { + model = options.model; + delete options.model; this._ownsModel = false; } - super(domElement, options, instantiationService, codeEditorService, keybindingService, telemetryService); + this._attachModel(model); } public dispose(): void { @@ -164,7 +170,6 @@ class StandaloneEditor extends CodeEditorWidget { class StandaloneDiffEditor extends DiffEditorWidget { - private _editorService:IEditorService; private _contextViewService:IEditorContextViewService; private _standaloneKeybindingService: StandaloneKeybindingService; private _toDispose2: IDisposable[]; @@ -187,21 +192,19 @@ class StandaloneDiffEditor extends DiffEditorWidget { (keybindingService).setInstantiationService(instantiationService); } + super(domElement, options, editorWorkerService, instantiationService); + if (keybindingService instanceof StandaloneKeybindingService) { this._standaloneKeybindingService = keybindingService; } this._contextViewService = contextViewService; - this._editorService = editorService; + this._markerService = markerService; this._telemetryService = telemetryService; this._toDispose2 = toDispose; - options = options || {}; - - super(domElement, options, editorWorkerService, instantiationService); - this._contextViewService.setContainer(this._containerDomElement); } diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 9817321f769..127ea250804 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -41,14 +41,12 @@ export class CodeEditorWidget extends CommonCodeEditor implements editorBrowser. constructor( domElement:HTMLElement, - options:editorCommon.ICodeEditorWidgetCreationOptions, + options:editorCommon.IEditorOptions, @IInstantiationService instantiationService: IInstantiationService, @ICodeEditorService codeEditorService: ICodeEditorService, @IKeybindingService keybindingService: IKeybindingService, @ITelemetryService telemetryService: ITelemetryService ) { - this.domElement = domElement; - super(domElement, options, instantiationService, codeEditorService, keybindingService, telemetryService); // track focus of the domElement and all its anchestors diff --git a/src/vs/editor/common/commonCodeEditor.ts b/src/vs/editor/common/commonCodeEditor.ts index f16c2ec47a8..a1e1027f605 100644 --- a/src/vs/editor/common/commonCodeEditor.ts +++ b/src/vs/editor/common/commonCodeEditor.ts @@ -71,7 +71,7 @@ export abstract class CommonCodeEditor extends EventEmitter implements IActionPr constructor( domElement: IKeybindingScopeLocation, - options:editorCommon.ICodeEditorWidgetCreationOptions, + options:editorCommon.IEditorOptions, instantiationService: IInstantiationService, codeEditorService: ICodeEditorService, keybindingService: IKeybindingService, @@ -100,12 +100,6 @@ export abstract class CommonCodeEditor extends EventEmitter implements IActionPr this._decorationTypeKeysToIds = {}; options = options || {}; - var model: editorCommon.IModel = null; - if (options.model) { - model = options.model; - delete options.model; - } - if (typeof options.ariaLabel === 'undefined') { options.ariaLabel = DefaultConfig.editor.ariaLabel; } @@ -129,7 +123,7 @@ export abstract class CommonCodeEditor extends EventEmitter implements IActionPr keybindingService: this._keybindingService }); - this._attachModel(model); + this._attachModel(null); // Create editor contributions this.contributions = {}; diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts index 9a483998f72..90d4012e134 100644 --- a/src/vs/editor/common/config/commonEditorConfig.ts +++ b/src/vs/editor/common/config/commonEditorConfig.ts @@ -550,6 +550,14 @@ export interface IIndentationGuesser { (tabSize:number): editorCommon.IGuessedIndentation; } +export interface IElementSizeObserver { + startObserving(): void; + observe(dimension?:editorCommon.IDimension): void; + dispose(): void; + getWidth(): number; + getHeight(): number; +} + export abstract class CommonEditorConfiguration extends Disposable implements editorCommon.IConfiguration { public handlerDispatcher:editorCommon.IHandlerDispatcher; @@ -557,6 +565,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed public editorClone:editorCommon.IInternalEditorOptions; protected _configWithDefaults:ConfigurationWithDefaults; + protected _elementSizeObserver: IElementSizeObserver; private _indentationGuesser:IIndentationGuesser; private _cachedGuessedIndentationTabSize: number; private _cachedGuessedIndentation:editorCommon.IGuessedIndentation; @@ -566,9 +575,10 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed private _onDidChange = this._register(new Emitter()); public onDidChange: Event = this._onDidChange.event; - constructor(options:any, indentationGuesser:IIndentationGuesser = null) { + constructor(options:any, elementSizeObserver: IElementSizeObserver = null, indentationGuesser:IIndentationGuesser = null) { super(); this._configWithDefaults = new ConfigurationWithDefaults(options); + this._elementSizeObserver = elementSizeObserver; this._indentationGuesser = indentationGuesser; this._cachedGuessedIndentationTabSize = -1; this._cachedGuessedIndentation = null; diff --git a/src/vs/editor/common/core/selection.ts b/src/vs/editor/common/core/selection.ts index 9c18ab95668..4412906f08b 100644 --- a/src/vs/editor/common/core/selection.ts +++ b/src/vs/editor/common/core/selection.ts @@ -14,11 +14,11 @@ export class Selection extends Range implements IEditorSelection { public positionColumn: number; constructor(selectionStartLineNumber: number, selectionStartColumn: number, positionLineNumber: number, positionColumn: number) { + super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn); this.selectionStartLineNumber = selectionStartLineNumber; this.selectionStartColumn = selectionStartColumn; this.positionLineNumber = positionLineNumber; this.positionColumn = positionColumn; - super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn); } public clone(): IEditorSelection { diff --git a/src/vs/editor/common/diff/diffComputer.ts b/src/vs/editor/common/diff/diffComputer.ts index c84a2c4b02d..0d13f6e1425 100644 --- a/src/vs/editor/common/diff/diffComputer.ts +++ b/src/vs/editor/common/diff/diffComputer.ts @@ -95,8 +95,8 @@ class LineMarkerSequence extends MarkerSequence { endColumn = lines[i].length + 1; if (shouldIgnoreTrimWhitespace) { - startColumn = this._getFirstNonBlankColumn(lines[i], 1); - endColumn = this._getLastNonBlankColumn(lines[i], 1); + startColumn = LineMarkerSequence._getFirstNonBlankColumn(lines[i], 1); + endColumn = LineMarkerSequence._getLastNonBlankColumn(lines[i], 1); } startMarkers.push({ @@ -117,7 +117,7 @@ class LineMarkerSequence extends MarkerSequence { super(buffer, startMarkers, endMarkers); } - private _getFirstNonBlankColumn(txt:string, defaultValue:number): number { + private static _getFirstNonBlankColumn(txt:string, defaultValue:number): number { var r = strings.firstNonWhitespaceIndex(txt); if (r === -1) { return defaultValue; @@ -125,7 +125,7 @@ class LineMarkerSequence extends MarkerSequence { return r + 1; } - private _getLastNonBlankColumn(txt:string, defaultValue:number): number { + private static _getLastNonBlankColumn(txt:string, defaultValue:number): number { var r = strings.lastNonWhitespaceIndex(txt); if (r === -1) { return defaultValue; diff --git a/src/vs/editor/common/modes/modesRegistry.ts b/src/vs/editor/common/modes/modesRegistry.ts index e22157e3444..492fce2b7ca 100644 --- a/src/vs/editor/common/modes/modesRegistry.ts +++ b/src/vs/editor/common/modes/modesRegistry.ts @@ -49,6 +49,12 @@ export class EditorModesRegistry { this._workerParticipants = participants; } public registerWorkerParticipant(modeId:string, moduleId:string, ctorName?:string):void { + if (typeof modeId !== 'string') { + throw new Error('InvalidArgument: expected `modeId` to be a string'); + } + if (typeof moduleId !== 'string') { + throw new Error('InvalidArgument: expected `moduleId` to be a string'); + } this._workerParticipants.push({ modeId: modeId, moduleId: moduleId, diff --git a/src/vs/editor/common/services/editorWorkerService.ts b/src/vs/editor/common/services/editorWorkerService.ts index 0918beff77b..6cbfa91500e 100644 --- a/src/vs/editor/common/services/editorWorkerService.ts +++ b/src/vs/editor/common/services/editorWorkerService.ts @@ -10,7 +10,7 @@ import {ServiceIdentifier, createDecorator} from 'vs/platform/instantiation/comm import {IChange, ILineChange, IPosition, IRange} from 'vs/editor/common/editorCommon'; import {IInplaceReplaceSupportResult, ILink, ISuggestResult} from 'vs/editor/common/modes'; -export var ID_EDITOR_WORKER_SERVICE = 'workerService'; +export var ID_EDITOR_WORKER_SERVICE = 'editorWorkerService'; export var IEditorWorkerService = createDecorator(ID_EDITOR_WORKER_SERVICE); export interface IEditorWorkerService { diff --git a/src/vs/editor/contrib/find/common/findDecorations.ts b/src/vs/editor/contrib/find/common/findDecorations.ts index 59d8c003a3d..9a238950833 100644 --- a/src/vs/editor/contrib/find/common/findDecorations.ts +++ b/src/vs/editor/contrib/find/common/findDecorations.ts @@ -39,6 +39,10 @@ export class FindDecorations implements IDisposable { this._highlightedDecorationId = null; } + public getCount(): number { + return this._decorations.length; + } + public getFindScope(): editorCommon.IEditorRange { if (this._findScopeDecorationId) { return this._editor.getModel().getDecorationRange(this._findScopeDecorationId); @@ -55,6 +59,16 @@ export class FindDecorations implements IDisposable { this.setCurrentFindMatch(null); } + public getCurrentMatchesPosition(desiredRange:editorCommon.IEditorRange): number { + for (let i = 0, len = this._decorations.length; i < len; i++) { + let range = this._editor.getModel().getDecorationRange(this._decorations[i]); + if (desiredRange.equalsRange(range)) { + return (i + 1); + } + } + return 1; + } + public setCurrentFindMatch(nextMatch:editorCommon.IEditorRange): number { let newCurrentDecorationId: string = null; let matchPosition = 0; diff --git a/src/vs/editor/contrib/find/common/findModel.ts b/src/vs/editor/contrib/find/common/findModel.ts index f2c43873512..70d5cf09c2f 100644 --- a/src/vs/editor/contrib/find/common/findModel.ts +++ b/src/vs/editor/contrib/find/common/findModel.ts @@ -124,7 +124,7 @@ export class FindModelBoundToEditorModel { let findMatches = this._findMatches(findScope, MATCHES_LIMIT); this._decorations.set(findMatches, findScope); - this._state.change({ matchesCount: findMatches.length }, false); + this._state.changeMatchInfo(this._decorations.getCurrentMatchesPosition(this._editor.getSelection()), this._decorations.getCount()); if (moveCursor) { this._moveToNextMatch(this._decorations.getStartPosition()); @@ -205,7 +205,7 @@ export class FindModelBoundToEditorModel { } let matchesPosition = this._decorations.setCurrentFindMatch(prevMatch); - this._state.change({ matchesPosition: matchesPosition }, false); + this._state.changeMatchInfo(matchesPosition, this._decorations.getCount()); this._editor.setSelection(prevMatch); this._editor.revealRangeInCenterIfOutsideViewport(prevMatch); } @@ -273,7 +273,7 @@ export class FindModelBoundToEditorModel { } let matchesPosition = this._decorations.setCurrentFindMatch(nextMatch); - this._state.change({ matchesPosition: matchesPosition }, false); + this._state.changeMatchInfo(matchesPosition, this._decorations.getCount()); this._editor.setSelection(nextMatch); this._editor.revealRangeInCenterIfOutsideViewport(nextMatch); } @@ -340,6 +340,7 @@ export class FindModelBoundToEditorModel { let ranges = this._findMatches(findScope, Number.MAX_VALUE); this._decorations.set([], findScope); + this._state.changeMatchInfo(0, 0); let replaceStrings:string[] = []; for (let i = 0, len = ranges.length; i < len; i++) { diff --git a/src/vs/editor/contrib/find/common/findState.ts b/src/vs/editor/contrib/find/common/findState.ts index 30f5ebaffba..58a851ce7c5 100644 --- a/src/vs/editor/contrib/find/common/findState.ts +++ b/src/vs/editor/contrib/find/common/findState.ts @@ -33,8 +33,8 @@ export interface INewFindReplaceState { wholeWord?: boolean; matchCase?: boolean; searchScope?: IEditorRange; - matchesPosition?: number; - matchesCount?: number; + // matchesPosition?: number; + // matchesCount?: number; } export class FindReplaceState implements IDisposable { @@ -86,6 +86,45 @@ export class FindReplaceState implements IDisposable { return this._eventEmitter.addListener2(FindReplaceState._CHANGED_EVENT, listener); } + public changeMatchInfo(matchesPosition:number, matchesCount:number): void { + let changeEvent:FindReplaceStateChangedEvent = { + moveCursor: false, + searchString: false, + replaceString: false, + isRevealed: false, + isReplaceRevealed: false, + isRegex: false, + wholeWord: false, + matchCase: false, + searchScope: false, + matchesPosition: false, + matchesCount: false + }; + let somethingChanged = false; + + if (matchesCount === 0) { + matchesPosition = 0; + } + if (matchesPosition > matchesCount) { + matchesPosition = matchesCount; + } + + if (this._matchesPosition !== matchesPosition) { + this._matchesPosition = matchesPosition; + changeEvent.matchesPosition = true; + somethingChanged = true; + } + if (this._matchesCount !== matchesCount) { + this._matchesCount = matchesCount; + changeEvent.matchesCount = true; + somethingChanged = true; + } + + if (somethingChanged) { + this._eventEmitter.emit(FindReplaceState._CHANGED_EVENT, changeEvent); + } + } + public change(newState:INewFindReplaceState, moveCursor:boolean): void { let changeEvent:FindReplaceStateChangedEvent = { moveCursor: moveCursor, @@ -158,29 +197,6 @@ export class FindReplaceState implements IDisposable { somethingChanged = true; } } - if (typeof newState.matchesPosition !== 'undefined') { - if (this._matchesPosition !== newState.matchesPosition) { - this._matchesPosition = newState.matchesPosition; - changeEvent.matchesPosition = true; - somethingChanged = true; - } - } - if (typeof newState.matchesCount !== 'undefined') { - if (this._matchesCount !== newState.matchesCount) { - this._matchesCount = newState.matchesCount; - changeEvent.matchesCount = true; - somethingChanged = true; - - if (this._matchesCount === 0) { - this._matchesPosition = 0; - changeEvent.matchesPosition = true; - } else if (this._matchesPosition > this._matchesCount) { - this._matchesPosition = this._matchesCount; - changeEvent.matchesPosition = true; - } - } - } - if (somethingChanged) { this._eventEmitter.emit(FindReplaceState._CHANGED_EVENT, changeEvent); diff --git a/src/vs/editor/contrib/folding/browser/arrow-collapse-dark.svg b/src/vs/editor/contrib/folding/browser/arrow-collapse-dark.svg index 233310dca95..e977603607c 100644 --- a/src/vs/editor/contrib/folding/browser/arrow-collapse-dark.svg +++ b/src/vs/editor/contrib/folding/browser/arrow-collapse-dark.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/src/vs/editor/contrib/folding/browser/arrow-collapse.svg b/src/vs/editor/contrib/folding/browser/arrow-collapse.svg index 5dcb87c772c..642303c1233 100644 --- a/src/vs/editor/contrib/folding/browser/arrow-collapse.svg +++ b/src/vs/editor/contrib/folding/browser/arrow-collapse.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/src/vs/editor/contrib/folding/browser/arrow-expand-dark.svg b/src/vs/editor/contrib/folding/browser/arrow-expand-dark.svg index 46550b419e4..a58f41913e4 100644 --- a/src/vs/editor/contrib/folding/browser/arrow-expand-dark.svg +++ b/src/vs/editor/contrib/folding/browser/arrow-expand-dark.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/src/vs/editor/contrib/folding/browser/arrow-expand.svg b/src/vs/editor/contrib/folding/browser/arrow-expand.svg index e55ccd923e5..8411848a581 100644 --- a/src/vs/editor/contrib/folding/browser/arrow-expand.svg +++ b/src/vs/editor/contrib/folding/browser/arrow-expand.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/src/vs/editor/contrib/folding/browser/folding.css b/src/vs/editor/contrib/folding/browser/folding.css index dec103e8227..56657cf85bc 100644 --- a/src/vs/editor/contrib/folding/browser/folding.css +++ b/src/vs/editor/contrib/folding/browser/folding.css @@ -28,6 +28,15 @@ background-image: url('arrow-collapse-dark.svg'); } +/* High-contrast theme */ +.monaco-editor.hc-black .margin-view-overlays:hover .folding { + background-image: url('arrow-expand-dark.svg'); +} + +.monaco-editor.hc-black .margin-view-overlays .folding.collapsed { + background-image: url('arrow-collapse-dark.svg'); +} + .monaco-editor .inline-folded:after { color: grey; margin: 0.1em 0.2em 0 0.2em; diff --git a/src/vs/editor/contrib/folding/browser/folding.ts b/src/vs/editor/contrib/folding/browser/folding.ts index 4b5a731e970..801477e4bae 100644 --- a/src/vs/editor/contrib/folding/browser/folding.ts +++ b/src/vs/editor/contrib/folding/browser/folding.ts @@ -145,7 +145,6 @@ export class FoldingController implements editorCommon.IEditorContribution { this.computeToken = 0; this.globalToDispose.push(this.editor.addListener2(editorCommon.EventType.ModelChanged, () => this.onModelChanged())); - this.globalToDispose.push(this.editor.addListener2(editorCommon.EventType.ModelModeChanged, () => this.onModelChanged())); this.globalToDispose.push(this.editor.addListener2(editorCommon.EventType.ConfigurationChanged, (e: editorCommon.IConfigurationChangedEvent) => { if (e.folding) { this.onModelChanged(); @@ -478,11 +477,11 @@ CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(FoldAction, context: ContextKey.EditorFocus, primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_OPEN_SQUARE_BRACKET })); -CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(FoldAllAction, UnfoldAllAction.ID, nls.localize('foldAllAction.label', "Fold All"), { +CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(FoldAllAction, FoldAllAction.ID, nls.localize('foldAllAction.label', "Fold All"), { context: ContextKey.EditorFocus, primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.Shift | KeyCode.US_OPEN_SQUARE_BRACKET })); -CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(UnfoldAllAction, FoldAllAction.ID, nls.localize('unfoldAllAction.label', "Unfold All"), { +CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(UnfoldAllAction, UnfoldAllAction.ID, nls.localize('unfoldAllAction.label', "Unfold All"), { context: ContextKey.EditorFocus, primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET })); \ No newline at end of file diff --git a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts index a529121ffbd..90dae20ddc9 100644 --- a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts +++ b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts @@ -143,17 +143,16 @@ export class GoToTypeDeclarationActions extends GoToTypeAction { } } -export class GoToDeclarationAction extends GoToTypeAction { - - public static ID = 'editor.action.goToDeclaration'; +export abstract class BaseGoToDeclarationAction extends GoToTypeAction { constructor( descriptor: editorCommon.IEditorActionDescriptorData, editor: editorCommon.ICommonCodeEditor, - @IMessageService messageService: IMessageService, - @IEditorService editorService: IEditorService + messageService: IMessageService, + editorService: IEditorService, + condition: Behaviour ) { - super(descriptor, editor, messageService, editorService, this.behaviour); + super(descriptor, editor, messageService, editorService, condition); } public getGroupId(): string { @@ -179,16 +178,27 @@ export class GoToDeclarationAction extends GoToTypeAction { }); } - protected get behaviour(): Behaviour { - return DEFAULT_BEHAVIOR; - } protected _resolve(resource: URI, position: editorCommon.IPosition): TPromise { return getDeclarationsAtPosition(this.editor.getModel(), this.editor.getPosition()); } } -export class OpenDeclarationToTheSideAction extends GoToDeclarationAction { +export class GoToDeclarationAction extends BaseGoToDeclarationAction { + + public static ID = 'editor.action.goToDeclaration'; + + constructor( + descriptor: editorCommon.IEditorActionDescriptorData, + editor: editorCommon.ICommonCodeEditor, + @IMessageService messageService: IMessageService, + @IEditorService editorService: IEditorService + ) { + super(descriptor, editor, messageService, editorService, DEFAULT_BEHAVIOR); + } +} + +export class OpenDeclarationToTheSideAction extends BaseGoToDeclarationAction { public static ID = 'editor.action.openDeclarationToTheSide'; @@ -198,11 +208,7 @@ export class OpenDeclarationToTheSideAction extends GoToDeclarationAction { @IMessageService messageService: IMessageService, @IEditorService editorService: IEditorService ) { - super(descriptor, editor, messageService, editorService); - } - - protected get behaviour(): Behaviour { - return Behaviour.WidgetFocus | Behaviour.UpdateOnCursorPositionChange; + super(descriptor, editor, messageService, editorService, Behaviour.WidgetFocus | Behaviour.UpdateOnCursorPositionChange); } protected get openToTheSide(): boolean { @@ -210,7 +216,7 @@ export class OpenDeclarationToTheSideAction extends GoToDeclarationAction { } } -export class PreviewDeclarationAction extends GoToDeclarationAction { +export class PreviewDeclarationAction extends BaseGoToDeclarationAction { public static ID = 'editor.action.previewDeclaration'; @@ -220,7 +226,7 @@ export class PreviewDeclarationAction extends GoToDeclarationAction { @IMessageService messageService: IMessageService, @IEditorService editorService: IEditorService ) { - super(descriptor, editor, messageService, editorService); + super(descriptor, editor, messageService, editorService, DEFAULT_BEHAVIOR); } protected _showSingleReferenceInPeek() { diff --git a/src/vs/editor/contrib/indentation/common/indentation.ts b/src/vs/editor/contrib/indentation/common/indentation.ts index a81f4b15682..831932ed4a3 100644 --- a/src/vs/editor/contrib/indentation/common/indentation.ts +++ b/src/vs/editor/contrib/indentation/common/indentation.ts @@ -10,6 +10,7 @@ import {EditorAction} from 'vs/editor/common/editorAction'; import {ICommonCodeEditor, IEditorActionDescriptorData} from 'vs/editor/common/editorCommon'; import {CommonEditorRegistry, EditorActionDescriptor} from 'vs/editor/common/editorCommonExtensions'; import {IndentationToSpacesCommand, IndentationToTabsCommand} from 'vs/editor/contrib/indentation/common/indentationCommands'; +import {IQuickOpenService} from 'vs/workbench/services/quickopen/common/quickOpenService'; export class IndentationToSpacesAction extends EditorAction { static ID = 'editor.action.indentationToSpaces'; @@ -22,7 +23,7 @@ export class IndentationToSpacesAction extends EditorAction { const command = new IndentationToSpacesCommand(this.editor.getSelection(), this.editor.getIndentationOptions().tabSize); this.editor.executeCommands(this.id, [command]); - + return TPromise.as(true); } } @@ -43,6 +44,43 @@ export class IndentationToTabsAction extends EditorAction { } } +export abstract class Indent extends EditorAction { + + constructor(descriptor: IEditorActionDescriptorData, editor: ICommonCodeEditor, private insertSpaces: boolean, private quickOpenService: IQuickOpenService) { + super(descriptor, editor); + } + + public run(): TPromise { + return TPromise.timeout(50 /* quick open is sensitive to being opened so soon after another */).then(() => + this.quickOpenService.pick(['1', '2', '3', '4', '5', '6', '7', '8'], { placeHolder: nls.localize('selectTabWidth', "Select Tab Width")}).then(pick => { + this.editor.updateOptions({ + insertSpaces: this.insertSpaces, + tabSize: parseInt(pick) + }); + return true; + }) + ); + } +} + +export class IndentUsingSpaces extends Indent { + static ID = 'editor.action.indentUsingSpaces'; + + constructor(descriptor: IEditorActionDescriptorData, editor: ICommonCodeEditor, @IQuickOpenService quickOpenService: IQuickOpenService) { + super(descriptor, editor, true, quickOpenService); + } +} + +export class IndentUsingTabs extends Indent { + static ID = 'editor.action.indentUsingTabs'; + + constructor(descriptor: IEditorActionDescriptorData, editor: ICommonCodeEditor, @IQuickOpenService quickOpenService: IQuickOpenService) { + super(descriptor, editor, false, quickOpenService); + } +} + // register actions CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(IndentationToSpacesAction, IndentationToSpacesAction.ID, nls.localize('indentationToSpaces', "Convert Indentation to Spaces"))); CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(IndentationToTabsAction, IndentationToTabsAction.ID, nls.localize('indentationToTabs', "Convert Indentation to Tabs"))); +CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(IndentUsingSpaces, IndentUsingSpaces.ID, nls.localize('indentUsingSpaces', "Indent Using Spaces"))); +CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(IndentUsingTabs, IndentUsingTabs.ID, nls.localize('indentUsingTabs', "Indent Using Tabs"))); diff --git a/src/vs/editor/test/common/testModes.ts b/src/vs/editor/test/common/testModes.ts index 0852aa9471c..25b5cd39230 100644 --- a/src/vs/editor/test/common/testModes.ts +++ b/src/vs/editor/test/common/testModes.ts @@ -277,8 +277,8 @@ export class NMode extends TestingMode { public tokenizationSupport: modes.ITokenizationSupport; constructor(n:number) { - this.n = n; super(); + this.n = n; this.tokenizationSupport = new TokenizationSupport(this, { getInitialState: () => new NState(this, this.n) }, false, false); diff --git a/src/vs/languages/json/common/parser/jsonParser.ts b/src/vs/languages/json/common/parser/jsonParser.ts index 17d626a0d2b..ec6123c9cb8 100644 --- a/src/vs/languages/json/common/parser/jsonParser.ts +++ b/src/vs/languages/json/common/parser/jsonParser.ts @@ -419,9 +419,9 @@ export class StringASTNode extends ASTNode { public value:string; constructor(parent:ASTNode, name:string, isKey:boolean, start:number, end?:number) { + super(parent, 'string', name, start, end); this.isKey = isKey; this.value = ''; - super(parent, 'string', name, start, end); } public getValue():any { diff --git a/src/vs/languages/typescript/common/typescriptWorker2.ts b/src/vs/languages/typescript/common/typescriptWorker2.ts index bcec5818fb3..6e4959e51c9 100644 --- a/src/vs/languages/typescript/common/typescriptWorker2.ts +++ b/src/vs/languages/typescript/common/typescriptWorker2.ts @@ -68,6 +68,8 @@ export class TypeScriptWorker2 { this._disposables.push(this.resourceService.addListener2_(ResourceEvents.REMOVED, this._onResourceRemoved.bind(this))); this.resourceService.all() .forEach(element => this._onResourceAdded({ url: element.getAssociatedResource(), addedElement: element })); + + this._doConfigure(null); } public dispose(): void { diff --git a/src/vs/platform/instantiation/common/descriptors.ts b/src/vs/platform/instantiation/common/descriptors.ts index 90616915b22..baafac69d5f 100644 --- a/src/vs/platform/instantiation/common/descriptors.ts +++ b/src/vs/platform/instantiation/common/descriptors.ts @@ -201,6 +201,9 @@ export class AsyncDescriptor extends AbstractDescriptor implements objects constructor(private _moduleName: string, private _ctorName?: string, ...staticArguments: any[]) { super(staticArguments); + if (typeof _moduleName !== 'string') { + throw new Error('Invalid AsyncDescriptor arguments, expected `moduleName` to be a string!'); + } } public get moduleName(): string { diff --git a/src/vs/platform/instantiation/common/instantiationService.ts b/src/vs/platform/instantiation/common/instantiationService.ts index 5f40e4e9773..dacb8fa6055 100644 --- a/src/vs/platform/instantiation/common/instantiationService.ts +++ b/src/vs/platform/instantiation/common/instantiationService.ts @@ -208,7 +208,7 @@ class ServicesMap { allArguments.push.apply(allArguments, descriptor.staticArguments()); allArguments.push.apply(allArguments, args); - if (allArguments.length > 1) { + if (allArguments.length > 2) { console.warn('using OLD INJECTION STYLE for ' + descriptor.ctor.name); } } diff --git a/src/vs/platform/keybinding/browser/keybindingServiceImpl.ts b/src/vs/platform/keybinding/browser/keybindingServiceImpl.ts index 0a5b0f1b15a..6f29bb9b07a 100644 --- a/src/vs/platform/keybinding/browser/keybindingServiceImpl.ts +++ b/src/vs/platform/keybinding/browser/keybindingServiceImpl.ts @@ -129,38 +129,50 @@ export abstract class AbstractKeybindingService { public abstract executeCommand(commandId: string, args: any): TPromise; } -export class KeybindingService extends AbstractKeybindingService implements IKeybindingService { +export abstract class KeybindingService extends AbstractKeybindingService implements IKeybindingService { private _lastContextId: number; private _contexts: { [contextId: string]: KeybindingContext; }; - protected _domNode: HTMLElement; private _toDispose: IDisposable; - private _resolver: KeybindingResolver; + private _cachedResolver: KeybindingResolver; + private _firstTimeComputingResolver: boolean; private _currentChord: number; private _currentChordStatusMessage: IDisposable; - constructor(domNode: HTMLElement) { - this._lastContextId = -1; - super((++this._lastContextId)); - this._domNode = domNode; + constructor() { + super(0); + this._lastContextId = 0; this._contexts = Object.create(null); this._contexts[String(this._myContextId)] = new KeybindingContext(this._myContextId, null); - this._toDispose = dom.addDisposableListener(this._domNode, dom.EventType.KEY_DOWN, (e: KeyboardEvent) => { - let keyEvent = new StandardKeyboardEvent(e); - this._dispatch(keyEvent); - }); - - this._createOrUpdateResolver(true); + this._cachedResolver = null; + this._firstTimeComputingResolver = true; this._currentChord = 0; this._currentChordStatusMessage = null; } + protected _beginListening(domNode: HTMLElement): void { + this._toDispose = dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e: KeyboardEvent) => { + let keyEvent = new StandardKeyboardEvent(e); + this._dispatch(keyEvent); + }); + } + + private _getResolver(): KeybindingResolver { + if (!this._cachedResolver) { + this._cachedResolver = new KeybindingResolver(KeybindingsRegistry.getDefaultKeybindings(), this._getExtraKeybindings(this._firstTimeComputingResolver)); + this._firstTimeComputingResolver = false; + } + return this._cachedResolver; + } + public dispose(): void { - this._toDispose.dispose(); - this._toDispose = null; + if (this._toDispose) { + this._toDispose.dispose(); + this._toDispose = null; + } } public getLabelFor(keybinding: Keybinding): string { @@ -176,11 +188,7 @@ export class KeybindingService extends AbstractKeybindingService implements IKey } protected updateResolver(): void { - this._createOrUpdateResolver(false); - } - - private _createOrUpdateResolver(isFirstTime: boolean): void { - this._resolver = new KeybindingResolver(KeybindingsRegistry.getDefaultKeybindings(), this._getExtraKeybindings(isFirstTime)); + this._cachedResolver = null; } protected _getExtraKeybindings(isFirstTime: boolean): IKeybindingItem[] { @@ -188,7 +196,7 @@ export class KeybindingService extends AbstractKeybindingService implements IKey } public getDefaultKeybindings(): string { - return this._resolver.getDefaultKeybindings() + '\n\n' + this._getAllCommandsAsComment(); + return this._getResolver().getDefaultKeybindings() + '\n\n' + this._getAllCommandsAsComment(); } public customKeybindingsCount(): number { @@ -196,11 +204,11 @@ export class KeybindingService extends AbstractKeybindingService implements IKey } public lookupKeybindings(commandId: string): Keybinding[] { - return this._resolver.lookupKeybinding(commandId); + return this._getResolver().lookupKeybinding(commandId); } private _getAllCommandsAsComment(): string { - let boundCommands = this._resolver.getDefaultBoundCommands(); + let boundCommands = this._getResolver().getDefaultBoundCommands(); let unboundCommands = Object.keys(KeybindingsRegistry.getCommands()).filter(commandId => commandId[0] !== '_' && !boundCommands[commandId]); unboundCommands.sort(); let pretty = unboundCommands.join('\n// - '); @@ -223,7 +231,7 @@ export class KeybindingService extends AbstractKeybindingService implements IKey let contextValue = context.getValue(); // console.log(JSON.stringify(contextValue, null, '\t')); - let resolveResult = this._resolver.resolve(contextValue, this._currentChord, e.asKeybinding()); + let resolveResult = this._getResolver().resolve(contextValue, this._currentChord, e.asKeybinding()); if (resolveResult && resolveResult.enterChord) { e.preventDefault(); @@ -317,9 +325,9 @@ class ScopedKeybindingService extends AbstractKeybindingService { private _domNode: IKeybindingScopeLocation; constructor(parent: AbstractKeybindingService, domNode: IKeybindingScopeLocation) { + super(parent.createChildContext()); this._parent = parent; this._domNode = domNode; - super(this._parent.createChildContext()); this._domNode.setAttribute(KEYBINDING_CONTEXT_ATTR, String(this._myContextId)); } diff --git a/src/vs/platform/plugins/common/nativePluginService.ts b/src/vs/platform/plugins/common/nativePluginService.ts index b66c238f7e5..21ec477b3b6 100644 --- a/src/vs/platform/plugins/common/nativePluginService.ts +++ b/src/vs/platform/plugins/common/nativePluginService.ts @@ -99,12 +99,12 @@ export class MainProcessPluginService extends AbstractPluginServiceactiveEditor.getControl(); - return this.quickOpenService.pick([control.getAction(IndentationToSpacesAction.ID), control.getAction(IndentationToTabsAction.ID)], { + return this.quickOpenService.pick([control.getAction(IndentUsingSpaces.ID), control.getAction(IndentUsingTabs.ID), control.getAction(IndentationToSpacesAction.ID), control.getAction(IndentationToTabsAction.ID)], { placeHolder: nls.localize('pickAction', "Select Action") - }).then(action => action.run()); + }).then(action => action && action.run()); } } diff --git a/src/vs/workbench/parts/debug/browser/media/debugViewlet.css b/src/vs/workbench/parts/debug/browser/media/debugViewlet.css index c5002891eb7..8e7a2fd27d7 100644 --- a/src/vs/workbench/parts/debug/browser/media/debugViewlet.css +++ b/src/vs/workbench/parts/debug/browser/media/debugViewlet.css @@ -43,8 +43,8 @@ background: url('configure-inverse.svg') center center no-repeat; } -.monaco-workbench.hc-black .debug-action.toggle-repl:before { - content: url('repl-inverse.svg'); +.monaco-workbench.hc-black .debug-action.toggle-repl { + content: url('repl-inverse.svg') center center no-repeat;; } /* Debug viewlet trees */ diff --git a/src/vs/workbench/parts/git/browser/gitActions.ts b/src/vs/workbench/parts/git/browser/gitActions.ts index 54010dd2e95..616f0d47c24 100644 --- a/src/vs/workbench/parts/git/browser/gitActions.ts +++ b/src/vs/workbench/parts/git/browser/gitActions.ts @@ -66,9 +66,9 @@ export abstract class GitAction extends Action { protected toDispose: IDisposable[]; constructor(id: string, label: string, cssClass: string, gitService: IGitService) { - this.gitService = gitService; super(id, label, cssClass, false); + this.gitService = gitService; this.toDispose = [this.gitService.addBulkListener2(() => this.onGitServiceChange())]; this.onGitServiceChange(); } @@ -101,8 +101,8 @@ export class OpenChangeAction extends GitAction { protected editorService: IWorkbenchEditorService; constructor(@IWorkbenchEditorService editorService: IWorkbenchEditorService, @IGitService gitService: IGitService) { - this.editorService = editorService; super(OpenChangeAction.ID, nls.localize('openChange', "Open Change"), 'git-action open-change', gitService); + this.editorService = editorService; } protected isEnabled():boolean { @@ -132,10 +132,10 @@ export class OpenFileAction extends GitAction { private contextService: IWorkspaceContextService; constructor(@IWorkbenchEditorService editorService: IWorkbenchEditorService, @IFileService fileService: IFileService, @IGitService gitService: IGitService, @IWorkspaceContextService contextService: IWorkspaceContextService) { + super(OpenFileAction.ID, nls.localize('openFile', "Open File"), 'git-action open-file', gitService); this.fileService = fileService; this.editorService = editorService; this.contextService = contextService; - super(OpenFileAction.ID, nls.localize('openFile', "Open File"), 'git-action open-file', gitService); } protected isEnabled():boolean { @@ -312,12 +312,12 @@ export abstract class BaseUndoAction extends GitAction { private contextService: IWorkspaceContextService; constructor(id: string, label: string, className: string, gitService: IGitService, eventService: IEventService, messageService: IMessageService, fileService:IFileService, editorService: IWorkbenchEditorService, contextService: IWorkspaceContextService) { + super(id, label, className, gitService); this.eventService = eventService; this.editorService = editorService; this.messageService = messageService; this.fileService = fileService; this.contextService = contextService; - super(id, label, className, gitService); } protected isEnabled():boolean { @@ -595,13 +595,13 @@ export class CheckoutAction extends GitAction { private runPromises: Promise[]; constructor(branch: IBranch, @IGitService gitService: IGitService, @IWorkbenchEditorService editorService: IWorkbenchEditorService) { + super(CheckoutAction.ID, branch.name, 'git-action checkout', gitService); + this.editorService = editorService; this.branch = branch; this.HEAD = null; this.state = LifecycleState.Alive; this.runPromises = []; - - super(CheckoutAction.ID, branch.name, 'git-action checkout', gitService); } protected onGitServiceChange(): void { @@ -766,8 +766,8 @@ export class SmartCommitAction extends BaseCommitAction { private messageService: IMessageService; constructor(commitState: ICommitState, @IGitService gitService: IGitService, @IMessageService messageService: IMessageService) { - this.messageService = messageService; super(commitState, SmartCommitAction.ID, SmartCommitAction.ALL, 'git-action smart-commit', gitService); + this.messageService = messageService; } protected onGitServiceChange(): void { diff --git a/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts b/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts index bea2be263aa..65286eb6faa 100644 --- a/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts +++ b/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts @@ -121,8 +121,8 @@ export class WorkbenchKeybindingService extends KeybindingService { private _eventService: IEventService; constructor(contextService: IWorkspaceContextService, eventService: IEventService, telemetryService: ITelemetryService, domNode: HTMLElement) { + super(); this.contextService = contextService; - super(domNode); this.eventService = eventService; this.telemetryService = telemetryService; this.toDispose = this.eventService.addListener(EventType.WORKBENCH_OPTIONS_CHANGED, (e) => this.onOptionsChanged(e)); @@ -138,6 +138,8 @@ export class WorkbenchKeybindingService extends KeybindingService { this.updateResolver(); } }); + + this._beginListening(domNode); } setPluginService(pluginService: IPluginService): void {