Fix error spans for classes.

This commit is contained in:
Cyrus Najmabadi 2015-04-01 18:56:57 -07:00
parent 189482e730
commit 2eddf310dc
5 changed files with 12 additions and 13 deletions

View file

@ -9757,12 +9757,11 @@ module ts {
function checkClassDeclaration(node: ClassDeclaration) { function checkClassDeclaration(node: ClassDeclaration) {
// Grammar checking // Grammar checking
if (node.parent.kind !== SyntaxKind.ModuleBlock && node.parent.kind !== SyntaxKind.SourceFile) { if (node.parent.kind !== SyntaxKind.ModuleBlock && node.parent.kind !== SyntaxKind.SourceFile) {
grammarErrorOnFirstToken(node, Diagnostics.class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration); grammarErrorOnNode(node, Diagnostics.class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration);
} }
// node.flags & NodeFlags.Default || kind === SyntaxKind.ClassExpression
if (!node.name && !(node.flags & NodeFlags.Default)) { if (!node.name && !(node.flags & NodeFlags.Default)) {
grammarErrorOnNode(node, Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); grammarErrorOnFirstToken(node, Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name);
} }
checkGrammarClassDeclarationHeritageClauses(node); checkGrammarClassDeclarationHeritageClauses(node);

View file

@ -1,4 +1,4 @@
tests/cases/compiler/classDeclarationBlockScoping1.ts(5,5): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. tests/cases/compiler/classDeclarationBlockScoping1.ts(5,11): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
==== tests/cases/compiler/classDeclarationBlockScoping1.ts (1 errors) ==== ==== tests/cases/compiler/classDeclarationBlockScoping1.ts (1 errors) ====
@ -7,7 +7,7 @@ tests/cases/compiler/classDeclarationBlockScoping1.ts(5,5): error TS9004: 'class
{ {
class C { class C {
~~~~~ ~
!!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. !!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
} }
} }

View file

@ -1,16 +1,16 @@
tests/cases/compiler/classDeclarationBlockScoping2.ts(2,5): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. tests/cases/compiler/classDeclarationBlockScoping2.ts(2,11): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
tests/cases/compiler/classDeclarationBlockScoping2.ts(5,9): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. tests/cases/compiler/classDeclarationBlockScoping2.ts(5,15): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
==== tests/cases/compiler/classDeclarationBlockScoping2.ts (2 errors) ==== ==== tests/cases/compiler/classDeclarationBlockScoping2.ts (2 errors) ====
function f() { function f() {
class C {} class C {}
~~~~~ ~
!!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. !!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
var c1 = C; var c1 = C;
{ {
class C {} class C {}
~~~~~ ~
!!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. !!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
var c2 = C; var c2 = C;
} }

View file

@ -1,10 +1,10 @@
tests/cases/compiler/classExpressionTest1.ts(2,5): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. tests/cases/compiler/classExpressionTest1.ts(2,11): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
==== tests/cases/compiler/classExpressionTest1.ts (1 errors) ==== ==== tests/cases/compiler/classExpressionTest1.ts (1 errors) ====
function M() { function M() {
class C<X> { class C<X> {
~~~~~ ~
!!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. !!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
f<T>() { f<T>() {
var t: T; var t: T;

View file

@ -1,9 +1,9 @@
tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts(2,5): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts(2,11): error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
==== tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts (1 errors) ==== ==== tests/cases/conformance/classes/classDeclarations/classInsideBlock.ts (1 errors) ====
function foo() { function foo() {
class C { } class C { }
~~~~~ ~
!!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration. !!! error TS9004: 'class' declarations are only supported directly inside a module or as a top level declaration.
} }