mirror of
https://github.com/Microsoft/vscode
synced 2024-10-02 17:32:41 +00:00
Fixing type serialization issue with HoverWithId
interface (#210889)
* addressing pr review * renaming to the verbosity request
This commit is contained in:
parent
ad5ae83b39
commit
eafc55a31b
|
@ -190,18 +190,25 @@ export interface HoverProvider<THover = Hover> {
|
||||||
* position will be merged by the editor. A hover can have a range which defaults
|
* position will be merged by the editor. A hover can have a range which defaults
|
||||||
* to the word range at the position when omitted.
|
* to the word range at the position when omitted.
|
||||||
*/
|
*/
|
||||||
provideHover(model: model.ITextModel, position: Position, token: CancellationToken, context?: HoverContext<THover>): ProviderResult<Hover>;
|
provideHover(model: model.ITextModel, position: Position, token: CancellationToken, context?: HoverContext<THover>): ProviderResult<THover>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HoverContext<THover = Hover> {
|
export interface HoverContext<THover = Hover> {
|
||||||
|
/**
|
||||||
|
* Hover verbosity request
|
||||||
|
*/
|
||||||
|
verbosityRequest?: HoverVerbosityRequest<THover>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HoverVerbosityRequest<THover = Hover> {
|
||||||
/**
|
/**
|
||||||
* Whether to increase or decrease the hover's verbosity
|
* Whether to increase or decrease the hover's verbosity
|
||||||
*/
|
*/
|
||||||
action?: HoverVerbosityAction;
|
action: HoverVerbosityAction;
|
||||||
/**
|
/**
|
||||||
* The previous hover for the same position
|
* The previous hover for the same position
|
||||||
*/
|
*/
|
||||||
previousHover?: THover;
|
previousHover: THover;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum HoverVerbosityAction {
|
export enum HoverVerbosityAction {
|
||||||
|
|
|
@ -352,7 +352,7 @@ class MarkdownRenderedHoverParts extends Disposable {
|
||||||
const hoverPosition = hoverRenderedPart.hoverSource.hoverPosition;
|
const hoverPosition = hoverRenderedPart.hoverSource.hoverPosition;
|
||||||
const hoverProvider = hoverRenderedPart.hoverSource.hoverProvider;
|
const hoverProvider = hoverRenderedPart.hoverSource.hoverProvider;
|
||||||
const hover = hoverRenderedPart.hoverSource.hover;
|
const hover = hoverRenderedPart.hoverSource.hover;
|
||||||
const hoverContext: HoverContext = { action, previousHover: hover };
|
const hoverContext: HoverContext = { verbosityRequest: { action, previousHover: hover } };
|
||||||
|
|
||||||
let newHover: Hover | null | undefined;
|
let newHover: Hover | null | undefined;
|
||||||
try {
|
try {
|
||||||
|
|
13
src/vs/monaco.d.ts
vendored
13
src/vs/monaco.d.ts
vendored
|
@ -6852,18 +6852,25 @@ declare namespace monaco.languages {
|
||||||
* position will be merged by the editor. A hover can have a range which defaults
|
* position will be merged by the editor. A hover can have a range which defaults
|
||||||
* to the word range at the position when omitted.
|
* to the word range at the position when omitted.
|
||||||
*/
|
*/
|
||||||
provideHover(model: editor.ITextModel, position: Position, token: CancellationToken, context?: HoverContext<THover>): ProviderResult<Hover>;
|
provideHover(model: editor.ITextModel, position: Position, token: CancellationToken, context?: HoverContext<THover>): ProviderResult<THover>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HoverContext<THover = Hover> {
|
export interface HoverContext<THover = Hover> {
|
||||||
|
/**
|
||||||
|
* Hover verbosity request
|
||||||
|
*/
|
||||||
|
verbosityRequest?: HoverVerbosityRequest<THover>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HoverVerbosityRequest<THover = Hover> {
|
||||||
/**
|
/**
|
||||||
* Whether to increase or decrease the hover's verbosity
|
* Whether to increase or decrease the hover's verbosity
|
||||||
*/
|
*/
|
||||||
action?: HoverVerbosityAction;
|
action: HoverVerbosityAction;
|
||||||
/**
|
/**
|
||||||
* The previous hover for the same position
|
* The previous hover for the same position
|
||||||
*/
|
*/
|
||||||
previousHover?: THover;
|
previousHover: THover;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum HoverVerbosityAction {
|
export enum HoverVerbosityAction {
|
||||||
|
|
|
@ -256,9 +256,15 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread
|
||||||
this._proxy.$releaseHover(handle, hoverId);
|
this._proxy.$releaseHover(handle, hoverId);
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
this._registrations.set(handle, this._languageFeaturesService.hoverProvider.register(selector, <languages.HoverProvider>{
|
this._registrations.set(handle, this._languageFeaturesService.hoverProvider.register(selector, <languages.HoverProvider<HoverWithId>>{
|
||||||
provideHover: async (model: ITextModel, position: EditorPosition, token: CancellationToken, context?: languages.HoverContext<{ id: number }>): Promise<HoverWithId | undefined> => {
|
provideHover: async (model: ITextModel, position: EditorPosition, token: CancellationToken, context?: languages.HoverContext<HoverWithId>): Promise<HoverWithId | undefined> => {
|
||||||
const hover = await this._proxy.$provideHover(handle, model.uri, position, context, token);
|
const serializedContext: languages.HoverContext<{ id: number }> = {
|
||||||
|
verbosityRequest: context?.verbosityRequest ? {
|
||||||
|
action: context.verbosityRequest.action,
|
||||||
|
previousHover: { id: context.verbosityRequest.previousHover.id }
|
||||||
|
} : undefined,
|
||||||
|
};
|
||||||
|
const hover = await this._proxy.$provideHover(handle, model.uri, position, serializedContext, token);
|
||||||
// hoverFinalizationRegistry.register(hover, hover.id);
|
// hoverFinalizationRegistry.register(hover, hover.id);
|
||||||
return hover;
|
return hover;
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,13 +271,13 @@ class HoverAdapter {
|
||||||
const pos = typeConvert.Position.to(position);
|
const pos = typeConvert.Position.to(position);
|
||||||
|
|
||||||
let value: vscode.Hover | null | undefined;
|
let value: vscode.Hover | null | undefined;
|
||||||
if (context && context.previousHover !== undefined && context.action !== undefined) {
|
if (context && context.verbosityRequest) {
|
||||||
const previousHoverId = context.previousHover.id;
|
const previousHoverId = context.verbosityRequest.previousHover.id;
|
||||||
const previousHover = this._hoverMap.get(previousHoverId);
|
const previousHover = this._hoverMap.get(previousHoverId);
|
||||||
if (!previousHover) {
|
if (!previousHover) {
|
||||||
throw new Error(`Hover with id ${previousHoverId} not found`);
|
throw new Error(`Hover with id ${previousHoverId} not found`);
|
||||||
}
|
}
|
||||||
const hoverContext: vscode.HoverContext = { action: context.action, previousHover };
|
const hoverContext: vscode.HoverContext = { action: context.verbosityRequest.action, previousHover };
|
||||||
value = await this._provider.provideHover(doc, pos, token, hoverContext);
|
value = await this._provider.provideHover(doc, pos, token, hoverContext);
|
||||||
} else {
|
} else {
|
||||||
value = await this._provider.provideHover(doc, pos, token);
|
value = await this._provider.provideHover(doc, pos, token);
|
||||||
|
|
Loading…
Reference in a new issue