75 lines
3.2 KiB
Plaintext
75 lines
3.2 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = void 0;
|
|
const transformer = require("../transformer");
|
|
const common_1 = require("../utils/common");
|
|
const featureWorkers_1 = require("../utils/featureWorkers");
|
|
const cancellation_1 = require("../utils/cancellation");
|
|
function register(context) {
|
|
return async (uri, range, token = cancellation_1.NoneCancellationToken) => {
|
|
const document = context.getTextDocument(uri);
|
|
if (!document)
|
|
return;
|
|
const offsetRange = {
|
|
start: document.offsetAt(range.start),
|
|
end: document.offsetAt(range.end),
|
|
};
|
|
return (0, featureWorkers_1.languageFeatureWorker)(context, uri, range, (_arg, map, file) => {
|
|
/**
|
|
* copy from ./codeActions.ts
|
|
*/
|
|
if (!file.capabilities.inlayHint)
|
|
return [];
|
|
let minStart;
|
|
let maxEnd;
|
|
for (const mapping of map.map.mappings) {
|
|
const overlapRange = (0, common_1.getOverlapRange)(offsetRange.start, offsetRange.end, mapping.sourceRange[0], mapping.sourceRange[1]);
|
|
if (overlapRange) {
|
|
const start = map.map.toGeneratedOffset(overlapRange.start)?.[0];
|
|
const end = map.map.toGeneratedOffset(overlapRange.end)?.[0];
|
|
if (start !== undefined && end !== undefined) {
|
|
minStart = minStart === undefined ? start : Math.min(start, minStart);
|
|
maxEnd = maxEnd === undefined ? end : Math.max(end, maxEnd);
|
|
}
|
|
}
|
|
}
|
|
if (minStart !== undefined && maxEnd !== undefined) {
|
|
return [{
|
|
start: map.virtualFileDocument.positionAt(minStart),
|
|
end: map.virtualFileDocument.positionAt(maxEnd),
|
|
}];
|
|
}
|
|
return [];
|
|
}, async (service, document, arg) => {
|
|
if (token.isCancellationRequested)
|
|
return;
|
|
const hints = await service.provideInlayHints?.(document, arg, token);
|
|
hints?.forEach(link => {
|
|
link.data = {
|
|
uri,
|
|
original: {
|
|
data: link.data,
|
|
},
|
|
serviceId: Object.keys(context.services).find(key => context.services[key] === service),
|
|
};
|
|
});
|
|
return hints;
|
|
}, (inlayHints, map) => inlayHints.map((_inlayHint) => {
|
|
if (!map)
|
|
return _inlayHint;
|
|
const position = map.toSourcePosition(_inlayHint.position, data => !!data.semanticTokens /* todo */);
|
|
const edits = _inlayHint.textEdits
|
|
?.map(textEdit => transformer.asTextEdit(textEdit, range => map.toSourceRange(range), map.virtualFileDocument))
|
|
.filter(common_1.notEmpty);
|
|
if (position) {
|
|
return {
|
|
..._inlayHint,
|
|
position,
|
|
textEdits: edits,
|
|
};
|
|
}
|
|
}).filter(common_1.notEmpty), arr => arr.flat());
|
|
};
|
|
}
|
|
exports.register = register;
|
|
//# sourceMappingURL=inlayHints.js.map |