dot-language-support 2.2.1 → 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.
Files changed (90) hide show
  1. package/.github/dependabot.yml +5 -1
  2. package/.github/workflows/CD.yml +6 -3
  3. package/.github/workflows/CI.yml +7 -4
  4. package/.github/workflows/auto-merge.yaml +26 -0
  5. package/biome.json +50 -0
  6. package/lib/cjs/binder.d.ts +1 -1
  7. package/lib/cjs/binder.js +2 -5
  8. package/lib/cjs/checker.d.ts +1 -1
  9. package/lib/cjs/checker.js +34 -30
  10. package/lib/cjs/core.js +2 -3
  11. package/lib/cjs/error.js +3 -5
  12. package/lib/cjs/parser.d.ts +4 -61
  13. package/lib/cjs/parser.js +580 -616
  14. package/lib/cjs/scanner.d.ts +2 -13
  15. package/lib/cjs/scanner.js +316 -317
  16. package/lib/cjs/service/codeAction.d.ts +3 -3
  17. package/lib/cjs/service/codeAction.js +28 -32
  18. package/lib/cjs/service/colorProvider.d.ts +3 -3
  19. package/lib/cjs/service/colorProvider.js +13 -24
  20. package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +4 -4
  21. package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +5 -6
  22. package/lib/cjs/service/command/ChangeEdgeOpCommand.d.ts +3 -3
  23. package/lib/cjs/service/command/ChangeEdgeOpCommand.js +5 -8
  24. package/lib/cjs/service/command/ConsolidateDescendantsCommand.d.ts +4 -4
  25. package/lib/cjs/service/command/ConsolidateDescendantsCommand.js +12 -13
  26. package/lib/cjs/service/command/RemoveSemicolons.d.ts +4 -4
  27. package/lib/cjs/service/command/RemoveSemicolons.js +8 -11
  28. package/lib/cjs/service/command/common.d.ts +4 -4
  29. package/lib/cjs/service/command/common.js +12 -10
  30. package/lib/cjs/service/completion.d.ts +2 -2
  31. package/lib/cjs/service/completion.js +17 -18
  32. package/lib/cjs/service/hover.d.ts +2 -2
  33. package/lib/cjs/service/hover.js +12 -16
  34. package/lib/cjs/service/languageFacts.js +1 -6
  35. package/lib/cjs/service/reference.d.ts +2 -2
  36. package/lib/cjs/service/reference.js +4 -8
  37. package/lib/cjs/service/rename.d.ts +3 -3
  38. package/lib/cjs/service/rename.js +10 -8
  39. package/lib/cjs/service/service.d.ts +3 -3
  40. package/lib/cjs/service/service.js +7 -8
  41. package/lib/cjs/service/util.d.ts +1 -1
  42. package/lib/cjs/service/util.js +10 -13
  43. package/lib/cjs/service/validation.d.ts +3 -3
  44. package/lib/cjs/service/validation.js +1 -2
  45. package/lib/cjs/tester.js +1 -1
  46. package/lib/cjs/visitor.d.ts +1 -1
  47. package/lib/cjs/visitor.js +32 -34
  48. package/lib/esm/binder.d.ts +1 -1
  49. package/lib/esm/binder.js +1 -3
  50. package/lib/esm/checker.d.ts +1 -1
  51. package/lib/esm/checker.js +21 -16
  52. package/lib/esm/core.js +1 -1
  53. package/lib/esm/error.js +1 -3
  54. package/lib/esm/parser.d.ts +4 -61
  55. package/lib/esm/parser.js +320 -306
  56. package/lib/esm/scanner.d.ts +2 -13
  57. package/lib/esm/scanner.js +153 -152
  58. package/lib/esm/service/codeAction.d.ts +3 -3
  59. package/lib/esm/service/codeAction.js +26 -29
  60. package/lib/esm/service/colorProvider.d.ts +3 -3
  61. package/lib/esm/service/colorProvider.js +11 -21
  62. package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +4 -4
  63. package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +4 -4
  64. package/lib/esm/service/command/ChangeEdgeOpCommand.d.ts +3 -3
  65. package/lib/esm/service/command/ChangeEdgeOpCommand.js +3 -5
  66. package/lib/esm/service/command/ConsolidateDescendantsCommand.d.ts +4 -4
  67. package/lib/esm/service/command/ConsolidateDescendantsCommand.js +11 -11
  68. package/lib/esm/service/command/RemoveSemicolons.d.ts +4 -4
  69. package/lib/esm/service/command/RemoveSemicolons.js +6 -8
  70. package/lib/esm/service/command/common.d.ts +4 -4
  71. package/lib/esm/service/command/common.js +7 -4
  72. package/lib/esm/service/completion.d.ts +2 -2
  73. package/lib/esm/service/completion.js +16 -16
  74. package/lib/esm/service/hover.d.ts +2 -2
  75. package/lib/esm/service/hover.js +8 -14
  76. package/lib/esm/service/languageFacts.js +1 -6
  77. package/lib/esm/service/reference.d.ts +2 -2
  78. package/lib/esm/service/reference.js +3 -6
  79. package/lib/esm/service/rename.d.ts +3 -3
  80. package/lib/esm/service/rename.js +9 -6
  81. package/lib/esm/service/service.d.ts +3 -3
  82. package/lib/esm/service/service.js +7 -7
  83. package/lib/esm/service/util.d.ts +1 -1
  84. package/lib/esm/service/util.js +5 -7
  85. package/lib/esm/service/validation.d.ts +3 -3
  86. package/lib/esm/service/validation.js +1 -1
  87. package/lib/esm/tester.js +1 -1
  88. package/lib/esm/visitor.d.ts +1 -1
  89. package/lib/esm/visitor.js +32 -33
  90. package/package.json +17 -12
