mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-09 07:55:10 -05:00
fix(49566): Implicit this.property completions not returned while writing property (#49574)
* fix(49566): show this.prop completions in class scoped property declaration * remove duplicate default value
This commit is contained in:
@@ -672,9 +672,9 @@ namespace ts {
|
||||
return moduleSpecifier && resolveExternalModuleName(moduleSpecifier, moduleSpecifier, /*ignoreErrors*/ true);
|
||||
},
|
||||
resolveExternalModuleSymbol,
|
||||
tryGetThisTypeAt: (nodeIn, includeGlobalThis) => {
|
||||
tryGetThisTypeAt: (nodeIn, includeGlobalThis, container) => {
|
||||
const node = getParseTreeNode(nodeIn);
|
||||
return node && tryGetThisTypeAt(node, includeGlobalThis);
|
||||
return node && tryGetThisTypeAt(node, includeGlobalThis, container);
|
||||
},
|
||||
getTypeArgumentConstraint: nodeIn => {
|
||||
const node = getParseTreeNode(nodeIn, isTypeNode);
|
||||
|
||||
@@ -4597,7 +4597,7 @@ namespace ts {
|
||||
*/
|
||||
/* @internal */ resolveExternalModuleSymbol(symbol: Symbol): Symbol;
|
||||
/** @param node A location where we might consider accessing `this`. Not necessarily a ThisExpression. */
|
||||
/* @internal */ tryGetThisTypeAt(node: Node, includeGlobalThis?: boolean): Type | undefined;
|
||||
/* @internal */ tryGetThisTypeAt(node: Node, includeGlobalThis?: boolean, container?: Node): Type | undefined;
|
||||
/* @internal */ getTypeArgumentConstraint(node: TypeNode): Type | undefined;
|
||||
|
||||
/**
|
||||
|
||||
@@ -2616,7 +2616,7 @@ namespace ts.Completions {
|
||||
|
||||
// Need to insert 'this.' before properties of `this` type, so only do that if `includeInsertTextCompletions`
|
||||
if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== SyntaxKind.SourceFile) {
|
||||
const thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false);
|
||||
const thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false, isClassLike(scopeNode.parent) ? scopeNode : undefined);
|
||||
if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) {
|
||||
for (const symbol of getPropertiesForCompletion(thisType, typeChecker)) {
|
||||
symbolToOriginInfoMap[symbols.length] = { kind: SymbolOriginInfoKind.ThisType };
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////class Foo {
|
||||
//// private _prop = 1;
|
||||
//// public a = [|_/*1*/|]
|
||||
////
|
||||
//// foo() {
|
||||
//// [|_/*2*/|]
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.completions({
|
||||
marker: ["1", "2"],
|
||||
includes: [
|
||||
{
|
||||
name: "_prop",
|
||||
insertText: "this._prop",
|
||||
kind: "property",
|
||||
sortText: completion.SortText.SuggestedClassMembers,
|
||||
source: completion.CompletionSource.ThisProperty,
|
||||
text: "(property) Foo._prop: number",
|
||||
kindModifiers: "private"
|
||||
},
|
||||
],
|
||||
preferences: {
|
||||
includeInsertTextCompletions: true
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////class Foo {
|
||||
//// private static _prop = 1;
|
||||
//// public static a = [|_/*1*/|]
|
||||
////
|
||||
//// static foo() {
|
||||
//// [|_/*2*/|]
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.completions({
|
||||
marker: ["2"],
|
||||
includes: [
|
||||
{
|
||||
name: "_prop",
|
||||
insertText: "this._prop",
|
||||
kind: "property",
|
||||
sortText: completion.SortText.SuggestedClassMembers,
|
||||
source: completion.CompletionSource.ThisProperty,
|
||||
text: "(property) Foo._prop: number",
|
||||
kindModifiers: "private,static"
|
||||
},
|
||||
],
|
||||
preferences: {
|
||||
includeInsertTextCompletions: true
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user