dot-language-support 2.2.2 → 2.2.3
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 +4 -1
- package/.github/workflows/CI.yml +4 -1
- package/.github/workflows/auto-merge.yaml +1 -1
- package/biome.json +50 -0
- package/lib/cjs/binder.d.ts +1 -1
- package/lib/cjs/binder.js +2 -5
- package/lib/cjs/checker.d.ts +1 -1
- package/lib/cjs/checker.js +34 -30
- package/lib/cjs/core.js +2 -3
- package/lib/cjs/error.js +3 -5
- package/lib/cjs/parser.d.ts +4 -61
- package/lib/cjs/parser.js +580 -616
- package/lib/cjs/scanner.d.ts +2 -13
- package/lib/cjs/scanner.js +316 -317
- package/lib/cjs/service/codeAction.d.ts +3 -3
- package/lib/cjs/service/codeAction.js +28 -32
- package/lib/cjs/service/colorProvider.d.ts +3 -3
- package/lib/cjs/service/colorProvider.js +13 -24
- package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +4 -4
- package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +5 -6
- package/lib/cjs/service/command/ChangeEdgeOpCommand.d.ts +3 -3
- package/lib/cjs/service/command/ChangeEdgeOpCommand.js +5 -8
- package/lib/cjs/service/command/ConsolidateDescendantsCommand.d.ts +4 -4
- package/lib/cjs/service/command/ConsolidateDescendantsCommand.js +12 -13
- package/lib/cjs/service/command/RemoveSemicolons.d.ts +4 -4
- package/lib/cjs/service/command/RemoveSemicolons.js +8 -11
- package/lib/cjs/service/command/common.d.ts +4 -4
- package/lib/cjs/service/command/common.js +12 -10
- package/lib/cjs/service/completion.d.ts +2 -2
- package/lib/cjs/service/completion.js +17 -18
- package/lib/cjs/service/hover.d.ts +2 -2
- package/lib/cjs/service/hover.js +12 -16
- package/lib/cjs/service/languageFacts.js +1 -6
- package/lib/cjs/service/reference.d.ts +2 -2
- package/lib/cjs/service/reference.js +4 -8
- package/lib/cjs/service/rename.d.ts +3 -3
- package/lib/cjs/service/rename.js +10 -8
- package/lib/cjs/service/service.d.ts +3 -3
- package/lib/cjs/service/service.js +7 -8
- package/lib/cjs/service/util.d.ts +1 -1
- package/lib/cjs/service/util.js +10 -13
- package/lib/cjs/service/validation.d.ts +3 -3
- package/lib/cjs/service/validation.js +1 -2
- package/lib/cjs/tester.js +1 -1
- package/lib/cjs/visitor.d.ts +1 -1
- package/lib/cjs/visitor.js +32 -34
- package/lib/esm/binder.d.ts +1 -1
- package/lib/esm/binder.js +1 -3
- package/lib/esm/checker.d.ts +1 -1
- package/lib/esm/checker.js +21 -16
- package/lib/esm/core.js +1 -1
- package/lib/esm/error.js +1 -3
- package/lib/esm/parser.d.ts +4 -61
- package/lib/esm/parser.js +320 -306
- package/lib/esm/scanner.d.ts +2 -13
- package/lib/esm/scanner.js +153 -152
- package/lib/esm/service/codeAction.d.ts +3 -3
- package/lib/esm/service/codeAction.js +26 -29
- package/lib/esm/service/colorProvider.d.ts +3 -3
- package/lib/esm/service/colorProvider.js +11 -21
- package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +4 -4
- package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +4 -4
- package/lib/esm/service/command/ChangeEdgeOpCommand.d.ts +3 -3
- package/lib/esm/service/command/ChangeEdgeOpCommand.js +3 -5
- package/lib/esm/service/command/ConsolidateDescendantsCommand.d.ts +4 -4
- package/lib/esm/service/command/ConsolidateDescendantsCommand.js +11 -11
- package/lib/esm/service/command/RemoveSemicolons.d.ts +4 -4
- package/lib/esm/service/command/RemoveSemicolons.js +6 -8
- package/lib/esm/service/command/common.d.ts +4 -4
- package/lib/esm/service/command/common.js +7 -4
- package/lib/esm/service/completion.d.ts +2 -2
- package/lib/esm/service/completion.js +16 -16
- package/lib/esm/service/hover.d.ts +2 -2
- package/lib/esm/service/hover.js +8 -14
- package/lib/esm/service/languageFacts.js +1 -6
- package/lib/esm/service/reference.d.ts +2 -2
- package/lib/esm/service/reference.js +3 -6
- package/lib/esm/service/rename.d.ts +3 -3
- package/lib/esm/service/rename.js +9 -6
- package/lib/esm/service/service.d.ts +3 -3
- package/lib/esm/service/service.js +7 -7
- package/lib/esm/service/util.d.ts +1 -1
- package/lib/esm/service/util.js +5 -7
- package/lib/esm/service/validation.d.ts +3 -3
- package/lib/esm/service/validation.js +1 -1
- package/lib/esm/tester.js +1 -1
- package/lib/esm/visitor.d.ts +1 -1
- package/lib/esm/visitor.js +32 -33
- package/package.json +15 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TextEdit } from "vscode-languageserver-types";
|
|
2
|
-
import { SyntaxKind } from "../types.js";
|
|
3
2
|
import { findNodeAtOffset } from "../checker.js";
|
|
4
3
|
import { isIdentifierNode } from "../index.js";
|
|
4
|
+
import { SyntaxKind } from "../types.js";
|
|
5
5
|
import { syntaxNodesToRanges } from "./util.js";
|
|
6
6
|
export function renameSymbol(doc, sourceFile, position, newName) {
|
|
7
7
|
if (!sourceFile.symbols)
|
|
@@ -16,7 +16,10 @@ export function renameSymbol(doc, sourceFile, position, newName) {
|
|
|
16
16
|
if (!node)
|
|
17
17
|
return undefined;
|
|
18
18
|
const parent = node.parent;
|
|
19
|
-
if (isIdentifierNode(node) &&
|
|
19
|
+
if (isIdentifierNode(node) &&
|
|
20
|
+
isRenamableIdentifier(node) &&
|
|
21
|
+
!!parent &&
|
|
22
|
+
isRenameableNode(parent)) {
|
|
20
23
|
const nodeSymbol = node.symbol;
|
|
21
24
|
if (!nodeSymbol)
|
|
22
25
|
throw "node.symbol is not bound";
|
|
@@ -27,7 +30,7 @@ export function renameSymbol(doc, sourceFile, position, newName) {
|
|
|
27
30
|
const res = {
|
|
28
31
|
changes: {
|
|
29
32
|
[uri]: ranges.map(r => TextEdit.replace(r, newName)),
|
|
30
|
-
}
|
|
33
|
+
},
|
|
31
34
|
};
|
|
32
35
|
return res;
|
|
33
36
|
}
|
|
@@ -35,9 +38,9 @@ export function renameSymbol(doc, sourceFile, position, newName) {
|
|
|
35
38
|
return undefined;
|
|
36
39
|
}
|
|
37
40
|
function isRenameableNode(node) {
|
|
38
|
-
return node.kind === SyntaxKind.NodeId
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
return (node.kind === SyntaxKind.NodeId ||
|
|
42
|
+
node.kind === SyntaxKind.DirectedGraph ||
|
|
43
|
+
node.kind === SyntaxKind.UndirectedGraph);
|
|
41
44
|
}
|
|
42
45
|
function isRenamableIdentifier(node) {
|
|
43
46
|
return node.kind !== SyntaxKind.QuotedTextIdentifier;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type * as lst from "vscode-languageserver-types";
|
|
2
|
-
import type { ColorInformation, Color, ColorPresentation } from "vscode-languageserver-types";
|
|
3
1
|
import type { TextDocument } from "vscode-languageserver-textdocument";
|
|
4
|
-
import
|
|
2
|
+
import type * as lst from "vscode-languageserver-types";
|
|
3
|
+
import type { Color, ColorInformation, ColorPresentation } from "vscode-languageserver-types";
|
|
4
|
+
import type { Omit, SourceFile } from "../types.js";
|
|
5
5
|
export interface DocumentLike {
|
|
6
6
|
positionAt(offset: number): lst.Position;
|
|
7
7
|
offsetAt(position: lst.Position): number;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Parser } from "../index.js";
|
|
2
1
|
import { bindSourceFile } from "../binder.js";
|
|
2
|
+
import { checkSourceFile } from "../checker.js";
|
|
3
|
+
import { Parser } from "../index.js";
|
|
4
|
+
import { executeCommand, getAvailableCommands, getCodeActions } from "./codeAction.js";
|
|
5
|
+
import { getColorRepresentations, getDocumentColors } from "./colorProvider.js";
|
|
6
|
+
import { getCompletions } from "./completion.js";
|
|
3
7
|
import { hover } from "./hover.js";
|
|
4
|
-
import {
|
|
5
|
-
import { findReferences, findDefinition } from "./reference.js";
|
|
8
|
+
import { findDefinition, findReferences } from "./reference.js";
|
|
6
9
|
import { renameSymbol } from "./rename.js";
|
|
7
|
-
import {
|
|
8
|
-
import { checkSourceFile } from "../checker.js";
|
|
9
|
-
import { getCodeActions, executeCommand, getAvailableCommands } from "./codeAction.js";
|
|
10
|
-
import { getDocumentColors, getColorRepresentations } from "./colorProvider.js";
|
|
10
|
+
import { validateDocument } from "./validation.js";
|
|
11
11
|
function parseDocument(doc) {
|
|
12
12
|
const parser = new Parser();
|
|
13
13
|
const content = typeof doc === "string" ? doc : doc.getText();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Range } from "vscode-languageserver-types";
|
|
2
|
-
import { SourceFile, SyntaxNode } from "../types.js";
|
|
3
2
|
import type { DocumentLike } from "../index.js";
|
|
3
|
+
import { type SourceFile, type SyntaxNode } from "../types.js";
|
|
4
4
|
export declare function getStart(sourceFile: SourceFile, node: SyntaxNode): number;
|
|
5
5
|
export declare function syntaxNodesToRanges(doc: DocumentLike, sourceFile: SourceFile, nodes: SyntaxNode[]): Range[];
|
|
6
6
|
export declare function syntaxNodeToRange(doc: DocumentLike, sourceFile: SourceFile, node: SyntaxNode): {
|
package/lib/esm/service/util.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { isIdentifierStart, skipTrivia } from "../scanner.js";
|
|
1
2
|
import { SyntaxKind } from "../types.js";
|
|
2
|
-
import { skipTrivia, isIdentifierStart } from "../scanner.js";
|
|
3
3
|
export function getStart(sourceFile, node) {
|
|
4
4
|
return getTokenPosOfNode(sourceFile, node);
|
|
5
5
|
}
|
|
@@ -26,10 +26,8 @@ export function syntaxNodeToRange(doc, sourceFile, node) {
|
|
|
26
26
|
export function escapeIdentifierText(text) {
|
|
27
27
|
if (text === "")
|
|
28
28
|
return quote("");
|
|
29
|
-
if (text.includes("
|
|
30
|
-
const esc = text
|
|
31
|
-
.replace(/"/, "\\\"")
|
|
32
|
-
.replace(/\n/, "\\\n");
|
|
29
|
+
if (text.includes('"') || text.includes("\n")) {
|
|
30
|
+
const esc = text.replace(/"/, '\\"').replace(/\n/, "\\\n");
|
|
33
31
|
return quote(esc);
|
|
34
32
|
}
|
|
35
33
|
const ch = text.charCodeAt(0);
|
|
@@ -37,8 +35,8 @@ export function escapeIdentifierText(text) {
|
|
|
37
35
|
return quote(text);
|
|
38
36
|
return text;
|
|
39
37
|
}
|
|
40
|
-
const quote = (s) => "
|
|
38
|
+
const quote = (s) => `"${s}"`;
|
|
41
39
|
export function assertNever(v) {
|
|
42
|
-
throw new Error(
|
|
40
|
+
throw new Error(`Should not have reached this. Value: ${v ?? ""}`);
|
|
43
41
|
}
|
|
44
42
|
//# sourceMappingURL=util.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as lst from "vscode-languageserver-types";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type * as lst from "vscode-languageserver-types";
|
|
2
|
+
import type { DocumentLike } from "../index.js";
|
|
3
|
+
import type { SourceFile } from "../types.js";
|
|
4
4
|
export declare function validateDocument(doc: DocumentLike, sourceFile: SourceFile): lst.Diagnostic[];
|
package/lib/esm/tester.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
2
|
-
import { Parser } from "./parser.js";
|
|
3
2
|
import { bindSourceFile } from "./binder.js";
|
|
4
3
|
import { checkSourceFile } from "./checker.js";
|
|
4
|
+
import { Parser } from "./parser.js";
|
|
5
5
|
import { getCompletions } from "./service/completion.js";
|
|
6
6
|
const text = `graph {
|
|
7
7
|
node_name_a -- node_name_b [color=blue,
|
package/lib/esm/visitor.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SyntaxNode, SyntaxNodeArray } from "./types.js";
|
|
1
|
+
import { type SyntaxNode, type SyntaxNodeArray } from "./types.js";
|
|
2
2
|
export declare function forEachChild<TReturn>(node: SyntaxNode, cbNode: (node: SyntaxNode) => TReturn, cbNodes?: (nodes: SyntaxNodeArray<SyntaxNode>) => TReturn): TReturn | undefined;
|
package/lib/esm/visitor.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SyntaxKind } from "./types.js";
|
|
1
|
+
import { SyntaxKind, } from "./types.js";
|
|
2
2
|
function visitNode(cbNode, node) {
|
|
3
3
|
return node && cbNode(node);
|
|
4
4
|
}
|
|
@@ -20,53 +20,52 @@ export function forEachChild(node, cbNode, cbNodes) {
|
|
|
20
20
|
switch (node.kind) {
|
|
21
21
|
case SyntaxKind.DirectedGraph:
|
|
22
22
|
case SyntaxKind.UndirectedGraph:
|
|
23
|
-
return visitNodes(cbNode, cbNodes, node.statements)
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
return (visitNodes(cbNode, cbNodes, node.statements) ||
|
|
24
|
+
visitNode(cbNode, node.strict) ||
|
|
25
|
+
visitNode(cbNode, node.id));
|
|
26
26
|
case SyntaxKind.AttributeStatement:
|
|
27
|
-
return visitNodes(cbNode, cbNodes, node.attributes)
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
return (visitNodes(cbNode, cbNodes, node.attributes) ||
|
|
28
|
+
visitNode(cbNode, node.subject) ||
|
|
29
|
+
visitNode(cbNode, node.terminator));
|
|
30
30
|
case SyntaxKind.EdgeStatement:
|
|
31
|
-
return visitNodes(cbNode, cbNodes, node.attributes)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
return (visitNodes(cbNode, cbNodes, node.attributes) ||
|
|
32
|
+
visitNodes(cbNode, cbNodes, node.rhs) ||
|
|
33
|
+
visitNode(cbNode, node.source) ||
|
|
34
|
+
visitNode(cbNode, node.terminator));
|
|
35
35
|
case SyntaxKind.NodeStatement:
|
|
36
|
-
return visitNodes(cbNode, cbNodes, node.attributes)
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
return (visitNodes(cbNode, cbNodes, node.attributes) ||
|
|
37
|
+
visitNode(cbNode, node.id) ||
|
|
38
|
+
visitNode(cbNode, node.terminator));
|
|
39
39
|
case SyntaxKind.SubGraph:
|
|
40
|
-
return visitNodes(cbNode, cbNodes, node.statements)
|
|
41
|
-
|
|
40
|
+
return (visitNodes(cbNode, cbNodes, node.statements) ||
|
|
41
|
+
visitNode(cbNode, node.id));
|
|
42
42
|
case SyntaxKind.SubGraphStatement:
|
|
43
|
-
return visitNode(cbNode, node.subgraph)
|
|
44
|
-
|
|
43
|
+
return (visitNode(cbNode, node.subgraph) ||
|
|
44
|
+
visitNode(cbNode, node.terminator));
|
|
45
45
|
case SyntaxKind.IdEqualsIdStatement:
|
|
46
|
-
return visitNode(cbNode, node.leftId)
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return (visitNode(cbNode, node.leftId) ||
|
|
47
|
+
visitNode(cbNode, node.rightId) ||
|
|
48
|
+
visitNode(cbNode, node.terminator));
|
|
49
49
|
case SyntaxKind.QuotedTextIdentifier:
|
|
50
50
|
return visitNodes(cbNode, cbNodes, node.values);
|
|
51
51
|
case SyntaxKind.EdgeRhs:
|
|
52
|
-
return visitNode(cbNode, node.operation)
|
|
53
|
-
|
|
52
|
+
return (visitNode(cbNode, node.operation) ||
|
|
53
|
+
visitNode(cbNode, node.target));
|
|
54
54
|
case SyntaxKind.AttributeContainer:
|
|
55
55
|
return visitNodes(cbNode, cbNodes, node.assignments);
|
|
56
56
|
case SyntaxKind.Assignment:
|
|
57
|
-
return visitNode(cbNode, node.leftId)
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
return (visitNode(cbNode, node.leftId) ||
|
|
58
|
+
visitNode(cbNode, node.rightId) ||
|
|
59
|
+
visitNode(cbNode, node.terminator));
|
|
60
60
|
case SyntaxKind.NormalPortDeclaration:
|
|
61
|
-
return visitNode(cbNode, node.colon)
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
return (visitNode(cbNode, node.colon) ||
|
|
62
|
+
visitNode(cbNode, node.id) ||
|
|
63
|
+
visitNode(cbNode, node.compassPt));
|
|
64
64
|
case SyntaxKind.CompassPortDeclaration:
|
|
65
|
-
return visitNode(cbNode, node.colon)
|
|
66
|
-
|
|
65
|
+
return (visitNode(cbNode, node.colon) ||
|
|
66
|
+
visitNode(cbNode, node.compassPt));
|
|
67
67
|
case SyntaxKind.NodeId:
|
|
68
|
-
return visitNode(cbNode, node.port)
|
|
69
|
-
|| visitNode(cbNode, node.id);
|
|
68
|
+
return (visitNode(cbNode, node.port) || visitNode(cbNode, node.id));
|
|
70
69
|
default:
|
|
71
70
|
return undefined;
|
|
72
71
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dot-language-support",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "Parser and language service for graphviz (dot) files",
|
|
5
5
|
"author": "Niklas Mollenhauer",
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,13 +8,17 @@
|
|
|
8
8
|
"module": "./lib/esm/index.js",
|
|
9
9
|
"types": "./lib/esm/index.d.ts",
|
|
10
10
|
"scripts": {
|
|
11
|
+
"ci": "biome ci ./src",
|
|
11
12
|
"test": "tsc --noEmit && vitest run",
|
|
12
13
|
"test:coverage": "vitest run --coverage",
|
|
14
|
+
"format": "biome format --write ./src",
|
|
15
|
+
"lint": "biome lint ./src",
|
|
16
|
+
"lint:fix": "biome lint --apply ./src",
|
|
13
17
|
"clean": "rimraf lib",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"prepare": "npm run clean && npm run
|
|
18
|
+
"build:esm": "tsc --target esnext --module esnext --outDir lib/esm",
|
|
19
|
+
"build:cjs": "tsc --target es2017 --module commonjs --outDir lib/cjs",
|
|
20
|
+
"build": "npm run build:esm && npm run build:cjs",
|
|
21
|
+
"prepare": "npm run clean && npm run build"
|
|
18
22
|
},
|
|
19
23
|
"keywords": [
|
|
20
24
|
"graphviz",
|
|
@@ -29,14 +33,15 @@
|
|
|
29
33
|
"url": "https://github.com/nikeee/dot-language-support.git"
|
|
30
34
|
},
|
|
31
35
|
"dependencies": {
|
|
32
|
-
"vscode-languageserver-textdocument": "^1.0.
|
|
36
|
+
"vscode-languageserver-textdocument": "^1.0.12",
|
|
33
37
|
"vscode-languageserver-types": "^3.17.5"
|
|
34
38
|
},
|
|
35
39
|
"devDependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
+
"@biomejs/biome": "^1.9.2",
|
|
41
|
+
"@vitest/coverage-v8": "^2.1.1",
|
|
42
|
+
"rimraf": "^6.0.1",
|
|
43
|
+
"typescript": "^5.6.2",
|
|
44
|
+
"vitest": "^2.1.1"
|
|
40
45
|
},
|
|
41
46
|
"engines": {
|
|
42
47
|
"node": ">=20"
|