mirror of
https://github.com/Microsoft/vscode
synced 2024-10-02 09:18:59 +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
|
||||
* 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> {
|
||||
/**
|
||||
* Hover verbosity request
|
||||
*/
|
||||
verbosityRequest?: HoverVerbosityRequest<THover>;
|
||||
}
|
||||
|
||||
export interface HoverVerbosityRequest<THover = Hover> {
|
||||
/**
|
||||
* Whether to increase or decrease the hover's verbosity
|
||||
*/
|
||||
action?: HoverVerbosityAction;
|
||||
action: HoverVerbosityAction;
|
||||
/**
|
||||
* The previous hover for the same position
|
||||
*/
|
||||
previousHover?: THover;
|
||||
previousHover: THover;
|
||||
}
|
||||
|
||||
export enum HoverVerbosityAction {
|
||||
|
|
|
@ -352,7 +352,7 @@ class MarkdownRenderedHoverParts extends Disposable {
|
|||
const hoverPosition = hoverRenderedPart.hoverSource.hoverPosition;
|
||||
const hoverProvider = hoverRenderedPart.hoverSource.hoverProvider;
|
||||
const hover = hoverRenderedPart.hoverSource.hover;
|
||||
const hoverContext: HoverContext = { action, previousHover: hover };
|
||||
const hoverContext: HoverContext = { verbosityRequest: { action, previousHover: hover } };
|
||||
|
||||
let newHover: Hover | null | undefined;
|
||||
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
|
||||
* 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> {
|
||||
/**
|
||||
* Hover verbosity request
|
||||
*/
|
||||
verbosityRequest?: HoverVerbosityRequest<THover>;
|
||||
}
|
||||
|
||||
export interface HoverVerbosityRequest<THover = Hover> {
|
||||
/**
|
||||
* Whether to increase or decrease the hover's verbosity
|
||||
*/
|
||||
action?: HoverVerbosityAction;
|
||||
action: HoverVerbosityAction;
|
||||
/**
|
||||
* The previous hover for the same position
|
||||
*/
|
||||
previousHover?: THover;
|
||||
previousHover: THover;
|
||||
}
|
||||
|
||||
export enum HoverVerbosityAction {
|
||||
|
|
|
@ -256,9 +256,15 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread
|
|||
this._proxy.$releaseHover(handle, hoverId);
|
||||
});
|
||||
*/
|
||||
this._registrations.set(handle, this._languageFeaturesService.hoverProvider.register(selector, <languages.HoverProvider>{
|
||||
provideHover: async (model: ITextModel, position: EditorPosition, token: CancellationToken, context?: languages.HoverContext<{ id: number }>): Promise<HoverWithId | undefined> => {
|
||||
const hover = await this._proxy.$provideHover(handle, model.uri, position, context, token);
|
||||
this._registrations.set(handle, this._languageFeaturesService.hoverProvider.register(selector, <languages.HoverProvider<HoverWithId>>{
|
||||
provideHover: async (model: ITextModel, position: EditorPosition, token: CancellationToken, context?: languages.HoverContext<HoverWithId>): Promise<HoverWithId | undefined> => {
|
||||
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);
|
||||
return hover;
|
||||
}
|
||||
|
|
|
@ -271,13 +271,13 @@ class HoverAdapter {
|
|||
const pos = typeConvert.Position.to(position);
|
||||
|
||||
let value: vscode.Hover | null | undefined;
|
||||
if (context && context.previousHover !== undefined && context.action !== undefined) {
|
||||
const previousHoverId = context.previousHover.id;
|
||||
if (context && context.verbosityRequest) {
|
||||
const previousHoverId = context.verbosityRequest.previousHover.id;
|
||||
const previousHover = this._hoverMap.get(previousHoverId);
|
||||
if (!previousHover) {
|
||||
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);
|
||||
} else {
|
||||
value = await this._provider.provideHover(doc, pos, token);
|
||||
|
|
Loading…
Reference in a new issue