Skip to content

Commit a87512d

Browse files
authored
Add # to completion trigger character, (microsoft#36462)
Handle private identifiers little better by creating token for private identifier when its just # Report same error as invalid character but from language service we can now provide completions for this.# Fixes microsoft#36367, microsoft#36250
1 parent 3ece65a commit a87512d

File tree

7 files changed

+28
-9
lines changed

7 files changed

+28
-9
lines changed

src/compiler/scanner.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1907,11 +1907,12 @@ namespace ts {
19071907
if (ch === CharacterCodes.backslash) {
19081908
tokenValue += scanIdentifierParts();
19091909
}
1910-
return token = SyntaxKind.PrivateIdentifier;
19111910
}
1912-
error(Diagnostics.Invalid_character);
1913-
// no `pos++` because already advanced past the '#'
1914-
return token = SyntaxKind.Unknown;
1911+
else {
1912+
tokenValue = "#";
1913+
error(Diagnostics.Invalid_character);
1914+
}
1915+
return token = SyntaxKind.PrivateIdentifier;
19151916
default:
19161917
if (isIdentifierStart(ch, languageVersion)) {
19171918
pos += charSize(ch);

src/server/protocol.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1972,7 +1972,7 @@ namespace ts.server.protocol {
19721972
arguments: FormatOnKeyRequestArgs;
19731973
}
19741974

1975-
export type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<";
1975+
export type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#";
19761976

19771977
/**
19781978
* Arguments for completions messages.

src/services/completions.ts

+2
Original file line numberDiff line numberDiff line change
@@ -2654,6 +2654,8 @@ namespace ts.Completions {
26542654
case "`":
26552655
// Only automatically bring up completions if this is an opening quote.
26562656
return !!contextToken && isStringLiteralOrTemplate(contextToken) && position === contextToken.getStart(sourceFile) + 1;
2657+
case "#":
2658+
return !!contextToken && isPrivateIdentifier(contextToken) && !!getContainingClass(contextToken);
26572659
case "<":
26582660
// Opening JSX tag
26592661
return !!contextToken && contextToken.kind === SyntaxKind.LessThanToken && (!isBinaryExpression(contextToken.parent) || binaryExpressionMayBeOpenTag(contextToken.parent));

src/services/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ namespace ts {
418418

419419
export type OrganizeImportsScope = CombinedCodeFixScope;
420420

421-
export type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<";
421+
export type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#";
422422

423423
export interface GetCompletionsAtPositionOptions extends UserPreferences {
424424
/**

tests/baselines/reference/api/tsserverlibrary.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5198,7 +5198,7 @@ declare namespace ts {
51985198
fileName: string;
51995199
}
52005200
type OrganizeImportsScope = CombinedCodeFixScope;
5201-
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<";
5201+
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#";
52025202
interface GetCompletionsAtPositionOptions extends UserPreferences {
52035203
/**
52045204
* If the editor is asking for completions because a certain character was typed
@@ -7541,7 +7541,7 @@ declare namespace ts.server.protocol {
75417541
command: CommandTypes.Formatonkey;
75427542
arguments: FormatOnKeyRequestArgs;
75437543
}
7544-
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<";
7544+
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#";
75457545
/**
75467546
* Arguments for completions messages.
75477547
*/

tests/baselines/reference/api/typescript.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5198,7 +5198,7 @@ declare namespace ts {
51985198
fileName: string;
51995199
}
52005200
type OrganizeImportsScope = CombinedCodeFixScope;
5201-
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<";
5201+
type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#";
52025202
interface GetCompletionsAtPositionOptions extends UserPreferences {
52035203
/**
52045204
* If the editor is asking for completions because a certain character was typed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @target: esnext
4+
5+
////class K {
6+
//// #value: number;
7+
////
8+
//// foo() {
9+
//// this.#/**/
10+
//// }
11+
////}
12+
13+
verify.completions(
14+
{ marker: "", exact: ["#value", "foo"] },
15+
{ marker: "", exact: ["#value", "foo"], triggerCharacter: "#" },
16+
);

0 commit comments

Comments
 (0)