From 1b4b01eed5c67591827e10c4b268ac97cd2f1937 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 14 Jun 2016 06:49:17 -0700 Subject: [PATCH 1/2] Unescape identifiers used in code completion --- src/harness/fourslash.ts | 2 ++ src/services/services.ts | 2 +- tests/cases/fourslash/codeCompletionEscaping.ts | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeCompletionEscaping.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 8104f11339223..17f14e30737cf 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -717,6 +717,8 @@ namespace FourSlash { public verifyCompletionEntryDetails(entryName: string, expectedText: string, expectedDocumentation?: string, kind?: string) { const details = this.getCompletionEntryDetails(entryName); + assert(details, "no completion entry available"); + assert.equal(ts.displayPartsToString(details.displayParts), expectedText, this.assertionMessageAtLastKnownMarker("completion entry details text")); if (expectedDocumentation !== undefined) { diff --git a/src/services/services.ts b/src/services/services.ts index d051a4378e490..d5f63627471d5 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3234,7 +3234,7 @@ namespace ts { } } - return name; + return unescapeIdentifier(name); } function getCompletionData(fileName: string, position: number) { diff --git a/tests/cases/fourslash/codeCompletionEscaping.ts b/tests/cases/fourslash/codeCompletionEscaping.ts new file mode 100644 index 0000000000000..b8182307b7bb4 --- /dev/null +++ b/tests/cases/fourslash/codeCompletionEscaping.ts @@ -0,0 +1,8 @@ +/// + +// @Filename: a.js +// @allowJs: true +////__foo;/**/ + +goTo.marker(); +verify.completionListContains("__foo", undefined, undefined, "warning"); From 6b05ecab5bbdac72d1c94e32052c8053fa55fd7c Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 14 Jun 2016 09:39:48 -0700 Subject: [PATCH 2/2] Fix bug: do unescaping in the right place, so that it only affects escaped javascript identifiers --- src/services/services.ts | 4 ++-- tests/cases/fourslash/codeCompletionEscaping.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index d5f63627471d5..70cc7e2e08d16 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3234,7 +3234,7 @@ namespace ts { } } - return unescapeIdentifier(name); + return name; } function getCompletionData(fileName: string, position: number) { @@ -4141,7 +4141,7 @@ namespace ts { if (!uniqueNames[name]) { uniqueNames[name] = name; - const displayName = getCompletionEntryDisplayName(name, target, /*performCharacterChecks*/ true); + const displayName = getCompletionEntryDisplayName(unescapeIdentifier(name), target, /*performCharacterChecks*/ true); if (displayName) { const entry = { name: displayName, diff --git a/tests/cases/fourslash/codeCompletionEscaping.ts b/tests/cases/fourslash/codeCompletionEscaping.ts index b8182307b7bb4..5061a87e5b636 100644 --- a/tests/cases/fourslash/codeCompletionEscaping.ts +++ b/tests/cases/fourslash/codeCompletionEscaping.ts @@ -2,7 +2,8 @@ // @Filename: a.js // @allowJs: true -////__foo;/**/ +////___foo; __foo;/**/ goTo.marker(); verify.completionListContains("__foo", undefined, undefined, "warning"); +verify.completionListContains("___foo", undefined, undefined, "warning");