Path: blob/main/src/vs/editor/contrib/hover/browser/glyphHoverComputer.ts
4779 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { asArray } from '../../../../base/common/arrays.js';6import { IMarkdownString, isEmptyMarkdownString } from '../../../../base/common/htmlContent.js';7import { ICodeEditor } from '../../../browser/editorBrowser.js';8import { IHoverComputer } from './hoverOperation.js';9import { GlyphMarginLane } from '../../../common/model.js';1011export type LaneOrLineNumber = GlyphMarginLane | 'lineNo';1213export interface IHoverMessage {14value: IMarkdownString;15}1617export interface GlyphHoverComputerOptions {18lineNumber: number;19laneOrLine: LaneOrLineNumber;20}2122export class GlyphHoverComputer implements IHoverComputer<GlyphHoverComputerOptions, IHoverMessage> {2324constructor(25private readonly _editor: ICodeEditor26) {27}2829public computeSync(opts: GlyphHoverComputerOptions): IHoverMessage[] {3031const toHoverMessage = (contents: IMarkdownString): IHoverMessage => {32return {33value: contents34};35};3637const lineDecorations = this._editor.getLineDecorations(opts.lineNumber);3839const result: IHoverMessage[] = [];40const isLineHover = opts.laneOrLine === 'lineNo';41if (!lineDecorations) {42return result;43}4445for (const d of lineDecorations) {46const lane = d.options.glyphMargin?.position ?? GlyphMarginLane.Center;47if (!isLineHover && lane !== opts.laneOrLine) {48continue;49}5051const hoverMessage = isLineHover ? d.options.lineNumberHoverMessage : d.options.glyphMarginHoverMessage;52if (!hoverMessage || isEmptyMarkdownString(hoverMessage)) {53continue;54}5556result.push(...asArray(hoverMessage).map(toHoverMessage));57}5859return result;60}61}626364