dot-language-support 2.0.10 → 2.1.0
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/lib/cjs/service/hover.js +24 -1
- package/lib/esm/service/hover.js +23 -1
- package/package.json +4 -4
package/lib/cjs/service/hover.js
CHANGED
|
@@ -27,13 +27,36 @@ function getNodeHover(doc, sf, n) {
|
|
|
27
27
|
}
|
|
28
28
|
return undefined;
|
|
29
29
|
}
|
|
30
|
+
function getAssignedLabel(statement) {
|
|
31
|
+
const assignments = statement.attributes.flatMap(a => a.assignments);
|
|
32
|
+
const assignedLabel = assignments === null || assignments === void 0 ? void 0 : assignments.find(a => (0, checker_js_1.getIdentifierText)(a.leftId) === "label");
|
|
33
|
+
return (assignedLabel === null || assignedLabel === void 0 ? void 0 : assignedLabel.rightId) ? (0, checker_js_1.getIdentifierText)(assignedLabel.rightId) : undefined;
|
|
34
|
+
}
|
|
30
35
|
function getHoverContents(n) {
|
|
36
|
+
var _a, _b, _c;
|
|
31
37
|
if ((0, parser_js_1.isIdentifierNode)(n)) {
|
|
32
38
|
const parent = n.parent;
|
|
33
39
|
if (parent) {
|
|
34
40
|
switch (parent.kind) {
|
|
35
|
-
case types_js_1.SyntaxKind.NodeId:
|
|
41
|
+
case types_js_1.SyntaxKind.NodeId: {
|
|
42
|
+
if ((_a = n.symbol) === null || _a === void 0 ? void 0 : _a.references) {
|
|
43
|
+
const nodeIdentifierRefs = (_b = n.symbol) === null || _b === void 0 ? void 0 : _b.references;
|
|
44
|
+
const labelMentions = nodeIdentifierRefs.map(e => { var _a, _b, _c; return (_c = (_b = (_a = e.symbol) === null || _a === void 0 ? void 0 : _a.members) === null || _b === void 0 ? void 0 : _b.get("label")) === null || _c === void 0 ? void 0 : _c.firstMention.parent; });
|
|
45
|
+
for (let i = labelMentions.length; i > 0; i--) {
|
|
46
|
+
const s = labelMentions[i];
|
|
47
|
+
if (s === null || s === void 0 ? void 0 : s.rightId) {
|
|
48
|
+
return `(node) ${(0, checker_js_1.getIdentifierText)(n)}: ${(0, checker_js_1.getIdentifierText)(s.rightId)}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (((_c = parent.parent) === null || _c === void 0 ? void 0 : _c.kind) === types_js_1.SyntaxKind.NodeStatement) {
|
|
53
|
+
const label = getAssignedLabel(parent.parent);
|
|
54
|
+
if (label) {
|
|
55
|
+
return `(node) ${(0, checker_js_1.getIdentifierText)(n)}: ${label}`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
36
58
|
return `(node) ${(0, checker_js_1.getIdentifierText)(n)}`;
|
|
59
|
+
}
|
|
37
60
|
case types_js_1.SyntaxKind.Assignment: {
|
|
38
61
|
const assignment = parent;
|
|
39
62
|
const left = (0, checker_js_1.getIdentifierText)(assignment.leftId);
|
package/lib/esm/service/hover.js
CHANGED
|
@@ -23,13 +23,35 @@ function getNodeHover(doc, sf, n) {
|
|
|
23
23
|
}
|
|
24
24
|
return undefined;
|
|
25
25
|
}
|
|
26
|
+
function getAssignedLabel(statement) {
|
|
27
|
+
const assignments = statement.attributes.flatMap(a => a.assignments);
|
|
28
|
+
const assignedLabel = assignments?.find(a => getIdentifierText(a.leftId) === "label");
|
|
29
|
+
return assignedLabel?.rightId ? getIdentifierText(assignedLabel.rightId) : undefined;
|
|
30
|
+
}
|
|
26
31
|
function getHoverContents(n) {
|
|
27
32
|
if (isIdentifierNode(n)) {
|
|
28
33
|
const parent = n.parent;
|
|
29
34
|
if (parent) {
|
|
30
35
|
switch (parent.kind) {
|
|
31
|
-
case SyntaxKind.NodeId:
|
|
36
|
+
case SyntaxKind.NodeId: {
|
|
37
|
+
if (n.symbol?.references) {
|
|
38
|
+
const nodeIdentifierRefs = n.symbol?.references;
|
|
39
|
+
const labelMentions = nodeIdentifierRefs.map(e => e.symbol?.members?.get("label")?.firstMention.parent);
|
|
40
|
+
for (let i = labelMentions.length; i > 0; i--) {
|
|
41
|
+
const s = labelMentions[i];
|
|
42
|
+
if (s?.rightId) {
|
|
43
|
+
return `(node) ${getIdentifierText(n)}: ${getIdentifierText(s.rightId)}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (parent.parent?.kind === SyntaxKind.NodeStatement) {
|
|
48
|
+
const label = getAssignedLabel(parent.parent);
|
|
49
|
+
if (label) {
|
|
50
|
+
return `(node) ${getIdentifierText(n)}: ${label}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
32
53
|
return `(node) ${getIdentifierText(n)}`;
|
|
54
|
+
}
|
|
33
55
|
case SyntaxKind.Assignment: {
|
|
34
56
|
const assignment = parent;
|
|
35
57
|
const left = getIdentifierText(assignment.leftId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dot-language-support",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Parser and language service for graphviz (dot) files",
|
|
5
5
|
"author": "Niklas Mollenhauer",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"vscode-languageserver-types": "^3.17.3"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@vitest/coverage-c8": "^0.
|
|
37
|
-
"rimraf": "^5.0.
|
|
36
|
+
"@vitest/coverage-c8": "^0.31.1",
|
|
37
|
+
"rimraf": "^5.0.1",
|
|
38
38
|
"typescript": "^5.0.4",
|
|
39
|
-
"vitest": "^0.
|
|
39
|
+
"vitest": "^0.31.1"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
42
|
"node": ">=18"
|