dot-language-support 2.3.0 → 3.0.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.
Files changed (109) hide show
  1. package/dist/index.d.ts +497 -0
  2. package/dist/index.js +3853 -0
  3. package/package.json +10 -11
  4. package/.github/dependabot.yml +0 -15
  5. package/.github/workflows/CD.yml +0 -37
  6. package/.github/workflows/CI.yml +0 -28
  7. package/.github/workflows/auto-merge.yaml +0 -26
  8. package/CITATION.cff +0 -14
  9. package/biome.json +0 -48
  10. package/lib/cjs/binder.d.ts +0 -2
  11. package/lib/cjs/binder.js +0 -297
  12. package/lib/cjs/checker.d.ts +0 -15
  13. package/lib/cjs/checker.js +0 -228
  14. package/lib/cjs/core.d.ts +0 -1
  15. package/lib/cjs/core.js +0 -13
  16. package/lib/cjs/error.d.ts +0 -3
  17. package/lib/cjs/error.js +0 -12
  18. package/lib/cjs/index.d.ts +0 -5
  19. package/lib/cjs/index.js +0 -22
  20. package/lib/cjs/parser.d.ts +0 -27
  21. package/lib/cjs/parser.js +0 -664
  22. package/lib/cjs/scanner.d.ts +0 -41
  23. package/lib/cjs/scanner.js +0 -578
  24. package/lib/cjs/service/codeAction.d.ts +0 -12
  25. package/lib/cjs/service/codeAction.js +0 -245
  26. package/lib/cjs/service/colorProvider.d.ts +0 -5
  27. package/lib/cjs/service/colorProvider.js +0 -91
  28. package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +0 -10
  29. package/lib/cjs/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +0 -42
  30. package/lib/cjs/service/command/ChangeEdgeOpCommand.d.ts +0 -10
  31. package/lib/cjs/service/command/ChangeEdgeOpCommand.js +0 -67
  32. package/lib/cjs/service/command/ConsolidateDescendantsCommand.d.ts +0 -10
  33. package/lib/cjs/service/command/ConsolidateDescendantsCommand.js +0 -87
  34. package/lib/cjs/service/command/RemoveSemicolons.d.ts +0 -10
  35. package/lib/cjs/service/command/RemoveSemicolons.js +0 -39
  36. package/lib/cjs/service/command/common.d.ts +0 -31
  37. package/lib/cjs/service/command/common.js +0 -33
  38. package/lib/cjs/service/completion.d.ts +0 -4
  39. package/lib/cjs/service/completion.js +0 -173
  40. package/lib/cjs/service/hover.d.ts +0 -4
  41. package/lib/cjs/service/hover.js +0 -142
  42. package/lib/cjs/service/languageFacts.d.ts +0 -683
  43. package/lib/cjs/service/languageFacts.js +0 -996
  44. package/lib/cjs/service/reference.d.ts +0 -5
  45. package/lib/cjs/service/reference.js +0 -67
  46. package/lib/cjs/service/rename.d.ts +0 -4
  47. package/lib/cjs/service/rename.js +0 -51
  48. package/lib/cjs/service/service.d.ts +0 -28
  49. package/lib/cjs/service/service.js +0 -38
  50. package/lib/cjs/service/util.d.ts +0 -11
  51. package/lib/cjs/service/util.js +0 -49
  52. package/lib/cjs/service/validation.d.ts +0 -4
  53. package/lib/cjs/service/validation.js +0 -23
  54. package/lib/cjs/tester.d.ts +0 -1
  55. package/lib/cjs/tester.js +0 -23
  56. package/lib/cjs/types.d.ts +0 -397
  57. package/lib/cjs/types.js +0 -74
  58. package/lib/cjs/visitor.d.ts +0 -2
  59. package/lib/cjs/visitor.js +0 -76
  60. package/lib/esm/binder.d.ts +0 -2
  61. package/lib/esm/binder.js +0 -294
  62. package/lib/esm/checker.d.ts +0 -15
  63. package/lib/esm/checker.js +0 -212
  64. package/lib/esm/core.d.ts +0 -1
  65. package/lib/esm/core.js +0 -10
  66. package/lib/esm/error.d.ts +0 -3
  67. package/lib/esm/error.js +0 -8
  68. package/lib/esm/index.d.ts +0 -5
  69. package/lib/esm/index.js +0 -6
  70. package/lib/esm/parser.d.ts +0 -27
  71. package/lib/esm/parser.js +0 -714
  72. package/lib/esm/scanner.d.ts +0 -41
  73. package/lib/esm/scanner.js +0 -581
  74. package/lib/esm/service/codeAction.d.ts +0 -12
  75. package/lib/esm/service/codeAction.js +0 -207
  76. package/lib/esm/service/colorProvider.d.ts +0 -5
  77. package/lib/esm/service/colorProvider.js +0 -54
  78. package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +0 -10
  79. package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +0 -38
  80. package/lib/esm/service/command/ChangeEdgeOpCommand.d.ts +0 -10
  81. package/lib/esm/service/command/ChangeEdgeOpCommand.js +0 -30
  82. package/lib/esm/service/command/ConsolidateDescendantsCommand.d.ts +0 -10
  83. package/lib/esm/service/command/ConsolidateDescendantsCommand.js +0 -83
  84. package/lib/esm/service/command/RemoveSemicolons.d.ts +0 -10
  85. package/lib/esm/service/command/RemoveSemicolons.js +0 -35
  86. package/lib/esm/service/command/common.d.ts +0 -31
  87. package/lib/esm/service/command/common.js +0 -25
  88. package/lib/esm/service/completion.d.ts +0 -4
  89. package/lib/esm/service/completion.js +0 -137
  90. package/lib/esm/service/hover.d.ts +0 -4
  91. package/lib/esm/service/hover.js +0 -135
  92. package/lib/esm/service/languageFacts.d.ts +0 -683
  93. package/lib/esm/service/languageFacts.js +0 -993
  94. package/lib/esm/service/reference.d.ts +0 -5
  95. package/lib/esm/service/reference.js +0 -63
  96. package/lib/esm/service/rename.d.ts +0 -4
  97. package/lib/esm/service/rename.js +0 -48
  98. package/lib/esm/service/service.d.ts +0 -28
  99. package/lib/esm/service/service.js +0 -35
  100. package/lib/esm/service/util.d.ts +0 -11
  101. package/lib/esm/service/util.js +0 -42
  102. package/lib/esm/service/validation.d.ts +0 -4
  103. package/lib/esm/service/validation.js +0 -20
  104. package/lib/esm/tester.d.ts +0 -1
  105. package/lib/esm/tester.js +0 -21
  106. package/lib/esm/types.d.ts +0 -397
  107. package/lib/esm/types.js +0 -71
  108. package/lib/esm/visitor.d.ts +0 -2
  109. package/lib/esm/visitor.js +0 -73
