Skip to content

Commit 34ea32f

Browse files
authoredFeb 7, 2025··
Revert "Proposed expandable hover API" (#61132)
1 parent c3ae7c4 commit 34ea32f

30 files changed

+57
-8169
lines changed
 

‎src/compiler/checker.ts

+32-105
Large diffs are not rendered by default.

‎src/compiler/types.ts

+1-7
Original file line numberDiff line numberDiff line change
@@ -5048,11 +5048,6 @@ export interface TypeCheckerHost extends ModuleSpecifierResolutionHost, SourceFi
50485048
packageBundlesTypes(packageName: string): boolean;
50495049
}
50505050

5051-
/** @internal */
5052-
export interface WriterContextOut {
5053-
couldUnfoldMore: boolean;
5054-
}
5055-
50565051
export interface TypeChecker {
50575052
getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type;
50585053
getTypeOfSymbol(symbol: Symbol): Type;
@@ -5139,7 +5134,6 @@ export interface TypeChecker {
51395134
symbolToParameterDeclaration(symbol: Symbol, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): ParameterDeclaration | undefined;
51405135
/** Note that the resulting nodes cannot be checked. */
51415136
typeParameterToDeclaration(parameter: TypeParameter, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): TypeParameterDeclaration | undefined;
5142-
/** @internal */ typeParameterToDeclaration(parameter: TypeParameter, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags?: InternalNodeBuilderFlags, tracker?: SymbolTracker, verbosityLevel?: number): TypeParameterDeclaration | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
51435137

51445138
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
51455139
getSymbolAtLocation(node: Node): Symbol | undefined;
@@ -5172,7 +5166,7 @@ export interface TypeChecker {
51725166
typePredicateToString(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
51735167

51745168
/** @internal */ writeSignature(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind, writer?: EmitTextWriter): string;
5175-
/** @internal */ writeType(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter, verbosityLevel?: number, out?: WriterContextOut): string;
5169+
/** @internal */ writeType(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter): string;
51765170
/** @internal */ writeSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags, writer?: EmitTextWriter): string;
51775171
/** @internal */ writeTypePredicate(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter): string;
51785172

‎src/harness/client.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ export class SessionClient implements LanguageService {
254254
return { line, character: offset };
255255
}
256256

257-
getQuickInfoAtPosition(fileName: string, position: number, verbosityLevel?: number | undefined): QuickInfo {
258-
const args = { ...this.createFileLocationRequestArgs(fileName, position), verbosityLevel };
257+
getQuickInfoAtPosition(fileName: string, position: number): QuickInfo {
258+
const args = this.createFileLocationRequestArgs(fileName, position);
259259

260260
const request = this.processRequest<protocol.QuickInfoRequest>(protocol.CommandTypes.Quickinfo, args);
261261
const response = this.processResponse<protocol.QuickInfoResponse>(request);
@@ -268,7 +268,6 @@ export class SessionClient implements LanguageService {
268268
displayParts: [{ kind: "text", text: body.displayString }],
269269
documentation: typeof body.documentation === "string" ? [{ kind: "text", text: body.documentation }] : body.documentation,
270270
tags: this.decodeLinkDisplayParts(body.tags),
271-
canIncreaseVerbosityLevel: body.canIncreaseVerbosityLevel,
272271
};
273272
}
274273

‎src/harness/fourslashImpl.ts

+6-19
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,6 @@ export interface TextSpan {
8686
end: number;
8787
}
8888

89-
export interface VerbosityLevels {
90-
[markerName: string]: number | number[] | undefined;
91-
}
92-
9389
// Name of testcase metadata including ts.CompilerOptions properties that will be used by globalOptions
9490
// To add additional option, add property into the testOptMetadataNames, refer the property in either globalMetadataNames or fileMetadataNames
9591
// Add cases into convertGlobalOptionsToCompilationsSettings function for the compiler to acknowledge such option from meta data
@@ -2455,28 +2451,19 @@ export class TestState {
24552451
return result;
24562452
}
24572453

2458-
public baselineQuickInfo(verbosityLevels?: VerbosityLevels): void {
2459-
const result = ts.arrayFrom(this.testData.markerPositions.entries(), ([name, marker]) => {
2460-
const verbosityLevel = toArray(verbosityLevels?.[name]);
2461-
const items = verbosityLevel.map(verbosityLevel => {
2462-
const item: ts.QuickInfo & { verbosityLevel?: number; } | undefined = this.languageService.getQuickInfoAtPosition(marker.fileName, marker.position, verbosityLevel);
2463-
if (item) item.verbosityLevel = verbosityLevel;
2464-
return {
2465-
marker: { ...marker, name },
2466-
item,
2467-
};
2468-
});
2469-
return items;
2470-
}).flat();
2454+
public baselineQuickInfo(): void {
2455+
const result = ts.arrayFrom(this.testData.markerPositions.entries(), ([name, marker]) => ({
2456+
marker: { ...marker, name },
2457+
item: this.languageService.getQuickInfoAtPosition(marker.fileName, marker.position),
2458+
}));
24712459
const annotations = this.annotateContentWithTooltips(
24722460
result,
24732461
"quickinfo",
24742462
item => item.textSpan,
2475-
({ displayParts, documentation, tags, verbosityLevel }) => [
2463+
({ displayParts, documentation, tags }) => [
24762464
...(displayParts ? displayParts.map(p => p.text).join("").split("\n") : []),
24772465
...(documentation?.length ? documentation.map(p => p.text).join("").split("\n") : []),
24782466
...(tags?.length ? tags.map(p => `@${p.name} ${p.text?.map(dp => dp.text).join("") ?? ""}`).join("\n").split("\n") : []),
2479-
...(verbosityLevel !== undefined ? [`(verbosity level: ${verbosityLevel})`] : []),
24802467
],
24812468
);
24822469
this.baseline("QuickInfo", annotations + "\n\n" + stringify(result));

‎src/harness/fourslashInterfaceImpl.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,8 @@ export class Verify extends VerifyNegatable {
449449
this.state.baselineGetEmitOutput();
450450
}
451451

452-
public baselineQuickInfo(verbosityLevels?: FourSlash.VerbosityLevels): void {
453-
this.state.baselineQuickInfo(verbosityLevels);
452+
public baselineQuickInfo(): void {
453+
this.state.baselineQuickInfo();
454454
}
455455

456456
public baselineSignatureHelp(): void {

‎src/server/protocol.ts

-10
Original file line numberDiff line numberDiff line change
@@ -2005,11 +2005,6 @@ export interface QuickInfoRequest extends FileLocationRequest {
20052005
arguments: FileLocationRequestArgs;
20062006
}
20072007

2008-
export interface QuickInfoRequestArgs extends FileLocationRequestArgs {
2009-
/** TODO */
2010-
verbosityLevel?: number;
2011-
}
2012-
20132008
/**
20142009
* Body of QuickInfoResponse.
20152010
*/
@@ -2049,11 +2044,6 @@ export interface QuickInfoResponseBody {
20492044
* JSDoc tags associated with symbol.
20502045
*/
20512046
tags: JSDocTagInfo[];
2052-
2053-
/**
2054-
* TODO
2055-
*/
2056-
canIncreaseVerbosityLevel?: boolean;
20572047
}
20582048

20592049
/**

‎src/server/session.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -2392,10 +2392,10 @@ export class Session<TMessage = string> implements EventSender {
23922392
return languageService.isValidBraceCompletionAtPosition(file, position, args.openingBrace.charCodeAt(0));
23932393
}
23942394

2395-
private getQuickInfoWorker(args: protocol.QuickInfoRequestArgs, simplifiedResult: boolean): protocol.QuickInfoResponseBody | QuickInfo | undefined {
2395+
private getQuickInfoWorker(args: protocol.FileLocationRequestArgs, simplifiedResult: boolean): protocol.QuickInfoResponseBody | QuickInfo | undefined {
23962396
const { file, project } = this.getFileAndProject(args);
23972397
const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file)!;
2398-
const quickInfo = project.getLanguageService().getQuickInfoAtPosition(file, this.getPosition(args, scriptInfo), args.verbosityLevel);
2398+
const quickInfo = project.getLanguageService().getQuickInfoAtPosition(file, this.getPosition(args, scriptInfo));
23992399
if (!quickInfo) {
24002400
return undefined;
24012401
}
@@ -2411,7 +2411,6 @@ export class Session<TMessage = string> implements EventSender {
24112411
displayString,
24122412
documentation: useDisplayParts ? this.mapDisplayParts(quickInfo.documentation, project) : displayPartsToString(quickInfo.documentation),
24132413
tags: this.mapJSDocTagInfo(quickInfo.tags, project, useDisplayParts),
2414-
canIncreaseVerbosityLevel: quickInfo.canIncreaseVerbosityLevel,
24152414
};
24162415
}
24172416
else {

‎src/services/services.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -2274,7 +2274,7 @@ export function createLanguageService(
22742274
return Completions.getCompletionEntrySymbol(program, log, getValidSourceFile(fileName), position, { name, source }, host, preferences);
22752275
}
22762276

2277-
function getQuickInfoAtPosition(fileName: string, position: number, verbosityLevel?: number): QuickInfo | undefined {
2277+
function getQuickInfoAtPosition(fileName: string, position: number): QuickInfo | undefined {
22782278
synchronizeHostData();
22792279

22802280
const sourceFile = getValidSourceFile(fileName);
@@ -2293,34 +2293,20 @@ export function createLanguageService(
22932293
kind: ScriptElementKind.unknown,
22942294
kindModifiers: ScriptElementKindModifier.none,
22952295
textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile),
2296-
displayParts: typeChecker.runWithCancellationToken(cancellationToken, typeChecker => typeToDisplayParts(typeChecker, type, getContainerNode(nodeForQuickInfo), /*flags*/ undefined, verbosityLevel)),
2296+
displayParts: typeChecker.runWithCancellationToken(cancellationToken, typeChecker => typeToDisplayParts(typeChecker, type, getContainerNode(nodeForQuickInfo))),
22972297
documentation: type.symbol ? type.symbol.getDocumentationComment(typeChecker) : undefined,
22982298
tags: type.symbol ? type.symbol.getJsDocTags(typeChecker) : undefined,
22992299
};
23002300
}
23012301

2302-
const { symbolKind, displayParts, documentation, tags, canIncreaseVerbosityLevel } = typeChecker.runWithCancellationToken(
2303-
cancellationToken,
2304-
typeChecker =>
2305-
SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(
2306-
typeChecker,
2307-
symbol,
2308-
sourceFile,
2309-
getContainerNode(nodeForQuickInfo),
2310-
nodeForQuickInfo,
2311-
/*semanticMeaning*/ undefined,
2312-
/*alias*/ undefined,
2313-
verbosityLevel,
2314-
),
2315-
);
2302+
const { symbolKind, displayParts, documentation, tags } = typeChecker.runWithCancellationToken(cancellationToken, typeChecker => SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, getContainerNode(nodeForQuickInfo), nodeForQuickInfo));
23162303
return {
23172304
kind: symbolKind,
23182305
kindModifiers: SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
23192306
textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile),
23202307
displayParts,
23212308
documentation,
23222309
tags,
2323-
canIncreaseVerbosityLevel,
23242310
};
23252311
}
23262312

‎src/services/symbolDisplay.ts

+6-53
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ import {
108108
TypeParameter,
109109
typeToDisplayParts,
110110
VariableDeclaration,
111-
WriterContextOut,
112111
} from "./_namespaces/ts.js";
113112

114113
const symbolDisplayNodeBuilderFlags = NodeBuilderFlags.OmitParameterModifiers | NodeBuilderFlags.IgnoreErrors | NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope;
@@ -255,20 +254,9 @@ export interface SymbolDisplayPartsDocumentationAndSymbolKind {
255254
documentation: SymbolDisplayPart[];
256255
symbolKind: ScriptElementKind;
257256
tags: JSDocTagInfo[] | undefined;
258-
canIncreaseVerbosityLevel?: boolean;
259257
}
260258

261-
function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(
262-
typeChecker: TypeChecker,
263-
symbol: Symbol,
264-
sourceFile: SourceFile,
265-
enclosingDeclaration: Node | undefined,
266-
location: Node,
267-
type: Type | undefined,
268-
semanticMeaning: SemanticMeaning,
269-
alias?: Symbol,
270-
verbosityLevel?: number,
271-
): SymbolDisplayPartsDocumentationAndSymbolKind {
259+
function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker: TypeChecker, symbol: Symbol, sourceFile: SourceFile, enclosingDeclaration: Node | undefined, location: Node, type: Type | undefined, semanticMeaning: SemanticMeaning, alias?: Symbol): SymbolDisplayPartsDocumentationAndSymbolKind {
272260
const displayParts: SymbolDisplayPart[] = [];
273261
let documentation: SymbolDisplayPart[] = [];
274262
let tags: JSDocTagInfo[] = [];
@@ -279,7 +267,6 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(
279267
let documentationFromAlias: SymbolDisplayPart[] | undefined;
280268
let tagsFromAlias: JSDocTagInfo[] | undefined;
281269
let hasMultipleSignatures = false;
282-
const typeWriterOut: WriterContextOut | undefined = verbosityLevel !== undefined ? { couldUnfoldMore: false } : undefined;
283270

284271
if (location.kind === SyntaxKind.ThisKeyword && !isThisExpression) {
285272
return { displayParts: [keywordPart(SyntaxKind.ThisKeyword)], documentation: [], symbolKind: ScriptElementKind.primitiveType, tags: undefined };
@@ -475,17 +462,7 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(
475462
displayParts.push(spacePart());
476463
displayParts.push(operatorPart(SyntaxKind.EqualsToken));
477464
displayParts.push(spacePart());
478-
addRange(
479-
displayParts,
480-
typeToDisplayParts(
481-
typeChecker,
482-
location.parent && isConstTypeReference(location.parent) ? typeChecker.getTypeAtLocation(location.parent) : typeChecker.getDeclaredTypeOfSymbol(symbol),
483-
enclosingDeclaration,
484-
TypeFormatFlags.InTypeAlias,
485-
verbosityLevel,
486-
typeWriterOut,
487-
),
488-
);
465+
addRange(displayParts, typeToDisplayParts(typeChecker, location.parent && isConstTypeReference(location.parent) ? typeChecker.getTypeAtLocation(location.parent) : typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, TypeFormatFlags.InTypeAlias));
489466
}
490467
if (symbolFlags & SymbolFlags.Enum) {
491468
prefixNextMeaning();
@@ -673,30 +650,13 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(
673650
// If the type is type parameter, format it specially
674651
if (type.symbol && type.symbol.flags & SymbolFlags.TypeParameter && symbolKind !== ScriptElementKind.indexSignatureElement) {
675652
const typeParameterParts = mapToDisplayParts(writer => {
676-
const param = typeChecker.typeParameterToDeclaration(
677-
type as TypeParameter,
678-
enclosingDeclaration,
679-
symbolDisplayNodeBuilderFlags,
680-
/*internalFlags*/ undefined,
681-
/*tracker*/ undefined,
682-
verbosityLevel,
683-
)!;
653+
const param = typeChecker.typeParameterToDeclaration(type as TypeParameter, enclosingDeclaration, symbolDisplayNodeBuilderFlags)!;
684654
getPrinter().writeNode(EmitHint.Unspecified, param, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration)), writer);
685655
});
686656
addRange(displayParts, typeParameterParts);
687657
}
688658
else {
689-
addRange(
690-
displayParts,
691-
typeToDisplayParts(
692-
typeChecker,
693-
type,
694-
enclosingDeclaration,
695-
/*flags*/ undefined,
696-
verbosityLevel,
697-
typeWriterOut,
698-
),
699-
);
659+
addRange(displayParts, typeToDisplayParts(typeChecker, type, enclosingDeclaration));
700660
}
701661
if (isTransientSymbol(symbol) && symbol.links.target && isTransientSymbol(symbol.links.target) && symbol.links.target.links.tupleLabelDeclaration) {
702662
const labelDecl = symbol.links.target.links.tupleLabelDeclaration;
@@ -782,13 +742,7 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(
782742
tags = tagsFromAlias;
783743
}
784744

785-
return {
786-
displayParts,
787-
documentation,
788-
symbolKind,
789-
tags: tags.length === 0 ? undefined : tags,
790-
canIncreaseVerbosityLevel: typeWriterOut?.couldUnfoldMore,
791-
};
745+
return { displayParts, documentation, symbolKind, tags: tags.length === 0 ? undefined : tags };
792746

793747
function getPrinter() {
794748
return createPrinterWithRemoveComments();
@@ -920,9 +874,8 @@ export function getSymbolDisplayPartsDocumentationAndSymbolKind(
920874
location: Node,
921875
semanticMeaning: SemanticMeaning = getMeaningFromLocation(location),
922876
alias?: Symbol,
923-
verbosityLevel?: number,
924877
): SymbolDisplayPartsDocumentationAndSymbolKind {
925-
return getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symbol, sourceFile, enclosingDeclaration, location, /*type*/ undefined, semanticMeaning, alias, verbosityLevel);
878+
return getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symbol, sourceFile, enclosingDeclaration, location, /*type*/ undefined, semanticMeaning, alias);
926879
}
927880

928881
function isLocalVariableOrFunction(symbol: Symbol) {

‎src/services/types.ts

-3
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,6 @@ export interface LanguageService {
583583
* @param position A zero-based index of the character where you want the quick info
584584
*/
585585
getQuickInfoAtPosition(fileName: string, position: number): QuickInfo | undefined;
586-
/** @internal */
587-
getQuickInfoAtPosition(fileName: string, position: number, verbosityLevel: number | undefined): QuickInfo | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
588586

589587
getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TextSpan | undefined;
590588

@@ -1326,7 +1324,6 @@ export interface QuickInfo {
13261324
displayParts?: SymbolDisplayPart[];
13271325
documentation?: SymbolDisplayPart[];
13281326
tags?: JSDocTagInfo[];
1329-
canIncreaseVerbosityLevel?: boolean;
13301327
}
13311328

13321329
export type RenameInfo = RenameInfoSuccess | RenameInfoFailure;

‎src/services/utilities.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,6 @@ import {
390390
visitEachChild,
391391
VoidExpression,
392392
walkUpParenthesizedExpressions,
393-
WriterContextOut,
394393
YieldExpression,
395394
} from "./_namespaces/ts.js";
396395

@@ -3056,9 +3055,9 @@ export function mapToDisplayParts(writeDisplayParts: (writer: DisplayPartsSymbol
30563055
}
30573056

30583057
/** @internal */
3059-
export function typeToDisplayParts(typechecker: TypeChecker, type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.None, verbosityLevel?: number, out?: WriterContextOut): SymbolDisplayPart[] {
3058+
export function typeToDisplayParts(typechecker: TypeChecker, type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.None): SymbolDisplayPart[] {
30603059
return mapToDisplayParts(writer => {
3061-
typechecker.writeType(type, enclosingDeclaration, flags | TypeFormatFlags.MultilineObjectLiterals | TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, writer, verbosityLevel, out);
3060+
typechecker.writeType(type, enclosingDeclaration, flags | TypeFormatFlags.MultilineObjectLiterals | TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, writer);
30623061
});
30633062
}
30643063

0 commit comments

Comments
 (0)