From f948f5d3f79b89ee3f63fc62ca11bf200de44571 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 25 Aug 2014 17:35:18 -0700 Subject: [PATCH] Re-added fourslash tests, corrected failures. --- src/compiler/checker.ts | 24 +++++++++---------- src/harness/fourslash.ts | 2 +- src/services/services.ts | 14 +++++++++-- .../getOccurrencesIsWriteAccess.ts | 0 .../getOccurrencesOfAnonymousFunction.ts} | 0 .../getOccurrencesOfAnonymousFunction2.ts} | 0 .../getOccurrencesOfUndefinedSymbol.ts | 0 7 files changed, 25 insertions(+), 15 deletions(-) rename tests/cases/{fourslash_old => fourslash}/getOccurrencesIsWriteAccess.ts (100%) rename tests/cases/{fourslash_old/getOccurrencesOfAnonomusFunction.ts => fourslash/getOccurrencesOfAnonymousFunction.ts} (100%) rename tests/cases/{fourslash_old/getOccurrencesOfAnonomusFunction2.ts => fourslash/getOccurrencesOfAnonymousFunction2.ts} (100%) rename tests/cases/{fourslash_old => fourslash}/getOccurrencesOfUndefinedSymbol.ts (100%) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3ca6f2b892a..420a1020c32 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11,6 +11,18 @@ module ts { var nextNodeId = 1; var nextMergeId = 1; + export function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if (declaration.kind === kind) { + return declaration; + } + } + + return undefined; + } + /// fullTypeCheck denotes if this instance of the typechecker will be used to get semantic diagnostics. /// If fullTypeCheck === true - then typechecker should do every possible check to produce all errors /// If fullTypeCheck === false - typechecker can shortcut and skip checks that only produce errors. @@ -570,18 +582,6 @@ module ts { return false; } - function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration { - var declarations = symbol.declarations; - for (var i = 0; i < declarations.length; i++) { - var declaration = declarations[i]; - if (declaration.kind === kind) { - return declaration; - } - } - - return undefined; - } - function findConstructorDeclaration(node: ClassDeclaration): ConstructorDeclaration { var members = node.members; for (var i = 0; i < members.length; i++) { diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index ee302bb4450..eb728414607 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -607,7 +607,7 @@ module FourSlash { for (var i = 0; i < references.length; i++) { var reference = references[i]; - if (reference && reference.fileName === fileName && reference.minChar === start && reference.limChar === end) { + if (reference && reference.fileName === fileName && reference.textSpan.start() === start && reference.textSpan.end() === end) { if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { throw new Error('verifyReferencesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + reference.isWriteAccess + ', expected: ' + isWriteAccess + '.'); } diff --git a/src/services/services.ts b/src/services/services.ts index a2dc460a912..06e67415ea5 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2224,7 +2224,7 @@ module ts { var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), symbol.getDeclarations()); // Get the text to search for, we need to normalize it as external module names will have quote - var symbolName = getNormalizedSymbolName(symbol.getName()); + var symbolName = getNormalizedSymbolName(symbol); var scope = getSymbolScope(symbol); @@ -2245,7 +2245,17 @@ module ts { return result; - function getNormalizedSymbolName(name: string): string { + function getNormalizedSymbolName(symbol: Symbol): string { + // Special case for function expressions, whose names are solely local to their bodies. + var functionExpression = getDeclarationOfKind(symbol, SyntaxKind.FunctionExpression); + + if (functionExpression && functionExpression.name) { + var name = functionExpression.name.text; + } + else { + var name = symbol.name; + } + var length = name.length; if (length >= 2 && name.charCodeAt(0) === CharacterCodes.doubleQuote && name.charCodeAt(length - 1) === CharacterCodes.doubleQuote) { return name.substring(1, length - 1); diff --git a/tests/cases/fourslash_old/getOccurrencesIsWriteAccess.ts b/tests/cases/fourslash/getOccurrencesIsWriteAccess.ts similarity index 100% rename from tests/cases/fourslash_old/getOccurrencesIsWriteAccess.ts rename to tests/cases/fourslash/getOccurrencesIsWriteAccess.ts diff --git a/tests/cases/fourslash_old/getOccurrencesOfAnonomusFunction.ts b/tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts similarity index 100% rename from tests/cases/fourslash_old/getOccurrencesOfAnonomusFunction.ts rename to tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts diff --git a/tests/cases/fourslash_old/getOccurrencesOfAnonomusFunction2.ts b/tests/cases/fourslash/getOccurrencesOfAnonymousFunction2.ts similarity index 100% rename from tests/cases/fourslash_old/getOccurrencesOfAnonomusFunction2.ts rename to tests/cases/fourslash/getOccurrencesOfAnonymousFunction2.ts diff --git a/tests/cases/fourslash_old/getOccurrencesOfUndefinedSymbol.ts b/tests/cases/fourslash/getOccurrencesOfUndefinedSymbol.ts similarity index 100% rename from tests/cases/fourslash_old/getOccurrencesOfUndefinedSymbol.ts rename to tests/cases/fourslash/getOccurrencesOfUndefinedSymbol.ts