@@ -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) && isRenamableIdentifier(node) && !!parent && isRenameableNode(parent)) {
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
- || node.kind === SyntaxKind.DirectedGraph
40
- || node.kind === SyntaxKind.UndirectedGraph;
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 { SourceFile, Omit } from "../types.js";
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 { validateDocument } from "./validation.js";
5
- import { findReferences, findDefinition } from "./reference.js";
8
+ import { findDefinition, findReferences } from "./reference.js";
6
9
  import { renameSymbol } from "./rename.js";
7
- import { getCompletions } from "./completion.js";
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): {
@@ -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("\"") || text.includes("\n")) {
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) => "\"" + s + "\"";
38
+ const quote = (s) => `"${s}"`;
41
39
  export function assertNever(v) {
42
- throw new Error("Should not have reached this. Value: " + (v ?? ""));
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 { SourceFile } from "../types.js";
3
- import { DocumentLike } from "../index.js";
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[];
@@ -1,4 +1,4 @@
1
- import { formatError, diagnosicSource } from "../error.js";
1
+ import { diagnosicSource, formatError } from "../error.js";
2
2
  function convertDiagnostic(document, source) {
3
3
  return {
4
4
  range: {
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,
@@ -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;
@@ -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
- || visitNode(cbNode, node.strict)
25
- || visitNode(cbNode, node.id);
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
- || visitNode(cbNode, node.subject)
29
- || visitNode(cbNode, node.terminator);
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
- || visitNodes(cbNode, cbNodes, node.rhs)
33
- || visitNode(cbNode, node.source)
34
- || visitNode(cbNode, node.terminator);
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
- || visitNode(cbNode, node.id)
38
- || visitNode(cbNode, node.terminator);
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
- || visitNode(cbNode, node.id);
40
+ return (visitNodes(cbNode, cbNodes, node.statements) ||
41
+ visitNode(cbNode, node.id));
42
42
  case SyntaxKind.SubGraphStatement:
43
- return visitNode(cbNode, node.subgraph)
44
- || visitNode(cbNode, node.terminator);
43
+ return (visitNode(cbNode, node.subgraph) ||
44
+ visitNode(cbNode, node.terminator));
45
45
  case SyntaxKind.IdEqualsIdStatement:
46
- return visitNode(cbNode, node.leftId)
47
- || visitNode(cbNode, node.rightId)
48
- || visitNode(cbNode, node.terminator);
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
- || visitNode(cbNode, node.target);
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
- || visitNode(cbNode, node.rightId)
59
- || visitNode(cbNode, node.terminator);
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
- || visitNode(cbNode, node.id)
63
- || visitNode(cbNode, node.compassPt);
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
- || visitNode(cbNode, node.compassPt);
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.1",
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
- "compile:esm": "tsc --target esnext --module esnext --outDir lib/esm",
15
- "compile:cjs": "tsc --target es2017 --module commonjs --outDir lib/cjs",
16
- "compile": "npm run compile:esm && npm run compile:cjs",
17
- "prepare": "npm run clean && npm run compile"
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,16 +33,17 @@
29
33
  "url": "https://github.com/nikeee/dot-language-support.git"
30
34
  },
31
35
  "dependencies": {
32
- "vscode-languageserver-textdocument": "^1.0.8",
33
- "vscode-languageserver-types": "^3.17.3"
36
+ "vscode-languageserver-textdocument": "^1.0.12",
37
+ "vscode-languageserver-types": "^3.17.5"
34
38
  },
35
39
  "devDependencies": {
36
- "@vitest/coverage-v8": "^0.32.4",
37
- "rimraf": "^5.0.1",
38
- "typescript": "^5.1.6",
39
- "vitest": "^0.32.4"
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
- "node": ">=18"
47
+ "node": ">=20"
43
48
  }
44
49
  }