@marko/language-server 0.12.12 → 0.12.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +192 -46
- package/dist/index.js.map +3 -3
- package/dist/index.mjs +183 -37
- package/dist/index.mjs.map +3 -3
- package/dist/service/marko/document-symbols/extract.d.ts +8 -0
- package/dist/service/marko/document-symbols/index.d.ts +2 -0
- package/dist/service/marko/hover/OpenTagName.d.ts +3 -0
- package/dist/service/marko/hover/index.d.ts +14 -0
- package/dist/service/types.d.ts +2 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -575,7 +575,7 @@ function loadCompilerInfo(dir) {
|
|
|
575
575
|
const rootDir = import_lasso_package_root.default.getRootDir(dir);
|
|
576
576
|
const pkgPath = rootDir && import_resolve_from.default.silent(rootDir, "@marko/compiler/package.json");
|
|
577
577
|
const pkg = pkgPath && require(pkgPath);
|
|
578
|
-
const
|
|
578
|
+
const cache4 = /* @__PURE__ */ new Map();
|
|
579
579
|
let translator = builtinTranslator;
|
|
580
580
|
let compiler = builtinCompiler;
|
|
581
581
|
if (pkg && /^5\./.test(pkg.version)) {
|
|
@@ -592,16 +592,16 @@ function loadCompilerInfo(dir) {
|
|
|
592
592
|
}
|
|
593
593
|
}
|
|
594
594
|
return {
|
|
595
|
-
cache:
|
|
595
|
+
cache: cache4,
|
|
596
596
|
get lookup() {
|
|
597
|
-
let lookup =
|
|
597
|
+
let lookup = cache4.get(lookupKey);
|
|
598
598
|
if (lookup === void 0) {
|
|
599
599
|
try {
|
|
600
600
|
lookup = compiler.taglib.buildLookup(dir, translator);
|
|
601
601
|
} catch {
|
|
602
602
|
lookup = builtinInfo.lookup;
|
|
603
603
|
}
|
|
604
|
-
|
|
604
|
+
cache4.set(lookupKey, lookup);
|
|
605
605
|
}
|
|
606
606
|
return lookup;
|
|
607
607
|
},
|
|
@@ -625,7 +625,7 @@ function display(type, data) {
|
|
|
625
625
|
}
|
|
626
626
|
|
|
627
627
|
// src/service/index.ts
|
|
628
|
-
var
|
|
628
|
+
var import_vscode_languageserver15 = require("vscode-languageserver");
|
|
629
629
|
|
|
630
630
|
// src/service/marko/complete/index.ts
|
|
631
631
|
var import_vscode_languageserver6 = require("vscode-languageserver");
|
|
@@ -687,10 +687,10 @@ function getTagNameCompletion({
|
|
|
687
687
|
const fileURIForTag = import_vscode_uri2.URI.file(fileForTag).toString();
|
|
688
688
|
const nodeModuleMatch = /\/node_modules\/((?:@[^/]+\/)?[^/]+)/.exec(fileForTag);
|
|
689
689
|
const nodeModuleName = nodeModuleMatch && nodeModuleMatch[1];
|
|
690
|
-
const isCoreTag = nodeModuleName === "marko";
|
|
690
|
+
const isCoreTag = /^@?marko[/-]/.test(tag.taglibId) || nodeModuleName === "marko";
|
|
691
691
|
const documentation = {
|
|
692
692
|
kind: import_vscode_languageserver2.MarkupKind.Markdown,
|
|
693
|
-
value: tag.html ? `Built in [
|
|
693
|
+
value: tag.html ? `Built in [<${tag.name}>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${tag.name}) HTML tag.` : isCoreTag ? `Core Marko <${tag.name}> tag.` : nodeModuleName ? `Custom Marko tag discovered from the ["${nodeModuleName}"](${fileURIForTag}) npm package.` : `Custom Marko tag discovered from:
|
|
694
694
|
|
|
695
695
|
[${importer ? import_path2.default.relative(importer, fileForTag) : fileForTag}](${fileURIForTag})`
|
|
696
696
|
};
|
|
@@ -1078,10 +1078,10 @@ var markoErrorRegExp = /^(.+?)(?:\((\d+)(?:\s*,\s*(\d+))?\))?: (.*)$/gm;
|
|
|
1078
1078
|
var doValidate = (doc) => {
|
|
1079
1079
|
const fsPath = getDocFile(doc);
|
|
1080
1080
|
const diagnostics = [];
|
|
1081
|
-
const { compiler, translator, cache:
|
|
1081
|
+
const { compiler, translator, cache: cache4 } = getCompilerInfo(doc);
|
|
1082
1082
|
try {
|
|
1083
1083
|
compiler.compileSync(doc.getText(), fsPath || "untitled.marko", {
|
|
1084
|
-
cache:
|
|
1084
|
+
cache: cache4,
|
|
1085
1085
|
translator,
|
|
1086
1086
|
code: false,
|
|
1087
1087
|
output: "source",
|
|
@@ -1099,6 +1099,62 @@ var doValidate = (doc) => {
|
|
|
1099
1099
|
return diagnostics;
|
|
1100
1100
|
};
|
|
1101
1101
|
|
|
1102
|
+
// src/utils/utils.ts
|
|
1103
|
+
var import_fs = __toESM(require("fs"));
|
|
1104
|
+
var import_vscode_uri3 = require("vscode-uri");
|
|
1105
|
+
var import_vscode_languageserver8 = require("vscode-languageserver");
|
|
1106
|
+
var import_vscode_languageserver_textdocument = require("vscode-languageserver-textdocument");
|
|
1107
|
+
var START_OF_FILE = import_vscode_languageserver8.Range.create(import_vscode_languageserver8.Position.create(0, 0), import_vscode_languageserver8.Position.create(0, 0));
|
|
1108
|
+
function createTextDocument(filename) {
|
|
1109
|
+
const uri = import_vscode_uri3.URI.file(filename).toString();
|
|
1110
|
+
const content = import_fs.default.readFileSync(filename, "utf-8");
|
|
1111
|
+
return import_vscode_languageserver_textdocument.TextDocument.create(uri, "plaintext", 0, content);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
// src/service/marko/hover/OpenTagName.ts
|
|
1115
|
+
function OpenTagName2({
|
|
1116
|
+
document,
|
|
1117
|
+
lookup,
|
|
1118
|
+
parsed,
|
|
1119
|
+
node
|
|
1120
|
+
}) {
|
|
1121
|
+
const importer = getDocFile(document);
|
|
1122
|
+
const tag = node.parent;
|
|
1123
|
+
const range = parsed.locationAt(node);
|
|
1124
|
+
const tagDef = tag.nameText && lookup.getTag(tag.nameText);
|
|
1125
|
+
if (tagDef) {
|
|
1126
|
+
const completion = getTagNameCompletion({
|
|
1127
|
+
tag: tagDef,
|
|
1128
|
+
range: START_OF_FILE,
|
|
1129
|
+
importer
|
|
1130
|
+
});
|
|
1131
|
+
return {
|
|
1132
|
+
range,
|
|
1133
|
+
contents: completion.documentation
|
|
1134
|
+
};
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
// src/service/marko/hover/index.ts
|
|
1139
|
+
var handlers2 = {
|
|
1140
|
+
OpenTagName: OpenTagName2
|
|
1141
|
+
};
|
|
1142
|
+
var doHover = async (doc, params) => {
|
|
1143
|
+
var _a;
|
|
1144
|
+
const parsed = parse2(doc);
|
|
1145
|
+
const offset = doc.offsetAt(params.position);
|
|
1146
|
+
const node = parsed.nodeAt(offset);
|
|
1147
|
+
return await ((_a = handlers2[NodeType[node.type]]) == null ? void 0 : _a.call(handlers2, {
|
|
1148
|
+
document: doc,
|
|
1149
|
+
params,
|
|
1150
|
+
parsed,
|
|
1151
|
+
offset,
|
|
1152
|
+
node,
|
|
1153
|
+
code: doc.getText(),
|
|
1154
|
+
...getCompilerInfo(doc)
|
|
1155
|
+
}));
|
|
1156
|
+
};
|
|
1157
|
+
|
|
1102
1158
|
// src/service/marko/definition/OpenTagName.ts
|
|
1103
1159
|
var import_path4 = __toESM(require("path"));
|
|
1104
1160
|
var import_vscode_uri4 = require("vscode-uri");
|
|
@@ -1128,20 +1184,8 @@ function escape(val) {
|
|
|
1128
1184
|
return String(val).replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
1129
1185
|
}
|
|
1130
1186
|
|
|
1131
|
-
// src/utils/utils.ts
|
|
1132
|
-
var import_fs = __toESM(require("fs"));
|
|
1133
|
-
var import_vscode_uri3 = require("vscode-uri");
|
|
1134
|
-
var import_vscode_languageserver8 = require("vscode-languageserver");
|
|
1135
|
-
var import_vscode_languageserver_textdocument = require("vscode-languageserver-textdocument");
|
|
1136
|
-
var START_OF_FILE = import_vscode_languageserver8.Range.create(import_vscode_languageserver8.Position.create(0, 0), import_vscode_languageserver8.Position.create(0, 0));
|
|
1137
|
-
function createTextDocument(filename) {
|
|
1138
|
-
const uri = import_vscode_uri3.URI.file(filename).toString();
|
|
1139
|
-
const content = import_fs.default.readFileSync(filename, "utf-8");
|
|
1140
|
-
return import_vscode_languageserver_textdocument.TextDocument.create(uri, "plaintext", 0, content);
|
|
1141
|
-
}
|
|
1142
|
-
|
|
1143
1187
|
// src/service/marko/definition/OpenTagName.ts
|
|
1144
|
-
function
|
|
1188
|
+
function OpenTagName3({
|
|
1145
1189
|
lookup,
|
|
1146
1190
|
parsed,
|
|
1147
1191
|
node
|
|
@@ -1211,8 +1255,8 @@ function AttrName2({
|
|
|
1211
1255
|
}
|
|
1212
1256
|
|
|
1213
1257
|
// src/service/marko/definition/index.ts
|
|
1214
|
-
var
|
|
1215
|
-
OpenTagName:
|
|
1258
|
+
var handlers3 = {
|
|
1259
|
+
OpenTagName: OpenTagName3,
|
|
1216
1260
|
AttrName: AttrName2
|
|
1217
1261
|
};
|
|
1218
1262
|
var findDefinition = async (doc, params) => {
|
|
@@ -1220,7 +1264,7 @@ var findDefinition = async (doc, params) => {
|
|
|
1220
1264
|
const parsed = parse2(doc);
|
|
1221
1265
|
const offset = doc.offsetAt(params.position);
|
|
1222
1266
|
const node = parsed.nodeAt(offset);
|
|
1223
|
-
return await ((_a =
|
|
1267
|
+
return await ((_a = handlers3[NodeType[node.type]]) == null ? void 0 : _a.call(handlers3, {
|
|
1224
1268
|
document: doc,
|
|
1225
1269
|
params,
|
|
1226
1270
|
parsed,
|
|
@@ -1245,14 +1289,18 @@ function extractDocumentLinks(doc, parsed, lookup) {
|
|
|
1245
1289
|
const read = (range) => code.slice(range.start, range.end);
|
|
1246
1290
|
const visit = (node) => {
|
|
1247
1291
|
switch (node.type) {
|
|
1292
|
+
case 14 /* AttrTag */:
|
|
1293
|
+
if (node.body) {
|
|
1294
|
+
for (const child of node.body) {
|
|
1295
|
+
visit(child);
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
break;
|
|
1248
1299
|
case 1 /* Tag */:
|
|
1249
1300
|
if (node.attrs && node.nameText) {
|
|
1250
1301
|
for (const attr of node.attrs) {
|
|
1251
1302
|
if (isDocumentLinkAttr(doc, node, attr)) {
|
|
1252
|
-
links.push(import_vscode_languageserver11.DocumentLink.create(
|
|
1253
|
-
start: parsed.positionAt(attr.value.value.start),
|
|
1254
|
-
end: parsed.positionAt(attr.value.value.end)
|
|
1255
|
-
}, resolveUrl(read(attr.value.value).slice(1, -1), doc.uri)));
|
|
1303
|
+
links.push(import_vscode_languageserver11.DocumentLink.create(parsed.locationAt(attr.value.value), resolveUrl(read(attr.value.value).slice(1, -1), doc.uri)));
|
|
1256
1304
|
}
|
|
1257
1305
|
}
|
|
1258
1306
|
}
|
|
@@ -1274,10 +1322,10 @@ function extractDocumentLinks(doc, parsed, lookup) {
|
|
|
1274
1322
|
const tagDef = lookup.getTag(tagName);
|
|
1275
1323
|
const fileForTag = tagDef && (tagDef.template || tagDef.renderer);
|
|
1276
1324
|
if (fileForTag) {
|
|
1277
|
-
links.push(import_vscode_languageserver11.DocumentLink.create({
|
|
1278
|
-
start:
|
|
1279
|
-
end:
|
|
1280
|
-
}, fileForTag));
|
|
1325
|
+
links.push(import_vscode_languageserver11.DocumentLink.create(parsed.locationAt({
|
|
1326
|
+
start: item.start + match.index,
|
|
1327
|
+
end: item.start + match.index + length
|
|
1328
|
+
}), fileForTag));
|
|
1281
1329
|
}
|
|
1282
1330
|
}
|
|
1283
1331
|
}
|
|
@@ -1300,14 +1348,55 @@ var findDocumentLinks = async (doc) => {
|
|
|
1300
1348
|
return result;
|
|
1301
1349
|
};
|
|
1302
1350
|
|
|
1303
|
-
// src/service/marko/
|
|
1304
|
-
var import_vscode_languageserver12 = require("vscode-languageserver");
|
|
1351
|
+
// src/service/marko/document-symbols/extract.ts
|
|
1305
1352
|
var import_vscode_uri7 = require("vscode-uri");
|
|
1353
|
+
var import_vscode_languageserver12 = require("vscode-languageserver");
|
|
1354
|
+
function extractDocumentSymbols(doc, parsed, lookup) {
|
|
1355
|
+
if (import_vscode_uri7.URI.parse(doc.uri).scheme === "untitled") {
|
|
1356
|
+
return [];
|
|
1357
|
+
}
|
|
1358
|
+
const symbols = [];
|
|
1359
|
+
const { program } = parsed;
|
|
1360
|
+
const visit = (node) => {
|
|
1361
|
+
var _a, _b;
|
|
1362
|
+
switch (node.type) {
|
|
1363
|
+
case 1 /* Tag */:
|
|
1364
|
+
case 14 /* AttrTag */:
|
|
1365
|
+
symbols.push(import_vscode_languageserver12.SymbolInformation.create((node.type === 14 /* AttrTag */ ? (_a = node.nameText) == null ? void 0 : _a.slice(node.nameText.indexOf("@")) : node.nameText) || "<${...}>", node.nameText && ((_b = lookup.getTag(node.nameText)) == null ? void 0 : _b.html) && import_vscode_languageserver12.SymbolKind.Property || import_vscode_languageserver12.SymbolKind.Class, parsed.locationAt(node), doc.uri));
|
|
1366
|
+
if (node.body) {
|
|
1367
|
+
for (const child of node.body) {
|
|
1368
|
+
visit(child);
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
break;
|
|
1372
|
+
}
|
|
1373
|
+
};
|
|
1374
|
+
for (const item of program.body) {
|
|
1375
|
+
visit(item);
|
|
1376
|
+
}
|
|
1377
|
+
return symbols;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
// src/service/marko/document-symbols/index.ts
|
|
1381
|
+
var cache2 = /* @__PURE__ */ new WeakMap();
|
|
1382
|
+
var findDocumentSymbols = async (doc) => {
|
|
1383
|
+
const parsed = parse2(doc);
|
|
1384
|
+
let result = cache2.get(parsed);
|
|
1385
|
+
if (!result) {
|
|
1386
|
+
result = extractDocumentSymbols(doc, parsed, getCompilerInfo(doc).lookup);
|
|
1387
|
+
cache2.set(parsed, result);
|
|
1388
|
+
}
|
|
1389
|
+
return result;
|
|
1390
|
+
};
|
|
1391
|
+
|
|
1392
|
+
// src/service/marko/format.ts
|
|
1393
|
+
var import_vscode_languageserver13 = require("vscode-languageserver");
|
|
1394
|
+
var import_vscode_uri8 = require("vscode-uri");
|
|
1306
1395
|
var prettier = __toESM(require("prettier"));
|
|
1307
1396
|
var markoPrettier = __toESM(require("prettier-plugin-marko"));
|
|
1308
1397
|
var format2 = async (doc, params, cancel) => {
|
|
1309
1398
|
try {
|
|
1310
|
-
const { fsPath, scheme } =
|
|
1399
|
+
const { fsPath, scheme } = import_vscode_uri8.URI.parse(doc.uri);
|
|
1311
1400
|
const text = doc.getText();
|
|
1312
1401
|
const options = {
|
|
1313
1402
|
parser: "marko",
|
|
@@ -1322,7 +1411,7 @@ var format2 = async (doc, params, cancel) => {
|
|
|
1322
1411
|
if (cancel.isCancellationRequested)
|
|
1323
1412
|
return;
|
|
1324
1413
|
return [
|
|
1325
|
-
|
|
1414
|
+
import_vscode_languageserver13.TextEdit.replace(import_vscode_languageserver13.Range.create(doc.positionAt(0), doc.positionAt(text.length)), prettier.format(text, options))
|
|
1326
1415
|
];
|
|
1327
1416
|
} catch (e) {
|
|
1328
1417
|
displayError(e);
|
|
@@ -1333,13 +1422,15 @@ var format2 = async (doc, params, cancel) => {
|
|
|
1333
1422
|
var marko_default = {
|
|
1334
1423
|
doComplete,
|
|
1335
1424
|
doValidate,
|
|
1425
|
+
doHover,
|
|
1336
1426
|
findDefinition,
|
|
1337
1427
|
findDocumentLinks,
|
|
1428
|
+
findDocumentSymbols,
|
|
1338
1429
|
format: format2
|
|
1339
1430
|
};
|
|
1340
1431
|
|
|
1341
1432
|
// src/service/stylesheet/index.ts
|
|
1342
|
-
var
|
|
1433
|
+
var import_vscode_languageserver14 = require("vscode-languageserver");
|
|
1343
1434
|
var import_vscode_css_languageservice2 = require("vscode-css-languageservice");
|
|
1344
1435
|
var import_vscode_languageserver_textdocument2 = require("vscode-languageserver-textdocument");
|
|
1345
1436
|
|
|
@@ -1445,6 +1536,13 @@ function extractStyleSheets(code, program, lookup) {
|
|
|
1445
1536
|
const visit = (node) => {
|
|
1446
1537
|
var _a, _b;
|
|
1447
1538
|
switch (node.type) {
|
|
1539
|
+
case 14 /* AttrTag */:
|
|
1540
|
+
if (node.body) {
|
|
1541
|
+
for (const child of node.body) {
|
|
1542
|
+
visit(child);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
break;
|
|
1448
1546
|
case 1 /* Tag */:
|
|
1449
1547
|
if (node.nameText === "style" && node.concise && node.attrs) {
|
|
1450
1548
|
const block = node.attrs.at(-1);
|
|
@@ -1501,7 +1599,7 @@ function extractStyleSheets(code, program, lookup) {
|
|
|
1501
1599
|
}
|
|
1502
1600
|
|
|
1503
1601
|
// src/service/stylesheet/index.ts
|
|
1504
|
-
var
|
|
1602
|
+
var cache3 = /* @__PURE__ */ new WeakMap();
|
|
1505
1603
|
var services = {
|
|
1506
1604
|
css: import_vscode_css_languageservice2.getCSSLanguageService,
|
|
1507
1605
|
less: import_vscode_css_languageservice2.getLESSLanguageService,
|
|
@@ -1543,7 +1641,7 @@ var StyleSheetService = {
|
|
|
1543
1641
|
}
|
|
1544
1642
|
return result;
|
|
1545
1643
|
}
|
|
1546
|
-
return
|
|
1644
|
+
return import_vscode_languageserver14.CompletionList.create([], true);
|
|
1547
1645
|
},
|
|
1548
1646
|
findDefinition(doc, params) {
|
|
1549
1647
|
const infoByExt = getStyleSheetInfo(doc);
|
|
@@ -1589,6 +1687,32 @@ var StyleSheetService = {
|
|
|
1589
1687
|
return result.length ? result : void 0;
|
|
1590
1688
|
}
|
|
1591
1689
|
},
|
|
1690
|
+
findDocumentSymbols(doc) {
|
|
1691
|
+
const infoByExt = getStyleSheetInfo(doc);
|
|
1692
|
+
const result = [];
|
|
1693
|
+
for (const ext in infoByExt) {
|
|
1694
|
+
const info = infoByExt[ext];
|
|
1695
|
+
const { service: service2, virtualDoc } = info;
|
|
1696
|
+
for (const symbol of service2.findDocumentSymbols(virtualDoc, info.parsed)) {
|
|
1697
|
+
if (symbol.location.uri === doc.uri) {
|
|
1698
|
+
const range = getSourceRange(doc, info, symbol.location.range);
|
|
1699
|
+
if (range) {
|
|
1700
|
+
result.push({
|
|
1701
|
+
kind: symbol.kind,
|
|
1702
|
+
name: symbol.name,
|
|
1703
|
+
tags: symbol.tags,
|
|
1704
|
+
deprecated: symbol.deprecated,
|
|
1705
|
+
containerName: symbol.containerName,
|
|
1706
|
+
location: { uri: doc.uri, range }
|
|
1707
|
+
});
|
|
1708
|
+
}
|
|
1709
|
+
} else {
|
|
1710
|
+
result.push(symbol);
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
return result.length ? result : void 0;
|
|
1715
|
+
},
|
|
1592
1716
|
async findDocumentLinks(doc) {
|
|
1593
1717
|
const infoByExt = getStyleSheetInfo(doc);
|
|
1594
1718
|
const result = [];
|
|
@@ -1662,7 +1786,7 @@ var StyleSheetService = {
|
|
|
1662
1786
|
continue;
|
|
1663
1787
|
const { service: service2, virtualDoc } = info;
|
|
1664
1788
|
const result = [];
|
|
1665
|
-
for (const colorPresentation of service2.getColorPresentations(virtualDoc, info.parsed, params.color,
|
|
1789
|
+
for (const colorPresentation of service2.getColorPresentations(virtualDoc, info.parsed, params.color, import_vscode_languageserver14.Range.create(virtualDoc.positionAt(generatedOffsetStart), virtualDoc.positionAt(generatedOffsetEnd)))) {
|
|
1666
1790
|
const textEdit = colorPresentation.textEdit && getSourceEdit(doc, info, colorPresentation.textEdit);
|
|
1667
1791
|
const additionalTextEdits = colorPresentation.additionalTextEdits && getSourceEdits(doc, info, colorPresentation.additionalTextEdits);
|
|
1668
1792
|
if (textEdit || additionalTextEdits) {
|
|
@@ -1720,7 +1844,7 @@ var StyleSheetService = {
|
|
|
1720
1844
|
}
|
|
1721
1845
|
if (result.documentChanges) {
|
|
1722
1846
|
for (const change of result.documentChanges) {
|
|
1723
|
-
if (
|
|
1847
|
+
if (import_vscode_languageserver14.TextDocumentEdit.is(change)) {
|
|
1724
1848
|
if (change.textDocument.uri === doc.uri) {
|
|
1725
1849
|
change.edits = getSourceEdits(doc, info, change.edits) || [];
|
|
1726
1850
|
}
|
|
@@ -1743,7 +1867,7 @@ var StyleSheetService = {
|
|
|
1743
1867
|
if (generatedOffsetEnd === void 0)
|
|
1744
1868
|
continue;
|
|
1745
1869
|
const { service: service2, virtualDoc } = info;
|
|
1746
|
-
const result = service2.doCodeActions(virtualDoc,
|
|
1870
|
+
const result = service2.doCodeActions(virtualDoc, import_vscode_languageserver14.Range.create(virtualDoc.positionAt(generatedOffsetStart), virtualDoc.positionAt(generatedOffsetEnd)), params.context, info.parsed);
|
|
1747
1871
|
for (const command of result) {
|
|
1748
1872
|
const edits = (_a = command.arguments) == null ? void 0 : _a[2];
|
|
1749
1873
|
if (edits && Array.isArray(edits) && isTextEdit(edits[0])) {
|
|
@@ -1828,7 +1952,7 @@ function getSourceRange(doc, info, range) {
|
|
|
1828
1952
|
function getStyleSheetInfo(doc) {
|
|
1829
1953
|
var _a;
|
|
1830
1954
|
const parsed = parse2(doc);
|
|
1831
|
-
let cached =
|
|
1955
|
+
let cached = cache3.get(parsed);
|
|
1832
1956
|
if (!cached) {
|
|
1833
1957
|
const results = extractStyleSheets(doc.getText(), parsed.program, getCompilerInfo(doc).lookup);
|
|
1834
1958
|
cached = {};
|
|
@@ -1849,7 +1973,7 @@ function getStyleSheetInfo(doc) {
|
|
|
1849
1973
|
parsed: service2.parseStylesheet(virtualDoc)
|
|
1850
1974
|
};
|
|
1851
1975
|
}
|
|
1852
|
-
|
|
1976
|
+
cache3.set(parsed, cached);
|
|
1853
1977
|
}
|
|
1854
1978
|
return cached;
|
|
1855
1979
|
}
|
|
@@ -1893,7 +2017,7 @@ var service = {
|
|
|
1893
2017
|
displayError(err);
|
|
1894
2018
|
}
|
|
1895
2019
|
if (items) {
|
|
1896
|
-
return
|
|
2020
|
+
return import_vscode_languageserver15.CompletionList.create(items, isIncomplete);
|
|
1897
2021
|
}
|
|
1898
2022
|
},
|
|
1899
2023
|
async findDefinition(doc, params, cancel) {
|
|
@@ -1932,6 +2056,24 @@ var service = {
|
|
|
1932
2056
|
}
|
|
1933
2057
|
return result;
|
|
1934
2058
|
},
|
|
2059
|
+
async findDocumentSymbols(doc, params, cancel) {
|
|
2060
|
+
let result;
|
|
2061
|
+
try {
|
|
2062
|
+
for (const pending of plugins.map((plugin) => {
|
|
2063
|
+
var _a;
|
|
2064
|
+
return (_a = plugin.findDocumentSymbols) == null ? void 0 : _a.call(plugin, doc, params, cancel);
|
|
2065
|
+
})) {
|
|
2066
|
+
const cur = await pending;
|
|
2067
|
+
if (cancel.isCancellationRequested)
|
|
2068
|
+
return;
|
|
2069
|
+
if (cur)
|
|
2070
|
+
result = result ? result.concat(cur) : cur;
|
|
2071
|
+
}
|
|
2072
|
+
} catch (err) {
|
|
2073
|
+
displayError(err);
|
|
2074
|
+
}
|
|
2075
|
+
return result;
|
|
2076
|
+
},
|
|
1935
2077
|
async findDocumentLinks(doc, params, cancel) {
|
|
1936
2078
|
let result;
|
|
1937
2079
|
try {
|
|
@@ -2132,6 +2274,7 @@ connection2.onInitialize(async (params) => {
|
|
|
2132
2274
|
documentLinkProvider: { resolveProvider: false },
|
|
2133
2275
|
colorProvider: true,
|
|
2134
2276
|
documentHighlightProvider: true,
|
|
2277
|
+
documentSymbolProvider: true,
|
|
2135
2278
|
completionProvider: {
|
|
2136
2279
|
triggerCharacters: [
|
|
2137
2280
|
".",
|
|
@@ -2177,6 +2320,9 @@ connection2.onReferences(async (params, cancel) => {
|
|
|
2177
2320
|
connection2.onDocumentLinks(async (params, cancel) => {
|
|
2178
2321
|
return await service.findDocumentLinks(documents.get(params.textDocument.uri), params, cancel) || null;
|
|
2179
2322
|
});
|
|
2323
|
+
connection2.onDocumentSymbol(async (params, cancel) => {
|
|
2324
|
+
return await service.findDocumentSymbols(documents.get(params.textDocument.uri), params, cancel) || null;
|
|
2325
|
+
});
|
|
2180
2326
|
connection2.onDocumentHighlight(async (params, cancel) => {
|
|
2181
2327
|
return await service.findDocumentHighlights(documents.get(params.textDocument.uri), params, cancel) || null;
|
|
2182
2328
|
});
|