dot-language-support 2.0.9 → 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/.github/workflows/CD.yml +8 -5
- package/.github/workflows/CI.yml +3 -4
- package/CITATION.cff +14 -0
- package/lib/cjs/service/hover.js +24 -1
- package/lib/esm/service/hover.js +23 -1
- package/package.json +5 -5
- package/jest.config.mjs +0 -19
package/.github/workflows/CD.yml
CHANGED
|
@@ -11,21 +11,24 @@ jobs:
|
|
|
11
11
|
build:
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
14
18
|
steps:
|
|
15
19
|
- uses: actions/checkout@v3
|
|
16
20
|
|
|
17
|
-
-
|
|
18
|
-
uses: actions/setup-node@v3
|
|
21
|
+
- uses: actions/setup-node@v3
|
|
19
22
|
with:
|
|
20
|
-
node-version:
|
|
23
|
+
node-version: 20
|
|
21
24
|
cache: npm
|
|
22
25
|
registry-url: https://registry.npmjs.org
|
|
23
26
|
|
|
24
|
-
- run: npm ci
|
|
27
|
+
- run: npm ci
|
|
25
28
|
- run: npm run compile
|
|
26
29
|
- run: npm test
|
|
27
30
|
env:
|
|
28
31
|
CI: true
|
|
29
|
-
- run: npm publish
|
|
32
|
+
- run: npm publish --provenance --access public
|
|
30
33
|
env:
|
|
31
34
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.github/workflows/CI.yml
CHANGED
|
@@ -8,18 +8,17 @@ jobs:
|
|
|
8
8
|
|
|
9
9
|
strategy:
|
|
10
10
|
matrix:
|
|
11
|
-
node-version: [16.x, 18.x, 19.x]
|
|
11
|
+
node-version: [16.x, 18.x, 19.x, 20.x]
|
|
12
12
|
|
|
13
13
|
steps:
|
|
14
14
|
- uses: actions/checkout@v3
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
uses: actions/setup-node@v3
|
|
16
|
+
- uses: actions/setup-node@v3
|
|
18
17
|
with:
|
|
19
18
|
node-version: ${{ matrix.node-version }}
|
|
20
19
|
cache: npm
|
|
21
20
|
|
|
22
|
-
- run: npm ci
|
|
21
|
+
- run: npm ci
|
|
23
22
|
- run: npm run compile
|
|
24
23
|
- run: npm test
|
|
25
24
|
env:
|
package/CITATION.cff
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
title: DOT Language Support
|
|
3
|
+
message: If you use this software, please cite it using the metadata from this file.
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- given-names: Niklas
|
|
7
|
+
family-names: Mollenhauer
|
|
8
|
+
repository-code: 'https://github.com/nikeee/dot-language-support'
|
|
9
|
+
abstract: A language service library for the DOT language (graphviz). Used by dot-language-server and edotor.net.
|
|
10
|
+
keywords:
|
|
11
|
+
- dot
|
|
12
|
+
- graphviz
|
|
13
|
+
- language-server-protocol
|
|
14
|
+
license: MIT
|
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": "^
|
|
38
|
-
"typescript": "^5.0.
|
|
39
|
-
"vitest": "^0.
|
|
36
|
+
"@vitest/coverage-c8": "^0.31.1",
|
|
37
|
+
"rimraf": "^5.0.1",
|
|
38
|
+
"typescript": "^5.0.4",
|
|
39
|
+
"vitest": "^0.31.1"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
42
|
"node": ">=18"
|
package/jest.config.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/** @type {import("@jest/types").Config.ProjectConfig} */
|
|
2
|
-
const config = {
|
|
3
|
-
preset: "ts-jest",
|
|
4
|
-
testEnvironment: "node",
|
|
5
|
-
transform: {
|
|
6
|
-
"\\.[jt]sx?$": "ts-jest",
|
|
7
|
-
},
|
|
8
|
-
globals: {
|
|
9
|
-
"ts-jest": {
|
|
10
|
-
"useESM": true,
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
moduleNameMapper: {
|
|
14
|
-
"(.+)\\.js": "$1",
|
|
15
|
-
},
|
|
16
|
-
extensionsToTreatAsEsm: [".ts"],
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default config;
|