@marko/language-server 1.1.20 → 1.2.1
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 +254 -241
- package/dist/index.js.map +4 -4
- package/dist/index.mjs +246 -233
- package/dist/index.mjs.map +4 -4
- package/dist/service/marko/format.d.ts +8 -0
- package/dist/service/marko/index.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1437,211 +1437,13 @@ var doComplete = async (doc, params) => {
|
|
|
1437
1437
|
};
|
|
1438
1438
|
};
|
|
1439
1439
|
|
|
1440
|
-
// src/service/marko/validate.ts
|
|
1441
|
-
var import_path5 = __toESM(require("path"));
|
|
1442
|
-
var import_language_tools8 = require("@marko/language-tools");
|
|
1443
|
-
var import_vscode_languageserver7 = require("vscode-languageserver");
|
|
1444
|
-
var import_babel_utils = require("@marko/babel-utils");
|
|
1445
|
-
var markoErrorRegExp = /^(.+?)\.marko(?:\((\d+)(?:\s*,\s*(\d+))?\))?: (.*)$/gm;
|
|
1446
|
-
var compilerConfig = {
|
|
1447
|
-
code: false,
|
|
1448
|
-
output: "migrate",
|
|
1449
|
-
sourceMaps: false,
|
|
1450
|
-
errorRecovery: true,
|
|
1451
|
-
babelConfig: {
|
|
1452
|
-
babelrc: false,
|
|
1453
|
-
configFile: false,
|
|
1454
|
-
browserslistConfigFile: false,
|
|
1455
|
-
caller: {
|
|
1456
|
-
name: "@marko/language-server",
|
|
1457
|
-
supportsStaticESM: true,
|
|
1458
|
-
supportsDynamicImport: true,
|
|
1459
|
-
supportsTopLevelAwait: true,
|
|
1460
|
-
supportsExportNamespaceFrom: true
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
};
|
|
1464
|
-
var doValidate = (doc) => {
|
|
1465
|
-
const filename = getFSPath(doc);
|
|
1466
|
-
const diagnostics = [];
|
|
1467
|
-
try {
|
|
1468
|
-
const { meta } = import_language_tools8.Project.getCompiler(
|
|
1469
|
-
filename && import_path5.default.dirname(filename)
|
|
1470
|
-
).compileSync(doc.getText(), filename || "untitled.marko", compilerConfig);
|
|
1471
|
-
if (meta.diagnostics) {
|
|
1472
|
-
for (const diag of meta.diagnostics) {
|
|
1473
|
-
const range = diag.loc ? {
|
|
1474
|
-
start: {
|
|
1475
|
-
line: diag.loc.start.line - 1,
|
|
1476
|
-
character: diag.loc.start.column
|
|
1477
|
-
},
|
|
1478
|
-
end: {
|
|
1479
|
-
line: diag.loc.end.line - 1,
|
|
1480
|
-
character: diag.loc.end.column
|
|
1481
|
-
}
|
|
1482
|
-
} : {
|
|
1483
|
-
start: { line: 0, character: 0 },
|
|
1484
|
-
end: { line: 0, character: 0 }
|
|
1485
|
-
};
|
|
1486
|
-
let severity;
|
|
1487
|
-
switch (diag.type) {
|
|
1488
|
-
case import_babel_utils.DiagnosticType.Warning:
|
|
1489
|
-
case import_babel_utils.DiagnosticType.Deprecation:
|
|
1490
|
-
severity = import_vscode_languageserver7.DiagnosticSeverity.Warning;
|
|
1491
|
-
break;
|
|
1492
|
-
case import_babel_utils.DiagnosticType.Suggestion:
|
|
1493
|
-
severity = import_vscode_languageserver7.DiagnosticSeverity.Hint;
|
|
1494
|
-
break;
|
|
1495
|
-
default:
|
|
1496
|
-
severity = import_vscode_languageserver7.DiagnosticSeverity.Error;
|
|
1497
|
-
break;
|
|
1498
|
-
}
|
|
1499
|
-
diagnostics.push({
|
|
1500
|
-
range,
|
|
1501
|
-
source: "marko",
|
|
1502
|
-
code: void 0,
|
|
1503
|
-
tags: void 0,
|
|
1504
|
-
severity,
|
|
1505
|
-
message: diag.label
|
|
1506
|
-
});
|
|
1507
|
-
}
|
|
1508
|
-
}
|
|
1509
|
-
} catch (err) {
|
|
1510
|
-
addDiagnosticsForError(err, diagnostics);
|
|
1511
|
-
}
|
|
1512
|
-
return diagnostics;
|
|
1513
|
-
};
|
|
1514
|
-
function addDiagnosticsForError(err, diagnostics) {
|
|
1515
|
-
if (!isError(err)) {
|
|
1516
|
-
diagnostics.push({
|
|
1517
|
-
range: {
|
|
1518
|
-
start: { line: 0, character: 0 },
|
|
1519
|
-
end: { line: 0, character: 0 }
|
|
1520
|
-
},
|
|
1521
|
-
source: "marko",
|
|
1522
|
-
code: void 0,
|
|
1523
|
-
tags: void 0,
|
|
1524
|
-
severity: import_vscode_languageserver7.DiagnosticSeverity.Error,
|
|
1525
|
-
message: String(err)
|
|
1526
|
-
});
|
|
1527
|
-
} else if (isAggregateError(err)) {
|
|
1528
|
-
for (const nestedError of err.errors) {
|
|
1529
|
-
addDiagnosticsForError(nestedError, diagnostics);
|
|
1530
|
-
}
|
|
1531
|
-
} else if (isErrorWithLoc(err)) {
|
|
1532
|
-
const message = err.label || err.message || err.stack;
|
|
1533
|
-
if (!message)
|
|
1534
|
-
return;
|
|
1535
|
-
const { loc } = err;
|
|
1536
|
-
diagnostics.push({
|
|
1537
|
-
range: {
|
|
1538
|
-
start: {
|
|
1539
|
-
line: loc.start.line - 1,
|
|
1540
|
-
character: loc.start.column
|
|
1541
|
-
},
|
|
1542
|
-
end: {
|
|
1543
|
-
line: loc.end.line - 1,
|
|
1544
|
-
character: loc.end.column
|
|
1545
|
-
}
|
|
1546
|
-
},
|
|
1547
|
-
source: "marko",
|
|
1548
|
-
code: void 0,
|
|
1549
|
-
tags: void 0,
|
|
1550
|
-
severity: import_vscode_languageserver7.DiagnosticSeverity.Error,
|
|
1551
|
-
message
|
|
1552
|
-
});
|
|
1553
|
-
} else {
|
|
1554
|
-
let match;
|
|
1555
|
-
while (match = markoErrorRegExp.exec(err.message)) {
|
|
1556
|
-
const [, , rawLine, rawCol, message] = match;
|
|
1557
|
-
const pos = {
|
|
1558
|
-
line: (parseInt(rawLine, 10) || 1) - 1,
|
|
1559
|
-
character: (parseInt(rawCol, 10) || 1) - 1
|
|
1560
|
-
};
|
|
1561
|
-
diagnostics.push({
|
|
1562
|
-
range: { start: pos, end: pos },
|
|
1563
|
-
source: "marko",
|
|
1564
|
-
code: void 0,
|
|
1565
|
-
tags: void 0,
|
|
1566
|
-
severity: import_vscode_languageserver7.DiagnosticSeverity.Error,
|
|
1567
|
-
message
|
|
1568
|
-
});
|
|
1569
|
-
}
|
|
1570
|
-
}
|
|
1571
|
-
}
|
|
1572
|
-
function isError(err) {
|
|
1573
|
-
return err != null && typeof err === "object" && typeof err.message === "string";
|
|
1574
|
-
}
|
|
1575
|
-
function isAggregateError(err) {
|
|
1576
|
-
return Array.isArray(err == null ? void 0 : err.errors);
|
|
1577
|
-
}
|
|
1578
|
-
function isErrorWithLoc(err) {
|
|
1579
|
-
const loc = err == null ? void 0 : err.loc;
|
|
1580
|
-
if (typeof loc !== "object")
|
|
1581
|
-
return false;
|
|
1582
|
-
return loc !== null && typeof loc === "object" && typeof loc.start === "object" && typeof loc.end === "object" && typeof loc.start.line === "number" && typeof loc.start.column === "number" && typeof loc.end.line === "number" && typeof loc.end.column === "number";
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1585
|
-
// src/service/marko/hover/index.ts
|
|
1586
|
-
var import_language_tools9 = require("@marko/language-tools");
|
|
1587
|
-
|
|
1588
|
-
// src/utils/constants.ts
|
|
1589
|
-
var START_POSITION = {
|
|
1590
|
-
line: 0,
|
|
1591
|
-
character: 0
|
|
1592
|
-
};
|
|
1593
|
-
var START_LOCATION = {
|
|
1594
|
-
start: START_POSITION,
|
|
1595
|
-
end: START_POSITION
|
|
1596
|
-
};
|
|
1597
|
-
|
|
1598
|
-
// src/service/marko/hover/OpenTagName.ts
|
|
1599
|
-
function OpenTagName2({
|
|
1600
|
-
node,
|
|
1601
|
-
file: { parsed, filename, lookup }
|
|
1602
|
-
}) {
|
|
1603
|
-
const tag = node.parent;
|
|
1604
|
-
const range = parsed.locationAt(node);
|
|
1605
|
-
const tagDef = tag.nameText && lookup.getTag(tag.nameText);
|
|
1606
|
-
if (tagDef) {
|
|
1607
|
-
const completion = getTagNameCompletion({
|
|
1608
|
-
tag: tagDef,
|
|
1609
|
-
range: START_LOCATION,
|
|
1610
|
-
importer: filename
|
|
1611
|
-
});
|
|
1612
|
-
if (completion.documentation) {
|
|
1613
|
-
return {
|
|
1614
|
-
range,
|
|
1615
|
-
contents: completion.documentation
|
|
1616
|
-
};
|
|
1617
|
-
}
|
|
1618
|
-
}
|
|
1619
|
-
}
|
|
1620
|
-
|
|
1621
|
-
// src/service/marko/hover/index.ts
|
|
1622
|
-
var handlers2 = {
|
|
1623
|
-
OpenTagName: OpenTagName2
|
|
1624
|
-
};
|
|
1625
|
-
var doHover = async (doc, params) => {
|
|
1626
|
-
var _a;
|
|
1627
|
-
const file = getMarkoFile(doc);
|
|
1628
|
-
const offset = doc.offsetAt(params.position);
|
|
1629
|
-
const node = file.parsed.nodeAt(offset);
|
|
1630
|
-
return await ((_a = handlers2[import_language_tools9.NodeType[node.type]]) == null ? void 0 : _a.call(handlers2, {
|
|
1631
|
-
file,
|
|
1632
|
-
params,
|
|
1633
|
-
offset,
|
|
1634
|
-
node
|
|
1635
|
-
}));
|
|
1636
|
-
};
|
|
1637
|
-
|
|
1638
1440
|
// src/service/marko/definition/index.ts
|
|
1639
|
-
var
|
|
1441
|
+
var import_language_tools10 = require("@marko/language-tools");
|
|
1640
1442
|
|
|
1641
1443
|
// src/service/marko/definition/AttrName.ts
|
|
1642
1444
|
var import_fs2 = __toESM(require("fs"));
|
|
1643
1445
|
var import_vscode_uri4 = require("vscode-uri");
|
|
1644
|
-
var
|
|
1446
|
+
var import_language_tools8 = require("@marko/language-tools");
|
|
1645
1447
|
|
|
1646
1448
|
// src/utils/regexp-builder.ts
|
|
1647
1449
|
function RegExpBuilder(strings, ...expressions) {
|
|
@@ -1667,6 +1469,16 @@ function escape(val) {
|
|
|
1667
1469
|
return String(val).replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
1668
1470
|
}
|
|
1669
1471
|
|
|
1472
|
+
// src/utils/constants.ts
|
|
1473
|
+
var START_POSITION = {
|
|
1474
|
+
line: 0,
|
|
1475
|
+
character: 0
|
|
1476
|
+
};
|
|
1477
|
+
var START_LOCATION = {
|
|
1478
|
+
start: START_POSITION,
|
|
1479
|
+
end: START_POSITION
|
|
1480
|
+
};
|
|
1481
|
+
|
|
1670
1482
|
// src/service/marko/definition/AttrName.ts
|
|
1671
1483
|
function AttrName2({
|
|
1672
1484
|
node,
|
|
@@ -1690,8 +1502,8 @@ function AttrName2({
|
|
|
1690
1502
|
tagDefSource
|
|
1691
1503
|
);
|
|
1692
1504
|
if (match && match.index) {
|
|
1693
|
-
range = (0,
|
|
1694
|
-
(0,
|
|
1505
|
+
range = (0, import_language_tools8.getLocation)(
|
|
1506
|
+
(0, import_language_tools8.getLines)(tagDefSource),
|
|
1695
1507
|
match.index,
|
|
1696
1508
|
match.index + match[0].length
|
|
1697
1509
|
);
|
|
@@ -1709,19 +1521,19 @@ function AttrName2({
|
|
|
1709
1521
|
|
|
1710
1522
|
// src/service/marko/definition/OpenTagName.ts
|
|
1711
1523
|
var import_fs3 = __toESM(require("fs"));
|
|
1712
|
-
var
|
|
1524
|
+
var import_path5 = __toESM(require("path"));
|
|
1713
1525
|
var import_vscode_uri5 = require("vscode-uri");
|
|
1714
|
-
var
|
|
1715
|
-
function
|
|
1526
|
+
var import_language_tools9 = require("@marko/language-tools");
|
|
1527
|
+
function OpenTagName2({
|
|
1716
1528
|
node,
|
|
1717
1529
|
file: { parsed, lookup }
|
|
1718
1530
|
}) {
|
|
1719
1531
|
const tag = node.parent;
|
|
1720
1532
|
let tagDef;
|
|
1721
1533
|
let range = START_LOCATION;
|
|
1722
|
-
if (tag.type ===
|
|
1534
|
+
if (tag.type === import_language_tools9.NodeType.AttrTag) {
|
|
1723
1535
|
let parentTag = tag.owner;
|
|
1724
|
-
while ((parentTag == null ? void 0 : parentTag.type) ===
|
|
1536
|
+
while ((parentTag == null ? void 0 : parentTag.type) === import_language_tools9.NodeType.AttrTag)
|
|
1725
1537
|
parentTag = parentTag.owner;
|
|
1726
1538
|
tagDef = parentTag && parentTag.nameText ? lookup.getTag(parentTag.nameText) : void 0;
|
|
1727
1539
|
} else {
|
|
@@ -1731,7 +1543,7 @@ function OpenTagName3({
|
|
|
1731
1543
|
return;
|
|
1732
1544
|
}
|
|
1733
1545
|
const tagEntryFile = tagDef.template || tagDef.renderer || tagDef.filePath;
|
|
1734
|
-
if (!
|
|
1546
|
+
if (!import_path5.default.isAbsolute(tagEntryFile)) {
|
|
1735
1547
|
return;
|
|
1736
1548
|
}
|
|
1737
1549
|
if (/\/marko(?:-tag)?\.json$/.test(tagEntryFile)) {
|
|
@@ -1740,8 +1552,8 @@ function OpenTagName3({
|
|
|
1740
1552
|
tagDefSource
|
|
1741
1553
|
);
|
|
1742
1554
|
if (match && match.index) {
|
|
1743
|
-
range = (0,
|
|
1744
|
-
(0,
|
|
1555
|
+
range = (0, import_language_tools9.getLocation)(
|
|
1556
|
+
(0, import_language_tools9.getLines)(tagDefSource),
|
|
1745
1557
|
match.index,
|
|
1746
1558
|
match.index + match[0].length
|
|
1747
1559
|
);
|
|
@@ -1758,8 +1570,8 @@ function OpenTagName3({
|
|
|
1758
1570
|
}
|
|
1759
1571
|
|
|
1760
1572
|
// src/service/marko/definition/index.ts
|
|
1761
|
-
var
|
|
1762
|
-
OpenTagName:
|
|
1573
|
+
var handlers2 = {
|
|
1574
|
+
OpenTagName: OpenTagName2,
|
|
1763
1575
|
AttrName: AttrName2
|
|
1764
1576
|
};
|
|
1765
1577
|
var findDefinition = async (doc, params) => {
|
|
@@ -1767,7 +1579,7 @@ var findDefinition = async (doc, params) => {
|
|
|
1767
1579
|
const file = getMarkoFile(doc);
|
|
1768
1580
|
const offset = doc.offsetAt(params.position);
|
|
1769
1581
|
const node = file.parsed.nodeAt(offset);
|
|
1770
|
-
return await ((_a =
|
|
1582
|
+
return await ((_a = handlers2[import_language_tools10.NodeType[node.type]]) == null ? void 0 : _a.call(handlers2, {
|
|
1771
1583
|
file,
|
|
1772
1584
|
params,
|
|
1773
1585
|
offset,
|
|
@@ -1776,7 +1588,7 @@ var findDefinition = async (doc, params) => {
|
|
|
1776
1588
|
};
|
|
1777
1589
|
|
|
1778
1590
|
// src/service/marko/document-links.ts
|
|
1779
|
-
var
|
|
1591
|
+
var import_language_tools11 = require("@marko/language-tools");
|
|
1780
1592
|
var importTagReg2 = /(['"])<((?:[^\1\\>]+|\\.)*)>?\1/g;
|
|
1781
1593
|
var findDocumentLinks = async (doc) => {
|
|
1782
1594
|
return processDoc(doc, extractDocumentLinks);
|
|
@@ -1795,14 +1607,14 @@ function extractDocumentLinks({
|
|
|
1795
1607
|
const { program, read } = parsed;
|
|
1796
1608
|
const visit = (node) => {
|
|
1797
1609
|
switch (node.type) {
|
|
1798
|
-
case
|
|
1610
|
+
case import_language_tools11.NodeType.AttrTag:
|
|
1799
1611
|
if (node.body) {
|
|
1800
1612
|
for (const child of node.body) {
|
|
1801
1613
|
visit(child);
|
|
1802
1614
|
}
|
|
1803
1615
|
}
|
|
1804
1616
|
break;
|
|
1805
|
-
case
|
|
1617
|
+
case import_language_tools11.NodeType.Tag:
|
|
1806
1618
|
if (node.attrs && node.nameText) {
|
|
1807
1619
|
for (const attr of node.attrs) {
|
|
1808
1620
|
if (isDocumentLinkAttr(code, node, attr)) {
|
|
@@ -1828,7 +1640,7 @@ function extractDocumentLinks({
|
|
|
1828
1640
|
}
|
|
1829
1641
|
};
|
|
1830
1642
|
for (const node of program.static) {
|
|
1831
|
-
if (node.type ===
|
|
1643
|
+
if (node.type === import_language_tools11.NodeType.Import) {
|
|
1832
1644
|
importTagReg2.lastIndex = 0;
|
|
1833
1645
|
const value = parsed.read(node);
|
|
1834
1646
|
const match = importTagReg2.exec(value);
|
|
@@ -1855,8 +1667,8 @@ function extractDocumentLinks({
|
|
|
1855
1667
|
}
|
|
1856
1668
|
|
|
1857
1669
|
// src/service/marko/document-symbols.ts
|
|
1858
|
-
var
|
|
1859
|
-
var
|
|
1670
|
+
var import_vscode_languageserver7 = require("vscode-languageserver");
|
|
1671
|
+
var import_language_tools12 = require("@marko/language-tools");
|
|
1860
1672
|
var findDocumentSymbols = async (doc) => processDoc(doc, extractDocumentSymbols);
|
|
1861
1673
|
function extractDocumentSymbols({
|
|
1862
1674
|
uri,
|
|
@@ -1872,11 +1684,11 @@ function extractDocumentSymbols({
|
|
|
1872
1684
|
const visit = (node) => {
|
|
1873
1685
|
var _a, _b;
|
|
1874
1686
|
switch (node.type) {
|
|
1875
|
-
case
|
|
1876
|
-
case
|
|
1687
|
+
case import_language_tools12.NodeType.Tag:
|
|
1688
|
+
case import_language_tools12.NodeType.AttrTag:
|
|
1877
1689
|
symbols.push({
|
|
1878
|
-
name: (node.type ===
|
|
1879
|
-
kind: node.nameText && ((_b = lookup.getTag(node.nameText)) == null ? void 0 : _b.html) &&
|
|
1690
|
+
name: (node.type === import_language_tools12.NodeType.AttrTag ? (_a = node.nameText) == null ? void 0 : _a.slice(node.nameText.indexOf("@")) : node.nameText) || "<${...}>",
|
|
1691
|
+
kind: node.nameText && ((_b = lookup.getTag(node.nameText)) == null ? void 0 : _b.html) && import_vscode_languageserver7.SymbolKind.Property || import_vscode_languageserver7.SymbolKind.Class,
|
|
1880
1692
|
location: {
|
|
1881
1693
|
uri,
|
|
1882
1694
|
range: parsed.locationAt(node)
|
|
@@ -1897,11 +1709,11 @@ function extractDocumentSymbols({
|
|
|
1897
1709
|
}
|
|
1898
1710
|
|
|
1899
1711
|
// src/service/marko/format.ts
|
|
1900
|
-
var
|
|
1712
|
+
var import_language_tools13 = require("@marko/language-tools");
|
|
1901
1713
|
var prettier = __toESM(require("prettier"));
|
|
1902
1714
|
var markoPrettier = __toESM(require("prettier-plugin-marko"));
|
|
1903
|
-
var
|
|
1904
|
-
|
|
1715
|
+
var import_vscode_languageserver8 = require("vscode-languageserver");
|
|
1716
|
+
async function formatDocument(doc, formatOptions, cancel) {
|
|
1905
1717
|
try {
|
|
1906
1718
|
const dir = getFSDir(doc);
|
|
1907
1719
|
const filepath = getFSPath(doc);
|
|
@@ -1910,17 +1722,18 @@ var format2 = async (doc, params, cancel) => {
|
|
|
1910
1722
|
parser: "marko",
|
|
1911
1723
|
filepath,
|
|
1912
1724
|
plugins: [markoPrettier],
|
|
1913
|
-
tabWidth:
|
|
1914
|
-
useTabs:
|
|
1725
|
+
tabWidth: formatOptions.tabSize,
|
|
1726
|
+
useTabs: formatOptions.insertSpaces === false,
|
|
1727
|
+
markoSyntax: formatOptions.mode ?? "auto",
|
|
1915
1728
|
...filepath ? await prettier.resolveConfig(filepath, {
|
|
1916
1729
|
editorconfig: true
|
|
1917
1730
|
}).catch(() => null) : null
|
|
1918
1731
|
};
|
|
1919
|
-
|
|
1732
|
+
markoPrettier.setCompiler(import_language_tools13.Project.getCompiler(dir), import_language_tools13.Project.getConfig(dir));
|
|
1733
|
+
if (cancel == null ? void 0 : cancel.isCancellationRequested)
|
|
1920
1734
|
return;
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
import_vscode_languageserver9.TextEdit.replace(
|
|
1735
|
+
return [
|
|
1736
|
+
import_vscode_languageserver8.TextEdit.replace(
|
|
1924
1737
|
{
|
|
1925
1738
|
start: START_POSITION,
|
|
1926
1739
|
end: doc.positionAt(text.length)
|
|
@@ -1928,12 +1741,202 @@ var format2 = async (doc, params, cancel) => {
|
|
|
1928
1741
|
await prettier.format(text, options)
|
|
1929
1742
|
)
|
|
1930
1743
|
];
|
|
1931
|
-
return ret;
|
|
1932
1744
|
} catch (e) {
|
|
1933
1745
|
displayError(e);
|
|
1934
1746
|
}
|
|
1747
|
+
}
|
|
1748
|
+
var format2 = async (doc, params, cancel) => {
|
|
1749
|
+
return formatDocument(doc, params.options, cancel);
|
|
1750
|
+
};
|
|
1751
|
+
|
|
1752
|
+
// src/service/marko/hover/index.ts
|
|
1753
|
+
var import_language_tools14 = require("@marko/language-tools");
|
|
1754
|
+
|
|
1755
|
+
// src/service/marko/hover/OpenTagName.ts
|
|
1756
|
+
function OpenTagName3({
|
|
1757
|
+
node,
|
|
1758
|
+
file: { parsed, filename, lookup }
|
|
1759
|
+
}) {
|
|
1760
|
+
const tag = node.parent;
|
|
1761
|
+
const range = parsed.locationAt(node);
|
|
1762
|
+
const tagDef = tag.nameText && lookup.getTag(tag.nameText);
|
|
1763
|
+
if (tagDef) {
|
|
1764
|
+
const completion = getTagNameCompletion({
|
|
1765
|
+
tag: tagDef,
|
|
1766
|
+
range: START_LOCATION,
|
|
1767
|
+
importer: filename
|
|
1768
|
+
});
|
|
1769
|
+
if (completion.documentation) {
|
|
1770
|
+
return {
|
|
1771
|
+
range,
|
|
1772
|
+
contents: completion.documentation
|
|
1773
|
+
};
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
// src/service/marko/hover/index.ts
|
|
1779
|
+
var handlers3 = {
|
|
1780
|
+
OpenTagName: OpenTagName3
|
|
1781
|
+
};
|
|
1782
|
+
var doHover = async (doc, params) => {
|
|
1783
|
+
var _a;
|
|
1784
|
+
const file = getMarkoFile(doc);
|
|
1785
|
+
const offset = doc.offsetAt(params.position);
|
|
1786
|
+
const node = file.parsed.nodeAt(offset);
|
|
1787
|
+
return await ((_a = handlers3[import_language_tools14.NodeType[node.type]]) == null ? void 0 : _a.call(handlers3, {
|
|
1788
|
+
file,
|
|
1789
|
+
params,
|
|
1790
|
+
offset,
|
|
1791
|
+
node
|
|
1792
|
+
}));
|
|
1935
1793
|
};
|
|
1936
1794
|
|
|
1795
|
+
// src/service/marko/validate.ts
|
|
1796
|
+
var import_path6 = __toESM(require("path"));
|
|
1797
|
+
var import_language_tools15 = require("@marko/language-tools");
|
|
1798
|
+
var import_vscode_languageserver9 = require("vscode-languageserver");
|
|
1799
|
+
var import_babel_utils = require("@marko/babel-utils");
|
|
1800
|
+
var markoErrorRegExp = /^(.+?)\.marko(?:\((\d+)(?:\s*,\s*(\d+))?\))?: (.*)$/gm;
|
|
1801
|
+
var compilerConfig = {
|
|
1802
|
+
code: false,
|
|
1803
|
+
output: "migrate",
|
|
1804
|
+
sourceMaps: false,
|
|
1805
|
+
errorRecovery: true,
|
|
1806
|
+
babelConfig: {
|
|
1807
|
+
babelrc: false,
|
|
1808
|
+
configFile: false,
|
|
1809
|
+
browserslistConfigFile: false,
|
|
1810
|
+
caller: {
|
|
1811
|
+
name: "@marko/language-server",
|
|
1812
|
+
supportsStaticESM: true,
|
|
1813
|
+
supportsDynamicImport: true,
|
|
1814
|
+
supportsTopLevelAwait: true,
|
|
1815
|
+
supportsExportNamespaceFrom: true
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
};
|
|
1819
|
+
var doValidate = (doc) => {
|
|
1820
|
+
const filename = getFSPath(doc);
|
|
1821
|
+
const diagnostics = [];
|
|
1822
|
+
try {
|
|
1823
|
+
const { meta } = import_language_tools15.Project.getCompiler(
|
|
1824
|
+
filename && import_path6.default.dirname(filename)
|
|
1825
|
+
).compileSync(doc.getText(), filename || "untitled.marko", compilerConfig);
|
|
1826
|
+
if (meta.diagnostics) {
|
|
1827
|
+
for (const diag of meta.diagnostics) {
|
|
1828
|
+
const range = diag.loc ? {
|
|
1829
|
+
start: {
|
|
1830
|
+
line: diag.loc.start.line - 1,
|
|
1831
|
+
character: diag.loc.start.column
|
|
1832
|
+
},
|
|
1833
|
+
end: {
|
|
1834
|
+
line: diag.loc.end.line - 1,
|
|
1835
|
+
character: diag.loc.end.column
|
|
1836
|
+
}
|
|
1837
|
+
} : {
|
|
1838
|
+
start: { line: 0, character: 0 },
|
|
1839
|
+
end: { line: 0, character: 0 }
|
|
1840
|
+
};
|
|
1841
|
+
let severity;
|
|
1842
|
+
switch (diag.type) {
|
|
1843
|
+
case import_babel_utils.DiagnosticType.Warning:
|
|
1844
|
+
case import_babel_utils.DiagnosticType.Deprecation:
|
|
1845
|
+
severity = import_vscode_languageserver9.DiagnosticSeverity.Warning;
|
|
1846
|
+
break;
|
|
1847
|
+
case import_babel_utils.DiagnosticType.Suggestion:
|
|
1848
|
+
severity = import_vscode_languageserver9.DiagnosticSeverity.Hint;
|
|
1849
|
+
break;
|
|
1850
|
+
default:
|
|
1851
|
+
severity = import_vscode_languageserver9.DiagnosticSeverity.Error;
|
|
1852
|
+
break;
|
|
1853
|
+
}
|
|
1854
|
+
diagnostics.push({
|
|
1855
|
+
range,
|
|
1856
|
+
source: "marko",
|
|
1857
|
+
code: void 0,
|
|
1858
|
+
tags: void 0,
|
|
1859
|
+
severity,
|
|
1860
|
+
message: diag.label
|
|
1861
|
+
});
|
|
1862
|
+
}
|
|
1863
|
+
}
|
|
1864
|
+
} catch (err) {
|
|
1865
|
+
addDiagnosticsForError(err, diagnostics);
|
|
1866
|
+
}
|
|
1867
|
+
return diagnostics;
|
|
1868
|
+
};
|
|
1869
|
+
function addDiagnosticsForError(err, diagnostics) {
|
|
1870
|
+
if (!isError(err)) {
|
|
1871
|
+
diagnostics.push({
|
|
1872
|
+
range: {
|
|
1873
|
+
start: { line: 0, character: 0 },
|
|
1874
|
+
end: { line: 0, character: 0 }
|
|
1875
|
+
},
|
|
1876
|
+
source: "marko",
|
|
1877
|
+
code: void 0,
|
|
1878
|
+
tags: void 0,
|
|
1879
|
+
severity: import_vscode_languageserver9.DiagnosticSeverity.Error,
|
|
1880
|
+
message: String(err)
|
|
1881
|
+
});
|
|
1882
|
+
} else if (isAggregateError(err)) {
|
|
1883
|
+
for (const nestedError of err.errors) {
|
|
1884
|
+
addDiagnosticsForError(nestedError, diagnostics);
|
|
1885
|
+
}
|
|
1886
|
+
} else if (isErrorWithLoc(err)) {
|
|
1887
|
+
const message = err.label || err.message || err.stack;
|
|
1888
|
+
if (!message)
|
|
1889
|
+
return;
|
|
1890
|
+
const { loc } = err;
|
|
1891
|
+
diagnostics.push({
|
|
1892
|
+
range: {
|
|
1893
|
+
start: {
|
|
1894
|
+
line: loc.start.line - 1,
|
|
1895
|
+
character: loc.start.column
|
|
1896
|
+
},
|
|
1897
|
+
end: {
|
|
1898
|
+
line: loc.end.line - 1,
|
|
1899
|
+
character: loc.end.column
|
|
1900
|
+
}
|
|
1901
|
+
},
|
|
1902
|
+
source: "marko",
|
|
1903
|
+
code: void 0,
|
|
1904
|
+
tags: void 0,
|
|
1905
|
+
severity: import_vscode_languageserver9.DiagnosticSeverity.Error,
|
|
1906
|
+
message
|
|
1907
|
+
});
|
|
1908
|
+
} else {
|
|
1909
|
+
let match;
|
|
1910
|
+
while (match = markoErrorRegExp.exec(err.message)) {
|
|
1911
|
+
const [, , rawLine, rawCol, message] = match;
|
|
1912
|
+
const pos = {
|
|
1913
|
+
line: (parseInt(rawLine, 10) || 1) - 1,
|
|
1914
|
+
character: (parseInt(rawCol, 10) || 1) - 1
|
|
1915
|
+
};
|
|
1916
|
+
diagnostics.push({
|
|
1917
|
+
range: { start: pos, end: pos },
|
|
1918
|
+
source: "marko",
|
|
1919
|
+
code: void 0,
|
|
1920
|
+
tags: void 0,
|
|
1921
|
+
severity: import_vscode_languageserver9.DiagnosticSeverity.Error,
|
|
1922
|
+
message
|
|
1923
|
+
});
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
}
|
|
1927
|
+
function isError(err) {
|
|
1928
|
+
return err != null && typeof err === "object" && typeof err.message === "string";
|
|
1929
|
+
}
|
|
1930
|
+
function isAggregateError(err) {
|
|
1931
|
+
return Array.isArray(err == null ? void 0 : err.errors);
|
|
1932
|
+
}
|
|
1933
|
+
function isErrorWithLoc(err) {
|
|
1934
|
+
const loc = err == null ? void 0 : err.loc;
|
|
1935
|
+
if (typeof loc !== "object")
|
|
1936
|
+
return false;
|
|
1937
|
+
return loc !== null && typeof loc === "object" && typeof loc.start === "object" && typeof loc.end === "object" && typeof loc.start.line === "number" && typeof loc.start.column === "number" && typeof loc.end.line === "number" && typeof loc.end.column === "number";
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1937
1940
|
// src/service/marko/index.ts
|
|
1938
1941
|
var marko_default = {
|
|
1939
1942
|
doComplete,
|
|
@@ -1942,7 +1945,17 @@ var marko_default = {
|
|
|
1942
1945
|
findDefinition,
|
|
1943
1946
|
findDocumentLinks,
|
|
1944
1947
|
findDocumentSymbols,
|
|
1945
|
-
format: format2
|
|
1948
|
+
format: format2,
|
|
1949
|
+
commands: {
|
|
1950
|
+
"$/formatWithMode": async ({
|
|
1951
|
+
doc: docURI,
|
|
1952
|
+
options
|
|
1953
|
+
}) => {
|
|
1954
|
+
const doc = get(docURI);
|
|
1955
|
+
const formatted = await formatDocument(doc, options);
|
|
1956
|
+
return formatted;
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1946
1959
|
};
|
|
1947
1960
|
|
|
1948
1961
|
// src/service/script/index.ts
|
|
@@ -2791,12 +2804,12 @@ function getTSProject(docFsPath) {
|
|
|
2791
2804
|
markoScriptLang = import_language_tools17.ScriptLang.ts;
|
|
2792
2805
|
}
|
|
2793
2806
|
}
|
|
2794
|
-
const
|
|
2795
|
-
const cache = import_language_tools17.Project.getCache(configFile &&
|
|
2807
|
+
const basePath = configFile && import_path8.default.dirname(configFile) || process.cwd();
|
|
2808
|
+
const cache = import_language_tools17.Project.getCache(configFile && basePath);
|
|
2796
2809
|
let projectCache = cache.get(getTSProject);
|
|
2797
2810
|
let cached;
|
|
2798
2811
|
if (projectCache) {
|
|
2799
|
-
cached = projectCache.get(
|
|
2812
|
+
cached = projectCache.get(basePath);
|
|
2800
2813
|
if (cached)
|
|
2801
2814
|
return cached;
|
|
2802
2815
|
} else {
|
|
@@ -2806,13 +2819,13 @@ function getTSProject(docFsPath) {
|
|
|
2806
2819
|
const { fileNames, options, projectReferences } = import_tsserverlibrary.default.parseJsonConfigFileContent(
|
|
2807
2820
|
configFile && import_tsserverlibrary.default.readConfigFile(configFile, import_tsserverlibrary.default.sys.readFile).config || defaultTSConfig,
|
|
2808
2821
|
import_tsserverlibrary.default.sys,
|
|
2809
|
-
|
|
2822
|
+
basePath,
|
|
2810
2823
|
requiredTSCompilerOptions,
|
|
2811
2824
|
configFile,
|
|
2812
2825
|
void 0,
|
|
2813
2826
|
extraTSCompilerExtensions
|
|
2814
2827
|
);
|
|
2815
|
-
options.rootDir
|
|
2828
|
+
options.rootDir = basePath;
|
|
2816
2829
|
const potentialGlobalFiles = new Set(
|
|
2817
2830
|
fileNames.filter((file) => /\.[cm]?ts$/.test(file))
|
|
2818
2831
|
);
|
|
@@ -2822,7 +2835,7 @@ function getTSProject(docFsPath) {
|
|
|
2822
2835
|
import_tsserverlibrary.default.getDefaultLibFileName(options)
|
|
2823
2836
|
);
|
|
2824
2837
|
const resolutionCache = import_tsserverlibrary.default.createModuleResolutionCache(
|
|
2825
|
-
|
|
2838
|
+
basePath,
|
|
2826
2839
|
getCanonicalFileName,
|
|
2827
2840
|
options
|
|
2828
2841
|
);
|
|
@@ -2927,7 +2940,7 @@ function getTSProject(docFsPath) {
|
|
|
2927
2940
|
service: import_tsserverlibrary.default.createLanguageService(host),
|
|
2928
2941
|
markoScriptLang
|
|
2929
2942
|
};
|
|
2930
|
-
projectCache.set(
|
|
2943
|
+
projectCache.set(basePath, tsProject);
|
|
2931
2944
|
return tsProject;
|
|
2932
2945
|
}
|
|
2933
2946
|
function filenameToURI(filename) {
|