astro-ghostcms/.pnpm-store/v3/files/e0/5c81128a0b04b53ee0dd61513f9...

90 lines
3.9 KiB
Plaintext
Raw Permalink Normal View History

2024-02-14 19:45:06 +00:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const featureWorkers_1 = require("../utils/featureWorkers");
const common_1 = require("../utils/common");
const provideDiagnostics_1 = require("./provideDiagnostics");
const cancellation_1 = require("../utils/cancellation");
const transform_1 = require("../utils/transform");
const language_core_1 = require("@volar/language-core");
function register(context) {
return async (uri, position, token = cancellation_1.NoneCancellationToken) => {
let hover = await (0, featureWorkers_1.languageFeatureWorker)(context, uri, () => position, map => map.getGeneratedPositions(position, language_core_1.isHoverEnabled), (service, document, position) => {
if (token.isCancellationRequested) {
return;
}
return service[1].provideHover?.(document, position, token);
}, (item, map) => {
if (!map || !item.range) {
return item;
}
item.range = map.getSourceRange(item.range, language_core_1.isHoverEnabled);
return item;
}, (hovers) => ({
contents: {
kind: 'markdown',
value: hovers.map(getHoverTexts).flat().join('\n\n---\n\n'),
},
range: hovers.find(hover => hover.range && (0, common_1.isInsideRange)(hover.range, { start: position, end: position }))?.range ?? hovers[0].range,
}));
const markups = provideDiagnostics_1.errorMarkups[uri];
if (markups) {
for (const errorAndMarkup of markups) {
if ((0, common_1.isInsideRange)(errorAndMarkup.error.range, { start: position, end: position })) {
hover ??= {
contents: {
kind: 'markdown',
value: '',
},
};
hover.range = errorAndMarkup.error.range;
if (typeof hover.contents !== 'object' || typeof hover.contents !== 'string') {
hover.contents = {
kind: 'markdown',
value: hover.contents,
};
}
if (hover.contents.value) {
hover.contents.value += '\n\n---\n\n';
}
hover.contents.value += errorAndMarkup.markup.value;
}
}
}
return hover;
};
function getHoverTexts(hover) {
if (typeof hover.contents === 'string') {
return [(0, transform_1.transformMarkdown)(hover.contents, context)];
}
if (Array.isArray(hover.contents)) {
return hover.contents.map(content => {
if (typeof content === 'string') {
return (0, transform_1.transformMarkdown)(content, context);
}
if (content.language === 'md') {
return `\`\`\`${content.language}\n${(0, transform_1.transformMarkdown)(content.value, context)}\n\`\`\``;
}
else {
return `\`\`\`${content.language}\n${content.value}\n\`\`\``;
}
});
}
if ('kind' in hover.contents) {
if (hover.contents.kind === 'markdown') {
return [(0, transform_1.transformMarkdown)(hover.contents.value, context)];
}
else {
return [hover.contents.value];
}
}
if (hover.contents.language === 'md') {
return [`\`\`\`${hover.contents.language}\n${(0, transform_1.transformMarkdown)(hover.contents.value, context)}\n\`\`\``];
}
else {
return [`\`\`\`${hover.contents.language}\n${hover.contents.value}\n\`\`\``];
}
}
}
exports.register = register;
//# sourceMappingURL=provideHover.js.map