@@ -1,5 +0,0 @@
1
- import type { Location, Position, ReferenceContext } from "vscode-languageserver-types";
2
- import { type DocumentLike } from "../index.js";
3
- import type { SourceFile } from "../types.js";
4
- export declare function findReferences(doc: DocumentLike, sourceFile: SourceFile, position: Position, context: ReferenceContext): Location[];
5
- export declare function findDefinition(doc: DocumentLike, sourceFile: SourceFile, position: Position): Location | undefined;
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findReferences = findReferences;
4
- exports.findDefinition = findDefinition;
5
- const checker_js_1 = require("../checker.js");
6
- const index_js_1 = require("../index.js");
7
- const util_js_1 = require("./util.js");
8
- function findReferences(doc, sourceFile, position, context) {
9
- if (!sourceFile.symbols)
10
- throw "sourceFile is not bound";
11
- const g = sourceFile.graph;
12
- if (!g)
13
- return [];
14
- const offset = doc.offsetAt(position);
15
- const node = (0, checker_js_1.findNodeAtOffset)(g, offset);
16
- if (!node)
17
- return [];
18
- if ((0, index_js_1.isIdentifierNode)(node)) {
19
- const nodeSymbol = node.symbol;
20
- if (!nodeSymbol)
21
- throw "node.symbol is not bound";
22
- const refs = nodeSymbol.references || [];
23
- let symbolRefs;
24
- if (context.includeDeclaration) {
25
- symbolRefs = [nodeSymbol.firstMention, ...refs];
26
- }
27
- else {
28
- if (nodeSymbol.firstMention === node) {
29
- symbolRefs = refs;
30
- }
31
- else {
32
- symbolRefs = [nodeSymbol.firstMention, ...refs.filter(r => r !== node)];
33
- }
34
- }
35
- const ranges = (0, util_js_1.syntaxNodesToRanges)(doc, sourceFile, symbolRefs);
36
- const uri = doc.uri;
37
- return ranges.map(range => {
38
- return { uri, range };
39
- });
40
- }
41
- debugger;
42
- return [];
43
- }
44
- function findDefinition(doc, sourceFile, position) {
45
- if (!sourceFile.symbols)
46
- throw "sourceFile is not bound";
47
- const g = sourceFile.graph;
48
- if (!g)
49
- return undefined;
50
- const offset = doc.offsetAt(position);
51
- const node = (0, checker_js_1.findNodeAtOffset)(g, offset);
52
- if (!node)
53
- return undefined;
54
- if ((0, index_js_1.isIdentifierNode)(node)) {
55
- const nodeSymbol = node.symbol;
56
- if (!nodeSymbol)
57
- throw "node.symbol is not bound";
58
- const firstMention = nodeSymbol.firstMention;
59
- if (!firstMention)
60
- return undefined;
61
- const range = (0, util_js_1.syntaxNodeToRange)(doc, sourceFile, firstMention);
62
- return { uri: doc.uri, range };
63
- }
64
- debugger;
65
- return undefined;
66
- }
67
- //# sourceMappingURL=reference.js.map
@@ -1,4 +0,0 @@
1
- import { type Position, type WorkspaceEdit } from "vscode-languageserver-types";
2
- import { type DocumentLike } from "../index.js";
3
- import { type SourceFile } from "../types.js";
4
- export declare function renameSymbol(doc: DocumentLike, sourceFile: SourceFile, position: Position, newName: string): WorkspaceEdit | undefined;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renameSymbol = renameSymbol;
4
- const vscode_languageserver_types_1 = require("vscode-languageserver-types");
5
- const checker_js_1 = require("../checker.js");
6
- const index_js_1 = require("../index.js");
7
- const types_js_1 = require("../types.js");
8
- const util_js_1 = require("./util.js");
9
- function renameSymbol(doc, sourceFile, position, newName) {
10
- if (!sourceFile.symbols)
11
- throw "sourceFile is not bound";
12
- if (!newName)
13
- return undefined;
14
- const g = sourceFile.graph;
15
- if (!g)
16
- return undefined;
17
- const offset = doc.offsetAt(position);
18
- const node = (0, checker_js_1.findNodeAtOffset)(g, offset);
19
- if (!node)
20
- return undefined;
21
- const parent = node.parent;
22
- if ((0, index_js_1.isIdentifierNode)(node) &&
23
- isRenamableIdentifier(node) &&
24
- !!parent &&
25
- isRenameableNode(parent)) {
26
- const nodeSymbol = node.symbol;
27
- if (!nodeSymbol)
28
- throw "node.symbol is not bound";
29
- const r = nodeSymbol.references;
30
- const refs = r ? [nodeSymbol.firstMention, ...r] : [nodeSymbol.firstMention];
31
- const ranges = (0, util_js_1.syntaxNodesToRanges)(doc, sourceFile, refs);
32
- const uri = doc.uri;
33
- const res = {
34
- changes: {
35
- [uri]: ranges.map(r => vscode_languageserver_types_1.TextEdit.replace(r, newName)),
36
- },
37
- };
38
- return res;
39
- }
40
- debugger;
41
- return undefined;
42
- }
43
- function isRenameableNode(node) {
44
- return (node.kind === types_js_1.SyntaxKind.NodeId ||
45
- node.kind === types_js_1.SyntaxKind.DirectedGraph ||
46
- node.kind === types_js_1.SyntaxKind.UndirectedGraph);
47
- }
48
- function isRenamableIdentifier(node) {
49
- return node.kind !== types_js_1.SyntaxKind.QuotedTextIdentifier;
50
- }
51
- //# sourceMappingURL=rename.js.map
@@ -1,28 +0,0 @@
1
- import type { TextDocument } from "vscode-languageserver-textdocument";
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
- export interface DocumentLike {
6
- positionAt(offset: number): lst.Position;
7
- offsetAt(position: lst.Position): number;
8
- readonly uri: string;
9
- }
10
- export interface CommandApplication {
11
- label?: string;
12
- edit: lst.WorkspaceEdit;
13
- }
14
- export interface LanguageService {
15
- parseDocument(doc: TextDocument | string): SourceFile;
16
- validateDocument(doc: DocumentLike, sourceFile: SourceFile): lst.Diagnostic[];
17
- hover(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position): lst.Hover | undefined;
18
- findReferences(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position, context: lst.ReferenceContext): lst.Location[];
19
- findDefinition(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position): lst.Location | undefined;
20
- renameSymbol(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position, newName: string): lst.WorkspaceEdit | undefined;
21
- getCompletions(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position): lst.CompletionItem[];
22
- getDocumentColors(doc: DocumentLike, sourceFile: SourceFile): ColorInformation[] | undefined;
23
- getColorRepresentations(doc: DocumentLike, sourceFile: SourceFile, color: Color, range: lst.Range): ColorPresentation[] | undefined;
24
- getCodeActions(doc: DocumentLike, sourceFile: SourceFile, range: lst.Range, context: lst.CodeActionContext): lst.Command[] | undefined;
25
- executeCommand(doc: DocumentLike, sourceFile: SourceFile, command: Omit<lst.Command, "title">): CommandApplication | undefined;
26
- getAvailableCommands(): string[];
27
- }
28
- export declare function createService(): LanguageService;
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createService = createService;
4
- const binder_js_1 = require("../binder.js");
5
- const checker_js_1 = require("../checker.js");
6
- const index_js_1 = require("../index.js");
7
- const codeAction_js_1 = require("./codeAction.js");
8
- const colorProvider_js_1 = require("./colorProvider.js");
9
- const completion_js_1 = require("./completion.js");
10
- const hover_js_1 = require("./hover.js");
11
- const reference_js_1 = require("./reference.js");
12
- const rename_js_1 = require("./rename.js");
13
- const validation_js_1 = require("./validation.js");
14
- function parseDocument(doc) {
15
- const parser = new index_js_1.Parser();
16
- const content = typeof doc === "string" ? doc : doc.getText();
17
- const sourceFile = parser.parse(content);
18
- (0, binder_js_1.bindSourceFile)(sourceFile);
19
- (0, checker_js_1.checkSourceFile)(sourceFile);
20
- return sourceFile;
21
- }
22
- function createService() {
23
- return {
24
- parseDocument,
25
- validateDocument: validation_js_1.validateDocument,
26
- hover: hover_js_1.hover,
27
- findReferences: reference_js_1.findReferences,
28
- findDefinition: reference_js_1.findDefinition,
29
- renameSymbol: rename_js_1.renameSymbol,
30
- getCompletions: completion_js_1.getCompletions,
31
- getDocumentColors: colorProvider_js_1.getDocumentColors,
32
- getColorRepresentations: colorProvider_js_1.getColorRepresentations,
33
- getCodeActions: codeAction_js_1.getCodeActions,
34
- executeCommand: codeAction_js_1.executeCommand,
35
- getAvailableCommands: codeAction_js_1.getAvailableCommands,
36
- };
37
- }
38
- //# sourceMappingURL=service.js.map
@@ -1,11 +0,0 @@
1
- import type { Range } from "vscode-languageserver-types";
2
- import type { DocumentLike } from "../index.js";
3
- import { type SourceFile, type SyntaxNode } from "../types.js";
4
- export declare function getStart(sourceFile: SourceFile, node: SyntaxNode): number;
5
- export declare function syntaxNodesToRanges(doc: DocumentLike, sourceFile: SourceFile, nodes: SyntaxNode[]): Range[];
6
- export declare function syntaxNodeToRange(doc: DocumentLike, sourceFile: SourceFile, node: SyntaxNode): {
7
- start: import("vscode-languageserver-types").Position;
8
- end: import("vscode-languageserver-types").Position;
9
- };
10
- export declare function escapeIdentifierText(text: string): string;
11
- export declare function assertNever(v: never): never;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStart = getStart;
4
- exports.syntaxNodesToRanges = syntaxNodesToRanges;
5
- exports.syntaxNodeToRange = syntaxNodeToRange;
6
- exports.escapeIdentifierText = escapeIdentifierText;
7
- exports.assertNever = assertNever;
8
- const scanner_js_1 = require("../scanner.js");
9
- const types_js_1 = require("../types.js");
10
- function getStart(sourceFile, node) {
11
- return getTokenPosOfNode(sourceFile, node);
12
- }
13
- function getTokenPosOfNode(sourceFile, node) {
14
- if (nodeIsMissing(node))
15
- return node.pos;
16
- return (0, scanner_js_1.skipTrivia)(sourceFile.content, node.pos);
17
- }
18
- function nodeIsMissing(node) {
19
- return node === undefined
20
- ? true
21
- : node.pos === node.end && node.pos >= 0 && node.kind !== types_js_1.SyntaxKind.EndOfFileToken;
22
- }
23
- function syntaxNodesToRanges(doc, sourceFile, nodes) {
24
- return nodes.map(node => syntaxNodeToRange(doc, sourceFile, node));
25
- }
26
- function syntaxNodeToRange(doc, sourceFile, node) {
27
- const start = getStart(sourceFile, node);
28
- return {
29
- start: doc.positionAt(start),
30
- end: doc.positionAt(node.end),
31
- };
32
- }
33
- function escapeIdentifierText(text) {
34
- if (text === "")
35
- return quote("");
36
- if (text.includes('"') || text.includes("\n")) {
37
- const esc = text.replace(/"/, '\\"').replace(/\n/, "\\\n");
38
- return quote(esc);
39
- }
40
- const ch = text.charCodeAt(0);
41
- if (!(0, scanner_js_1.isIdentifierStart)(ch) || text.includes(" "))
42
- return quote(text);
43
- return text;
44
- }
45
- const quote = (s) => `"${s}"`;
46
- function assertNever(v) {
47
- throw new Error(`Should not have reached this. Value: ${v !== null && v !== void 0 ? v : ""}`);
48
- }
49
- //# sourceMappingURL=util.js.map
@@ -1,4 +0,0 @@
1
- import type * as lst from "vscode-languageserver-types";
2
- import type { DocumentLike } from "../index.js";
3
- import type { SourceFile } from "../types.js";
4
- export declare function validateDocument(doc: DocumentLike, sourceFile: SourceFile): lst.Diagnostic[];
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateDocument = validateDocument;
4
- const error_js_1 = require("../error.js");
5
- function convertDiagnostic(document, source) {
6
- return {
7
- range: {
8
- start: document.positionAt(source.start),
9
- end: document.positionAt(source.end),
10
- },
11
- severity: source.category,
12
- code: (0, error_js_1.formatError)(source.code),
13
- source: error_js_1.diagnosicSource,
14
- message: source.message,
15
- };
16
- }
17
- function validateDocument(doc, sourceFile) {
18
- const diagnostics = sourceFile.diagnostics;
19
- if (!diagnostics || diagnostics.length <= 0)
20
- return [];
21
- return diagnostics.map(d => convertDiagnostic(doc, d));
22
- }
23
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- export {};
package/lib/cjs/tester.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
4
- const binder_js_1 = require("./binder.js");
5
- const checker_js_1 = require("./checker.js");
6
- const parser_js_1 = require("./parser.js");
7
- const completion_js_1 = require("./service/completion.js");
8
- const text = `graph {
9
- node_name_a -- node_name_b [color=blue,
10
- ];
11
- }`;
12
- function main() {
13
- const parser = new parser_js_1.Parser();
14
- const sf = parser.parse(text);
15
- (0, binder_js_1.bindSourceFile)(sf);
16
- (0, checker_js_1.checkSourceFile)(sf);
17
- const doc = vscode_languageserver_textdocument_1.TextDocument.create("inmemory://model.json", "DOT", 0, text);
18
- const requestOffset = text.indexOf("color=blue,\n\t") + "color=blue,\n\t".length;
19
- const completions = (0, completion_js_1.getCompletions)(doc, sf, doc.positionAt(requestOffset));
20
- console.dir(completions);
21
- }
22
- main();
23
- //# sourceMappingURL=tester.js.map