astro-ghostcms/.pnpm-store/v3/files/9a/f1be2afe2900dc7509225df8bd2...

94 lines
3.9 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const PConst = require("../protocol.const");
const modifiers_1 = require("../utils/modifiers");
const shared_1 = require("../shared");
const getSymbolKind = (kind) => {
switch (kind) {
case PConst.Kind.module: return 2;
case PConst.Kind.class: return 5;
case PConst.Kind.enum: return 10;
case PConst.Kind.interface: return 11;
case PConst.Kind.method: return 6;
case PConst.Kind.memberVariable: return 7;
case PConst.Kind.memberGetAccessor: return 7;
case PConst.Kind.memberSetAccessor: return 7;
case PConst.Kind.variable: return 13;
case PConst.Kind.const: return 13;
case PConst.Kind.localVariable: return 13;
case PConst.Kind.function: return 12;
case PConst.Kind.localFunction: return 12;
case PConst.Kind.constructSignature: return 9;
case PConst.Kind.constructorImplementation: return 9;
}
return 13;
};
function register(ctx) {
return (uri) => {
const document = ctx.getTextDocument(uri);
if (!document)
return [];
const fileName = ctx.env.uriToFileName(document.uri);
const barItems = (0, shared_1.safeCall)(() => ctx.typescript.languageService.getNavigationTree(fileName));
if (!barItems)
return [];
// The root represents the file. Ignore this when showing in the UI
const result = barItems.childItems
?.map(function convertNavTree(item) {
if (!shouldIncludeEntry(item)) {
return [];
}
let remain = item.childItems ?? [];
return item.spans.map(span => {
const childItems = [];
remain = remain.filter(child => {
const childStart = child.spans[0].start;
const childEnd = child.spans[child.spans.length - 1].start + child.spans[child.spans.length - 1].length;
if (childStart >= span.start && childEnd <= span.start + span.length) {
childItems.push(child);
return false;
}
return true;
});
const nameSpan = item.spans.length === 1
? (item.nameSpan ?? span)
: span;
const fullRange = {
start: Math.min(span.start, nameSpan.start),
end: Math.max(span.start + span.length, nameSpan.start + nameSpan.length),
};
const symbol = {
name: item.text,
kind: getSymbolKind(item.kind),
range: {
start: document.positionAt(fullRange.start),
end: document.positionAt(fullRange.end),
},
selectionRange: {
start: document.positionAt(nameSpan.start),
end: document.positionAt(nameSpan.start + nameSpan.length),
},
children: childItems.map(convertNavTree).flat(),
};
const kindModifiers = (0, modifiers_1.parseKindModifier)(item.kindModifiers);
if (kindModifiers.has(PConst.KindModifiers.deprecated)) {
symbol.deprecated = true;
symbol.tags ??= [];
symbol.tags.push(1);
}
return symbol;
});
})
.flat();
return result ?? [];
function shouldIncludeEntry(item) {
if (item.kind === PConst.Kind.alias) {
return false;
}
return !!(item.text && item.text !== '<function>' && item.text !== '<class>');
}
};
}
exports.register = register;
//# sourceMappingURL=documentSymbol.js.map