From 3f9f6879484b9c4fc4d38d4efb1233067d826a4f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 13:49:21 -0700 Subject: [PATCH 1/8] Added failing test. --- .../findAllRefsForVariableInExtendsClause01.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts diff --git a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts new file mode 100644 index 00000000000..1ec144d7e82 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts @@ -0,0 +1,15 @@ +/// + + +////var [|Base|] = class { }; +////class C extends [|Base|] { } + +let ranges = test.ranges(); +for (let range of ranges) { + goTo.position(range.start); + + verify.referencesCountIs(ranges.length); + for (let expectedReference of ranges) { + verify.referencesAtPositionContains(expectedReference); + } +} \ No newline at end of file From f80fa8ea82cbd4333e3dcddcae0e58e7d2db756f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 13:50:29 -0700 Subject: [PATCH 2/8] Use appropriate resolution meaning. --- src/compiler/checker.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d57f9eaed1b..df4f99fbb3e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14054,7 +14054,10 @@ namespace ts { } if (isHeritageClauseElementIdentifier(entityName)) { - let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? SymbolFlags.Type : SymbolFlags.Namespace; + let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? + (SymbolFlags.Value | SymbolFlags.Type) : + SymbolFlags.Namespace; + meaning |= SymbolFlags.Alias; return resolveEntityName(entityName, meaning); } From a29f01413de647b0671adbf1834551225963535e Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 13:51:12 -0700 Subject: [PATCH 3/8] Accepted baselines. --- .../baselines/reference/extendClassExpressionFromModule.symbols | 1 + tests/baselines/reference/extendNonClassSymbol1.symbols | 1 + tests/baselines/reference/reboundBaseClassSymbol.symbols | 2 +- tests/baselines/reference/reboundBaseClassSymbol.types | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/extendClassExpressionFromModule.symbols b/tests/baselines/reference/extendClassExpressionFromModule.symbols index c131ea8fa28..78d483b5d7d 100644 --- a/tests/baselines/reference/extendClassExpressionFromModule.symbols +++ b/tests/baselines/reference/extendClassExpressionFromModule.symbols @@ -8,6 +8,7 @@ var x = foo1; class y extends x {} >y : Symbol(y, Decl(foo2.ts, 1, 13)) +>x : Symbol(x, Decl(foo2.ts, 1, 3)) === tests/cases/conformance/classes/classExpressions/foo1.ts === class x{} diff --git a/tests/baselines/reference/extendNonClassSymbol1.symbols b/tests/baselines/reference/extendNonClassSymbol1.symbols index 02291ebb181..7c03ef3a97f 100644 --- a/tests/baselines/reference/extendNonClassSymbol1.symbols +++ b/tests/baselines/reference/extendNonClassSymbol1.symbols @@ -9,4 +9,5 @@ var x = A; class C extends x { } // error, could not find symbol xs >C : Symbol(C, Decl(extendNonClassSymbol1.ts, 1, 10)) +>x : Symbol(x, Decl(extendNonClassSymbol1.ts, 1, 3)) diff --git a/tests/baselines/reference/reboundBaseClassSymbol.symbols b/tests/baselines/reference/reboundBaseClassSymbol.symbols index 788d7d95c9e..2396e7b7b85 100644 --- a/tests/baselines/reference/reboundBaseClassSymbol.symbols +++ b/tests/baselines/reference/reboundBaseClassSymbol.symbols @@ -11,6 +11,6 @@ module Foo { interface B extends A { b: string; } >B : Symbol(B, Decl(reboundBaseClassSymbol.ts, 2, 14)) ->A : Symbol(A, Decl(reboundBaseClassSymbol.ts, 0, 0)) +>A : Symbol(A, Decl(reboundBaseClassSymbol.ts, 2, 7)) >b : Symbol(b, Decl(reboundBaseClassSymbol.ts, 3, 27)) } diff --git a/tests/baselines/reference/reboundBaseClassSymbol.types b/tests/baselines/reference/reboundBaseClassSymbol.types index 9c62d838f42..e2ae18400cd 100644 --- a/tests/baselines/reference/reboundBaseClassSymbol.types +++ b/tests/baselines/reference/reboundBaseClassSymbol.types @@ -12,6 +12,6 @@ module Foo { interface B extends A { b: string; } >B : B ->A : A +>A : any >b : string } From 660058dcde2e077a186081eab2bd23b9ed50bb5d Mon Sep 17 00:00:00 2001 From: zhengbli Date: Wed, 30 Sep 2015 13:55:29 -0700 Subject: [PATCH 4/8] Fix the bug turning Float32Array type to any --- src/lib/dom.generated.d.ts | 36 ++++++++++++++++---------------- src/lib/webworker.generated.d.ts | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lib/dom.generated.d.ts b/src/lib/dom.generated.d.ts index 90075a290a4..e34ce36633f 100644 --- a/src/lib/dom.generated.d.ts +++ b/src/lib/dom.generated.d.ts @@ -202,8 +202,8 @@ interface AnalyserNode extends AudioNode { smoothingTimeConstant: number; getByteFrequencyData(array: Uint8Array): void; getByteTimeDomainData(array: Uint8Array): void; - getFloatFrequencyData(array: any): void; - getFloatTimeDomainData(array: any): void; + getFloatFrequencyData(array: Float32Array): void; + getFloatTimeDomainData(array: Float32Array): void; } declare var AnalyserNode: { @@ -290,7 +290,7 @@ interface AudioBuffer { length: number; numberOfChannels: number; sampleRate: number; - getChannelData(channel: number): any; + getChannelData(channel: number): Float32Array; } declare var AudioBuffer: { @@ -334,7 +334,7 @@ interface AudioContext extends EventTarget { createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode; createOscillator(): OscillatorNode; createPanner(): PannerNode; - createPeriodicWave(real: any, imag: any): PeriodicWave; + createPeriodicWave(real: Float32Array, imag: Float32Array): PeriodicWave; createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode; createStereoPanner(): StereoPannerNode; createWaveShaper(): WaveShaperNode; @@ -392,7 +392,7 @@ interface AudioParam { linearRampToValueAtTime(value: number, endTime: number): void; setTargetAtTime(target: number, startTime: number, timeConstant: number): void; setValueAtTime(value: number, startTime: number): void; - setValueCurveAtTime(values: any, startTime: number, duration: number): void; + setValueCurveAtTime(values: Float32Array, startTime: number, duration: number): void; } declare var AudioParam: { @@ -468,7 +468,7 @@ interface BiquadFilterNode extends AudioNode { frequency: AudioParam; gain: AudioParam; type: string; - getFrequencyResponse(frequencyHz: any, magResponse: any, phaseResponse: any): void; + getFrequencyResponse(frequencyHz: Float32Array, magResponse: Float32Array, phaseResponse: Float32Array): void; } declare var BiquadFilterNode: { @@ -10893,7 +10893,7 @@ declare var WEBGL_depth_texture: { } interface WaveShaperNode extends AudioNode { - curve: any; + curve: Float32Array; oversample: string; } @@ -11080,34 +11080,34 @@ interface WebGLRenderingContext { texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; uniform1f(location: WebGLUniformLocation, x: number): void; - uniform1fv(location: WebGLUniformLocation, v: any): void; + uniform1fv(location: WebGLUniformLocation, v: Float32Array): void; uniform1i(location: WebGLUniformLocation, x: number): void; uniform1iv(location: WebGLUniformLocation, v: Int32Array): void; uniform2f(location: WebGLUniformLocation, x: number, y: number): void; - uniform2fv(location: WebGLUniformLocation, v: any): void; + uniform2fv(location: WebGLUniformLocation, v: Float32Array): void; uniform2i(location: WebGLUniformLocation, x: number, y: number): void; uniform2iv(location: WebGLUniformLocation, v: Int32Array): void; uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; - uniform3fv(location: WebGLUniformLocation, v: any): void; + uniform3fv(location: WebGLUniformLocation, v: Float32Array): void; uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; uniform3iv(location: WebGLUniformLocation, v: Int32Array): void; uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; - uniform4fv(location: WebGLUniformLocation, v: any): void; + uniform4fv(location: WebGLUniformLocation, v: Float32Array): void; uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; uniform4iv(location: WebGLUniformLocation, v: Int32Array): void; - uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: any): void; - uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: any): void; - uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: any): void; + uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; + uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; + uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; useProgram(program: WebGLProgram): void; validateProgram(program: WebGLProgram): void; vertexAttrib1f(indx: number, x: number): void; - vertexAttrib1fv(indx: number, values: any): void; + vertexAttrib1fv(indx: number, values: Float32Array): void; vertexAttrib2f(indx: number, x: number, y: number): void; - vertexAttrib2fv(indx: number, values: any): void; + vertexAttrib2fv(indx: number, values: Float32Array): void; vertexAttrib3f(indx: number, x: number, y: number, z: number): void; - vertexAttrib3fv(indx: number, values: any): void; + vertexAttrib3fv(indx: number, values: Float32Array): void; vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void; - vertexAttrib4fv(indx: number, values: any): void; + vertexAttrib4fv(indx: number, values: Float32Array): void; vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void; viewport(x: number, y: number, width: number, height: number): void; ACTIVE_ATTRIBUTES: number; diff --git a/src/lib/webworker.generated.d.ts b/src/lib/webworker.generated.d.ts index 9353047e9c6..f37ea5c6ed2 100644 --- a/src/lib/webworker.generated.d.ts +++ b/src/lib/webworker.generated.d.ts @@ -17,7 +17,7 @@ interface AudioBuffer { length: number; numberOfChannels: number; sampleRate: number; - getChannelData(channel: number): any; + getChannelData(channel: number): Float32Array; } declare var AudioBuffer: { From e9dc1fbdfabbf5ee9bdaa0729650d48bc0904e17 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 13:55:37 -0700 Subject: [PATCH 5/8] Added one more test. --- .../findAllRefsForVariableInImplementsClause01.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts diff --git a/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts b/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts new file mode 100644 index 00000000000..93f8cec8109 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts @@ -0,0 +1,10 @@ +/// + + +////var Base = class { }; +////class C extends Base implements [|Base|] { } + +let ranges = test.ranges(); +for (let range of ranges) { + verify.referencesCountIs(0); +} \ No newline at end of file From 091e2344a377f3a433cc14ac178a4b129ed18d31 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 14:29:15 -0700 Subject: [PATCH 6/8] Added failing test. --- .../findAllRefsForVariableInExtendsClause02.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts diff --git a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts new file mode 100644 index 00000000000..0f06a3c4202 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts @@ -0,0 +1,17 @@ +/// + +////interface [|Base|] { } +////namespace n { +//// var Base = class { }; +//// interface I extends [|Base|] { } +////} + +let ranges = test.ranges(); +for (let range of ranges) { + goTo.position(range.start); + + verify.referencesCountIs(ranges.length); + for (let expectedReference of ranges) { + verify.referencesAtPositionContains(expectedReference); + } +} \ No newline at end of file From 48de0b6ff6b2ec8c0d6e00339d9e254c023add40 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 14:30:54 -0700 Subject: [PATCH 7/8] Account for interface extends clauses. --- src/compiler/checker.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index df4f99fbb3e..18942e8ce56 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14054,9 +14054,20 @@ namespace ts { } if (isHeritageClauseElementIdentifier(entityName)) { - let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? - (SymbolFlags.Value | SymbolFlags.Type) : - SymbolFlags.Namespace; + let meaning = SymbolFlags.None; + + // In an interface or class, we're definitely interested in a type. + if (entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments) { + meaning = SymbolFlags.Type; + + // In a class 'extends' clause we are also looking for a value. + if (isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + meaning |= SymbolFlags.Value; + } + } + else { + meaning = SymbolFlags.Namespace; + } meaning |= SymbolFlags.Alias; return resolveEntityName(entityName, meaning); From cbca15435f71082a91b17c68d33938d32e019286 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 30 Sep 2015 14:32:11 -0700 Subject: [PATCH 8/8] Accepted baselines. --- tests/baselines/reference/reboundBaseClassSymbol.symbols | 2 +- tests/baselines/reference/reboundBaseClassSymbol.types | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/reboundBaseClassSymbol.symbols b/tests/baselines/reference/reboundBaseClassSymbol.symbols index 2396e7b7b85..788d7d95c9e 100644 --- a/tests/baselines/reference/reboundBaseClassSymbol.symbols +++ b/tests/baselines/reference/reboundBaseClassSymbol.symbols @@ -11,6 +11,6 @@ module Foo { interface B extends A { b: string; } >B : Symbol(B, Decl(reboundBaseClassSymbol.ts, 2, 14)) ->A : Symbol(A, Decl(reboundBaseClassSymbol.ts, 2, 7)) +>A : Symbol(A, Decl(reboundBaseClassSymbol.ts, 0, 0)) >b : Symbol(b, Decl(reboundBaseClassSymbol.ts, 3, 27)) } diff --git a/tests/baselines/reference/reboundBaseClassSymbol.types b/tests/baselines/reference/reboundBaseClassSymbol.types index e2ae18400cd..9c62d838f42 100644 --- a/tests/baselines/reference/reboundBaseClassSymbol.types +++ b/tests/baselines/reference/reboundBaseClassSymbol.types @@ -12,6 +12,6 @@ module Foo { interface B extends A { b: string; } >B : B ->A : any +>A : A >b : string }