From e67cb686f94edb374c0375a3dac368b126d5c582 Mon Sep 17 00:00:00 2001 From: Jiri Bobek Date: Fri, 27 Sep 2024 17:56:02 +0200 Subject: [PATCH] fix hover --- src/vs/editor/browser/controller/mouseTarget.ts | 11 ++++++----- src/vs/editor/contrib/hover/browser/getHover.ts | 4 ++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index dcd880ab59838..aafb021e76a24 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -742,22 +742,23 @@ export class MouseTargetFactory { // Check if we are hitting a view-line (can happen in the case of inline decorations on empty lines) // See https://github.com/microsoft/vscode/issues/46942 if (ElementPath.isStrictChildOfViewLines(request.targetPath)) { - const spaceWidth = ctx.spaceWidth; const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset); const lineWidth = ctx.visibleRangeForPosition(lineNumber, ctx.viewModel.getLineMaxColumn(lineNumber))?.originalLeft || 0; const pxBehind = request.mouseContentHorizontalOffset - lineWidth; + const spaceWidth = ctx.spaceWidth; const colsBehind = Math.floor(pxBehind / spaceWidth); if (ctx.viewModel.getLineLength(lineNumber) === 0) { + const detail = createEmptyContentDataInLines(pxBehind); const pos = new Position(lineNumber, 1 + colsBehind); - //return request.fulfillContentText(pos, null, { mightBeForeignElement: false, injectedText: null }); - return request.fulfillContentEmpty(pos, createEmptyContentDataInLines(pxBehind)); + return request.fulfillContentEmpty(pos, detail); } if (request.mouseContentHorizontalOffset >= lineWidth) { + // TODO: This is wrong for RTL + const detail = createEmptyContentDataInLines(pxBehind); const pos = new Position(lineNumber, ctx.viewModel.getLineMaxColumn(lineNumber) + colsBehind); - //return request.fulfillContentText(pos, null, { mightBeForeignElement: false, injectedText: null }); - return request.fulfillContentEmpty(pos, createEmptyContentDataInLines(pxBehind)); + return request.fulfillContentEmpty(pos, detail); } } diff --git a/src/vs/editor/contrib/hover/browser/getHover.ts b/src/vs/editor/contrib/hover/browser/getHover.ts index 7c000ed2aa899..47ef2686be675 100644 --- a/src/vs/editor/contrib/hover/browser/getHover.ts +++ b/src/vs/editor/contrib/hover/browser/getHover.ts @@ -35,6 +35,10 @@ async function executeProvider(provider: HoverProvider, ordinal: number, model: } export function getHoverProviderResultsAsAsyncIterable(registry: LanguageFeatureRegistry, model: ITextModel, position: Position, token: CancellationToken, recursive = false): AsyncIterableObject { + const maxColumn = model.getLineMaxColumn(position.lineNumber); + if (position.column > maxColumn) { + position = new Position(position.lineNumber, maxColumn); + } const providers = registry.ordered(model, recursive); const promises = providers.map((provider, index) => executeProvider(provider, index, model, position, token)); return AsyncIterableObject.fromPromises(promises).coalesce();