Skip to content

Commit

Permalink
Add grammar error on quoted constructors for TS 3.5
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewbranch committed Apr 25, 2019
1 parent 72f30a8 commit c5e6913
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
3 changes: 3 additions & 0 deletions src/compiler/checker.ts
Expand Up @@ -31468,6 +31468,9 @@ namespace ts {
return grammarErrorAtPos(node, node.end - 1, ";".length, Diagnostics._0_expected, "{");
}
}
else if (isClassLike(node.parent) && isStringLiteral(node.name) && node.name.text === "constructor" && (!compilerOptions.target || compilerOptions.target < ScriptTarget.ES5)) {
return grammarErrorOnNode(node.name, Diagnostics.Quoted_constructors_have_previously_been_interpreted_as_methods_which_is_incorrect_In_TypeScript_3_6_they_will_be_correctly_parsed_as_constructors_In_the_meantime_consider_using_constructor_to_write_a_constructor_or_constructor_to_write_a_method);
}
if (checkGrammarForGenerator(node)) {
return true;
}
Expand Down
6 changes: 5 additions & 1 deletion src/compiler/diagnosticMessages.json
Expand Up @@ -2959,7 +2959,7 @@
"category": "Error",
"code": 4104
},

"The current host does not support the '{0}' option.": {
"category": "Error",
"code": 5001
Expand Down Expand Up @@ -4954,5 +4954,9 @@
"No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer." :{
"category": "Error",
"code": 18004
},
"Quoted constructors have previously been interpreted as methods, which is incorrect. In TypeScript 3.6, they will be correctly parsed as constructors. In the meantime, consider using 'constructor()' to write a constructor, or '[\"constructor\"]()' to write a method.": {
"category": "Error",
"code": 96000
}
}
@@ -1,23 +1,17 @@
class C {
x: number;
"constructor"() {
this.x = 0;
}
"constructor"() {} // Error in 3.5
}
(new C).constructor(); // Error

class D {
x: number;
'constructor'() {
this.x = 0;
}
'constructor'() {} // Error in 3.5
}
(new C).constructor(); // Error

class E {
x: number;
['constructor']() {
this.x = 0;
}
['constructor']() {}
}
(new E).constructor();

new class {
"constructor"() {} // Error in 3.5
};

var o = { "constructor"() {} };

0 comments on commit c5e6913

Please sign in to comment.