From 87a02ebb0017b79d228883e2c01c88b25e1ebe41 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 7 Apr 2015 12:37:05 -0700 Subject: [PATCH 1/5] Fix find all refs and goto def for decorators --- src/compiler/utilities.ts | 1 + .../fourslash/findAllRefsOnDecorators.ts | 19 ++++++++++++++ .../fourslash/goToDefinitionDecorator.ts | 26 +++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 tests/cases/fourslash/findAllRefsOnDecorators.ts create mode 100644 tests/cases/fourslash/goToDefinitionDecorator.ts diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index e3efd12de0a..cc466834cbf 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -703,6 +703,7 @@ module ts { case SyntaxKind.TemplateExpression: case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.OmittedExpression: + case SyntaxKind.Decorator: return true; case SyntaxKind.QualifiedName: while (node.parent.kind === SyntaxKind.QualifiedName) { diff --git a/tests/cases/fourslash/findAllRefsOnDecorators.ts b/tests/cases/fourslash/findAllRefsOnDecorators.ts new file mode 100644 index 00000000000..3225bc108ce --- /dev/null +++ b/tests/cases/fourslash/findAllRefsOnDecorators.ts @@ -0,0 +1,19 @@ +/// + +// @Filename: a.ts +////function decorator(target) { +//// return target; +////} +////decorator(); + +// @Filename: b.ts +////@deco/*1*/rator @decorator("again") +////class C { +//// @decorator +//// method() {} +////} + +goTo.file("b.ts"); +goTo.marker("1"); + +verify.referencesCountIs(5); \ No newline at end of file diff --git a/tests/cases/fourslash/goToDefinitionDecorator.ts b/tests/cases/fourslash/goToDefinitionDecorator.ts new file mode 100644 index 00000000000..b0899a9576c --- /dev/null +++ b/tests/cases/fourslash/goToDefinitionDecorator.ts @@ -0,0 +1,26 @@ +/// + +// @Filename: b.ts +////@/*decoratorUse*/decorator +////class C { +//// @decora/*decoratorFactoryUse*/torFactory(a, "22", true) +//// method() {} +////} + + +// @Filename: a.ts +/////*decoratorDefinition*/function decorator(target) { +//// return target; +////} +/////*decoratorFactoryDefinition*/function decoratorFactory(...args) { +//// return target => target; +////} + + +goTo.marker('decoratorUse'); +goTo.definition(); +verify.caretAtMarker('decoratorDefinition'); + +goTo.marker('decoratorFactoryUse'); +goTo.definition(); +verify.caretAtMarker('decoratorFactoryDefinition'); From 955c9f1ff209b763a33b4d9d209fa7a2a8f814d0 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 7 Apr 2015 13:09:43 -0700 Subject: [PATCH 2/5] Update baselines --- .../reference/decoratorOnClass1.types | 2 +- .../reference/decoratorOnClass2.types | 2 +- .../reference/decoratorOnClassAccessor1.types | 2 +- .../reference/decoratorOnClassAccessor2.types | 2 +- .../reference/decoratorOnClassAccessor4.types | 2 +- .../reference/decoratorOnClassAccessor5.types | 2 +- ...decoratorOnClassConstructorParameter1.types | 2 +- .../reference/decoratorOnClassMethod1.types | 2 +- .../reference/decoratorOnClassMethod2.types | 2 +- .../reference/decoratorOnClassMethod4.types | 2 +- .../reference/decoratorOnClassMethod6.types | 2 +- .../reference/decoratorOnClassMethod7.types | 2 +- .../reference/decoratorOnClassMethod8.types | 2 +- .../decoratorOnClassMethodParameter1.types | 2 +- .../reference/decoratorOnClassProperty1.types | 2 +- .../reference/decoratorOnClassProperty11.types | 2 +- .../reference/decoratorOnClassProperty2.types | 2 +- .../reference/decoratorOnClassProperty6.types | 2 +- .../sourceMapValidationDecorators.types | 18 +++++++++--------- 19 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/baselines/reference/decoratorOnClass1.types b/tests/baselines/reference/decoratorOnClass1.types index 19e066586da..91c9feb4e35 100644 --- a/tests/baselines/reference/decoratorOnClass1.types +++ b/tests/baselines/reference/decoratorOnClass1.types @@ -7,7 +7,7 @@ declare function dec(target: T): T; >T : T @dec ->dec : unknown +>dec : (target: T) => T class C { >C : C diff --git a/tests/baselines/reference/decoratorOnClass2.types b/tests/baselines/reference/decoratorOnClass2.types index 43102ee9122..48565b74b43 100644 --- a/tests/baselines/reference/decoratorOnClass2.types +++ b/tests/baselines/reference/decoratorOnClass2.types @@ -7,7 +7,7 @@ declare function dec(target: T): T; >T : T @dec ->dec : unknown +>dec : (target: T) => T export class C { >C : C diff --git a/tests/baselines/reference/decoratorOnClassAccessor1.types b/tests/baselines/reference/decoratorOnClassAccessor1.types index fd592d7d294..602faf1fd22 100644 --- a/tests/baselines/reference/decoratorOnClassAccessor1.types +++ b/tests/baselines/reference/decoratorOnClassAccessor1.types @@ -14,6 +14,6 @@ class C { >C : C @dec get accessor() { return 1; } ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >accessor : number } diff --git a/tests/baselines/reference/decoratorOnClassAccessor2.types b/tests/baselines/reference/decoratorOnClassAccessor2.types index 32bb503d889..e43733db132 100644 --- a/tests/baselines/reference/decoratorOnClassAccessor2.types +++ b/tests/baselines/reference/decoratorOnClassAccessor2.types @@ -14,6 +14,6 @@ class C { >C : C @dec public get accessor() { return 1; } ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >accessor : number } diff --git a/tests/baselines/reference/decoratorOnClassAccessor4.types b/tests/baselines/reference/decoratorOnClassAccessor4.types index 40dd43d7e62..59399c5ea31 100644 --- a/tests/baselines/reference/decoratorOnClassAccessor4.types +++ b/tests/baselines/reference/decoratorOnClassAccessor4.types @@ -14,7 +14,7 @@ class C { >C : C @dec set accessor(value: number) { } ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >accessor : number >value : number } diff --git a/tests/baselines/reference/decoratorOnClassAccessor5.types b/tests/baselines/reference/decoratorOnClassAccessor5.types index 4b167fe8df1..8fe5ee55368 100644 --- a/tests/baselines/reference/decoratorOnClassAccessor5.types +++ b/tests/baselines/reference/decoratorOnClassAccessor5.types @@ -14,7 +14,7 @@ class C { >C : C @dec public set accessor(value: number) { } ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >accessor : number >value : number } diff --git a/tests/baselines/reference/decoratorOnClassConstructorParameter1.types b/tests/baselines/reference/decoratorOnClassConstructorParameter1.types index d5ce51269bc..a325945d8a2 100644 --- a/tests/baselines/reference/decoratorOnClassConstructorParameter1.types +++ b/tests/baselines/reference/decoratorOnClassConstructorParameter1.types @@ -10,6 +10,6 @@ class C { >C : C constructor(@dec p: number) {} ->dec : unknown +>dec : (target: Function, propertyKey: string | symbol, parameterIndex: number) => void >p : number } diff --git a/tests/baselines/reference/decoratorOnClassMethod1.types b/tests/baselines/reference/decoratorOnClassMethod1.types index 760f758bbff..fc7f27c5dfb 100644 --- a/tests/baselines/reference/decoratorOnClassMethod1.types +++ b/tests/baselines/reference/decoratorOnClassMethod1.types @@ -14,6 +14,6 @@ class C { >C : C @dec method() {} ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >method : () => void } diff --git a/tests/baselines/reference/decoratorOnClassMethod2.types b/tests/baselines/reference/decoratorOnClassMethod2.types index 98539648cd0..b83605c9c3c 100644 --- a/tests/baselines/reference/decoratorOnClassMethod2.types +++ b/tests/baselines/reference/decoratorOnClassMethod2.types @@ -14,6 +14,6 @@ class C { >C : C @dec public method() {} ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor >method : () => void } diff --git a/tests/baselines/reference/decoratorOnClassMethod4.types b/tests/baselines/reference/decoratorOnClassMethod4.types index 6d55e01e97a..5b48b267e1d 100644 --- a/tests/baselines/reference/decoratorOnClassMethod4.types +++ b/tests/baselines/reference/decoratorOnClassMethod4.types @@ -14,5 +14,5 @@ class C { >C : C @dec ["method"]() {} ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor } diff --git a/tests/baselines/reference/decoratorOnClassMethod6.types b/tests/baselines/reference/decoratorOnClassMethod6.types index 4e6629cd60a..8b167b5fb0f 100644 --- a/tests/baselines/reference/decoratorOnClassMethod6.types +++ b/tests/baselines/reference/decoratorOnClassMethod6.types @@ -14,5 +14,5 @@ class C { >C : C @dec ["method"]() {} ->dec : unknown +>dec : () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor } diff --git a/tests/baselines/reference/decoratorOnClassMethod7.types b/tests/baselines/reference/decoratorOnClassMethod7.types index 7e426cb773c..038d3ca7df5 100644 --- a/tests/baselines/reference/decoratorOnClassMethod7.types +++ b/tests/baselines/reference/decoratorOnClassMethod7.types @@ -14,5 +14,5 @@ class C { >C : C @dec public ["method"]() {} ->dec : unknown +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor } diff --git a/tests/baselines/reference/decoratorOnClassMethod8.types b/tests/baselines/reference/decoratorOnClassMethod8.types index f932ab8696f..20890b09846 100644 --- a/tests/baselines/reference/decoratorOnClassMethod8.types +++ b/tests/baselines/reference/decoratorOnClassMethod8.types @@ -10,6 +10,6 @@ class C { >C : C @dec method() {} ->dec : unknown +>dec : (target: T) => T >method : () => void } diff --git a/tests/baselines/reference/decoratorOnClassMethodParameter1.types b/tests/baselines/reference/decoratorOnClassMethodParameter1.types index cf7bfd352bf..0b75471471f 100644 --- a/tests/baselines/reference/decoratorOnClassMethodParameter1.types +++ b/tests/baselines/reference/decoratorOnClassMethodParameter1.types @@ -11,6 +11,6 @@ class C { method(@dec p: number) {} >method : (p: number) => void ->dec : unknown +>dec : (target: Function, propertyKey: string | symbol, parameterIndex: number) => void >p : number } diff --git a/tests/baselines/reference/decoratorOnClassProperty1.types b/tests/baselines/reference/decoratorOnClassProperty1.types index 651085c7ac4..e974397e532 100644 --- a/tests/baselines/reference/decoratorOnClassProperty1.types +++ b/tests/baselines/reference/decoratorOnClassProperty1.types @@ -8,6 +8,6 @@ class C { >C : C @dec prop; ->dec : unknown +>dec : (target: any, propertyKey: string) => void >prop : any } diff --git a/tests/baselines/reference/decoratorOnClassProperty11.types b/tests/baselines/reference/decoratorOnClassProperty11.types index 5377e53c31c..5caa467d3ba 100644 --- a/tests/baselines/reference/decoratorOnClassProperty11.types +++ b/tests/baselines/reference/decoratorOnClassProperty11.types @@ -9,6 +9,6 @@ class C { >C : C @dec prop; ->dec : unknown +>dec : () => (target: any, propertyKey: string) => void >prop : any } diff --git a/tests/baselines/reference/decoratorOnClassProperty2.types b/tests/baselines/reference/decoratorOnClassProperty2.types index 2d5c9fe07d7..78d35004f8f 100644 --- a/tests/baselines/reference/decoratorOnClassProperty2.types +++ b/tests/baselines/reference/decoratorOnClassProperty2.types @@ -8,6 +8,6 @@ class C { >C : C @dec public prop; ->dec : unknown +>dec : (target: any, propertyKey: string) => void >prop : any } diff --git a/tests/baselines/reference/decoratorOnClassProperty6.types b/tests/baselines/reference/decoratorOnClassProperty6.types index 2c8c41abf78..59d03678330 100644 --- a/tests/baselines/reference/decoratorOnClassProperty6.types +++ b/tests/baselines/reference/decoratorOnClassProperty6.types @@ -8,6 +8,6 @@ class C { >C : C @dec prop; ->dec : unknown +>dec : (target: Function) => void >prop : any } diff --git a/tests/baselines/reference/sourceMapValidationDecorators.types b/tests/baselines/reference/sourceMapValidationDecorators.types index 8be7f237391..05b512fa439 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.types +++ b/tests/baselines/reference/sourceMapValidationDecorators.types @@ -43,7 +43,7 @@ declare function ParameterDecorator2(x: number): (target: Function, key: string >paramIndex : number @ClassDecorator1 ->ClassDecorator1 : unknown +>ClassDecorator1 : (target: Function) => void @ClassDecorator2(10) >ClassDecorator2(10) : (target: Function) => void @@ -54,7 +54,7 @@ class Greeter { constructor( @ParameterDecorator1 ->ParameterDecorator1 : unknown +>ParameterDecorator1 : (target: Function, key: string | symbol, paramIndex: number) => void @ParameterDecorator2(20) >ParameterDecorator2(20) : (target: Function, key: string | symbol, paramIndex: number) => void @@ -64,7 +64,7 @@ class Greeter { >greeting : string @ParameterDecorator1 ->ParameterDecorator1 : unknown +>ParameterDecorator1 : (target: Function, key: string | symbol, paramIndex: number) => void @ParameterDecorator2(30) >ParameterDecorator2(30) : (target: Function, key: string | symbol, paramIndex: number) => void @@ -75,7 +75,7 @@ class Greeter { } @PropertyDecorator1 ->PropertyDecorator1 : unknown +>PropertyDecorator1 : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @PropertyDecorator2(40) >PropertyDecorator2(40) : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @@ -93,7 +93,7 @@ class Greeter { } @PropertyDecorator1 ->PropertyDecorator1 : unknown +>PropertyDecorator1 : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @PropertyDecorator2(50) >PropertyDecorator2(50) : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @@ -103,7 +103,7 @@ class Greeter { >x : string @PropertyDecorator1 ->PropertyDecorator1 : unknown +>PropertyDecorator1 : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @PropertyDecorator2(60) >PropertyDecorator2(60) : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @@ -116,7 +116,7 @@ class Greeter { >fn : (x: number) => string @ParameterDecorator1 ->ParameterDecorator1 : unknown +>ParameterDecorator1 : (target: Function, key: string | symbol, paramIndex: number) => void @ParameterDecorator2(70) >ParameterDecorator2(70) : (target: Function, key: string | symbol, paramIndex: number) => void @@ -132,7 +132,7 @@ class Greeter { } @PropertyDecorator1 ->PropertyDecorator1 : unknown +>PropertyDecorator1 : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @PropertyDecorator2(80) >PropertyDecorator2(80) : (target: Object, key: string | symbol, descriptor?: PropertyDescriptor) => void @@ -151,7 +151,7 @@ class Greeter { >greetings : string @ParameterDecorator1 ->ParameterDecorator1 : unknown +>ParameterDecorator1 : (target: Function, key: string | symbol, paramIndex: number) => void @ParameterDecorator2(90) >ParameterDecorator2(90) : (target: Function, key: string | symbol, paramIndex: number) => void From 0258a648f9a04cdadf4fbe075f70ac11fb4d753c Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 7 Apr 2015 15:41:21 -0700 Subject: [PATCH 3/5] Add tests --- .../cases/fourslash/getOccurrencesOfDecorators.ts | 14 ++++++++++++++ tests/cases/fourslash/quickInfoForDecorators.ts | 11 +++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tests/cases/fourslash/getOccurrencesOfDecorators.ts create mode 100644 tests/cases/fourslash/quickInfoForDecorators.ts diff --git a/tests/cases/fourslash/getOccurrencesOfDecorators.ts b/tests/cases/fourslash/getOccurrencesOfDecorators.ts new file mode 100644 index 00000000000..207e6877d99 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesOfDecorators.ts @@ -0,0 +1,14 @@ +/// + +// @Filename: b.ts +////@/*1*/decorator +////class C { +//// @decorator +//// method() {} +////} +////function decorator(target) { +//// return target; +////} + +goTo.marker("1"); +verify.occurrencesAtPositionCount(3); diff --git a/tests/cases/fourslash/quickInfoForDecorators.ts b/tests/cases/fourslash/quickInfoForDecorators.ts new file mode 100644 index 00000000000..14390f3c8ae --- /dev/null +++ b/tests/cases/fourslash/quickInfoForDecorators.ts @@ -0,0 +1,11 @@ +/// + +////@/*1*/decorator +////class C { + +////} +/////** decorator documentation*/ +////var decorator = t=> t; + +goTo.marker("1"); +verify.quickInfoIs("var decorator: (t: any) => any", "decorator documentation"); \ No newline at end of file From 51acda8e1d8c7f89413f4e8e121232535612d2f6 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Wed, 8 Apr 2015 16:18:49 -0700 Subject: [PATCH 4/5] Changed isExpression logic related to decorators --- src/compiler/utilities.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index cc466834cbf..7e1a840560f 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -703,7 +703,6 @@ module ts { case SyntaxKind.TemplateExpression: case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.OmittedExpression: - case SyntaxKind.Decorator: return true; case SyntaxKind.QualifiedName: while (node.parent.kind === SyntaxKind.QualifiedName) { @@ -755,6 +754,8 @@ module ts { return node === (parent).expression; case SyntaxKind.ComputedPropertyName: return node === (parent).expression; + case SyntaxKind.Decorator: + return true; default: if (isExpression(parent)) { return true; From 666765cfaa707e8b431c57542524a3eb69686ba5 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 9 Apr 2015 14:42:29 -0700 Subject: [PATCH 5/5] accept new test baselines --- .../reference/decoratorOnClassMethod11.js | 14 +++++++------- .../reference/decoratorOnClassMethod13.types | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/baselines/reference/decoratorOnClassMethod11.js b/tests/baselines/reference/decoratorOnClassMethod11.js index 71d4298f02c..f8276de2fe3 100644 --- a/tests/baselines/reference/decoratorOnClassMethod11.js +++ b/tests/baselines/reference/decoratorOnClassMethod11.js @@ -1,11 +1,11 @@ //// [decoratorOnClassMethod11.ts] -module M { - class C { - decorator(target: Object, key: string): void { } - - @this.decorator - method() { } - } +module M { + class C { + decorator(target: Object, key: string): void { } + + @this.decorator + method() { } + } } //// [decoratorOnClassMethod11.js] diff --git a/tests/baselines/reference/decoratorOnClassMethod13.types b/tests/baselines/reference/decoratorOnClassMethod13.types index 8c34805792f..1390f5750e6 100644 --- a/tests/baselines/reference/decoratorOnClassMethod13.types +++ b/tests/baselines/reference/decoratorOnClassMethod13.types @@ -14,8 +14,8 @@ class C { >C : C @dec ["1"]() { } ->dec : unknown +>dec : () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor @dec ["b"]() { } ->dec : unknown +>dec : () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor }