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,207 +0,0 @@
1
- import { edgeStatementHasAttributes, findAllEdges, findNodeAtOffset, getAllowedEdgeOperation, getIdentifierText, isAttrStatement, isEdgeStatement, isNodeId, nodeContainsErrors, } from "../checker.js";
2
- import { forEachChild, isIdentifierNode, SyntaxKind, } from "../index.js";
3
- import * as ChangeAllOtherEdgeOpsAndFixGraphCommand from "./command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js";
4
- import * as ChangeEdgeOpCommand from "./command/ChangeEdgeOpCommand.js";
5
- import * as ConsolidateDescendantsCommand from "./command/ConsolidateDescendantsCommand.js";
6
- import { getAllowedOp, getOppositeEdgeOp, getOppositeKind, } from "./command/common.js";
7
- import * as RemoveSemicolonsCommand from "./command/RemoveSemicolons.js";
8
- import { assertNever, getStart } from "./util.js";
9
- export function getCodeActions(doc, sourceFile, range, _context) {
10
- let actions = getActionsFromDiagnostics(doc, sourceFile, range);
11
- const general = getGeneralRefactorings(doc, sourceFile, range);
12
- if (general) {
13
- if (!actions)
14
- actions = general;
15
- else
16
- actions.push.apply(actions, general);
17
- }
18
- return actions;
19
- }
20
- function getActionsFromDiagnostics(doc, file, range) {
21
- const ds = file.diagnostics;
22
- if (!ds || ds.length === 0)
23
- return undefined;
24
- const rangeStartOffset = doc.offsetAt(range.start);
25
- const rangeEndOffset = doc.offsetAt(range.end);
26
- const res = [];
27
- for (const d of ds) {
28
- if (isInRange(rangeStartOffset, rangeEndOffset, d.start, d.end)) {
29
- const commands = getCommandsForDiagnostic(doc, file, d);
30
- if (commands && commands.length > 0)
31
- res.push.apply(res, commands);
32
- }
33
- }
34
- return res.length === 0 ? undefined : res;
35
- }
36
- function getGeneralRefactorings(doc, file, range) {
37
- if (!file.graph)
38
- return undefined;
39
- const g = file.graph;
40
- const kw = g.keyword;
41
- const rangeStartOffset = doc.offsetAt(range.start);
42
- const rangeEndOffset = doc.offsetAt(range.end);
43
- const keywordStart = getStart(file, kw);
44
- const res = [];
45
- if (isInRange(rangeStartOffset, rangeEndOffset, keywordStart, kw.end)) {
46
- if (!subtreeContainsErrors(g)) {
47
- const oppositeGraphType = getOppositeKind(kw.kind);
48
- const convertGraph = convertGraphTypeCommand(file, g, oppositeGraphType);
49
- res.push(convertGraph);
50
- }
51
- }
52
- if (rangeStartOffset === rangeEndOffset) {
53
- const candidates = [];
54
- let clickedNode = findNodeAtOffset(g, rangeStartOffset);
55
- if (clickedNode && !!clickedNode.parent) {
56
- if (clickedNode.kind === SyntaxKind.SemicolonToken) {
57
- res.push(RemoveSemicolonsCommand.create());
58
- }
59
- if (isIdentifierNode(clickedNode)) {
60
- clickedNode = clickedNode.parent;
61
- }
62
- const clickedEdgeStatement = clickedNode.parent;
63
- if (clickedEdgeStatement && !subtreeContainsErrors(clickedEdgeStatement)) {
64
- if (isEdgeStatement(clickedEdgeStatement) &&
65
- clickedEdgeStatement.rhs.length === 1 &&
66
- isNodeId(clickedEdgeStatement.source) &&
67
- !edgeStatementHasAttributes(clickedEdgeStatement)) {
68
- candidates.push(clickedEdgeStatement);
69
- const source = clickedEdgeStatement.source;
70
- const sourceText = getIdentifierText(source.id);
71
- const graphParent = clickedEdgeStatement.parent;
72
- if (graphParent) {
73
- let hasVisitedStatement = false;
74
- let hasVisitedNodeModifier = false;
75
- forEachChild(graphParent, statement => {
76
- if (statement === clickedEdgeStatement) {
77
- hasVisitedStatement = true;
78
- return undefined;
79
- }
80
- if (hasVisitedNodeModifier) {
81
- return;
82
- }
83
- if (hasVisitedStatement) {
84
- if (isAttrStatement(statement) ||
85
- subtreeContainsErrors(statement)) {
86
- hasVisitedNodeModifier = true;
87
- return true;
88
- }
89
- }
90
- if (hasVisitedStatement) {
91
- if (isEdgeStatement(statement) &&
92
- statement.rhs.length === 1 &&
93
- !edgeStatementHasAttributes(statement)) {
94
- const statementSource = statement.source;
95
- if (isNodeId(statementSource)) {
96
- const lowerSourceText = getIdentifierText(statementSource.id);
97
- if (sourceText === lowerSourceText) {
98
- candidates.push(statement);
99
- }
100
- }
101
- }
102
- }
103
- return undefined;
104
- });
105
- }
106
- }
107
- if (candidates.length > 1) {
108
- const action = ConsolidateDescendantsCommand.create(candidates, true);
109
- res.push(action);
110
- }
111
- }
112
- }
113
- }
114
- return res.length === 0 ? undefined : res;
115
- }
116
- function getCommandsForDiagnostic(doc, file, d) {
117
- switch (d.code.source) {
118
- case 1:
119
- return getScannerErrorCommand(doc, file, d, d.code);
120
- case 2:
121
- return getParserErrorCommand(doc, file, d, d.code);
122
- case 4:
123
- return getCheckerErrorCommand(doc, file, d, d.code);
124
- default:
125
- return assertNever(d.code);
126
- }
127
- }
128
- function getScannerErrorCommand(_doc, _file, d, code) {
129
- console.assert(d.code.source === 1);
130
- console.assert(code.source === 1);
131
- return undefined;
132
- }
133
- function getParserErrorCommand(_doc, _file, d, code) {
134
- console.assert(d.code.source === 2);
135
- console.assert(code.source === 2);
136
- return undefined;
137
- }
138
- function getCheckerErrorCommand(_doc, file, d, code) {
139
- console.assert(d.code.source === 4);
140
- console.assert(code.source === 4);
141
- switch (code.sub) {
142
- case 0: {
143
- const graph = file.graph;
144
- if (!graph)
145
- return undefined;
146
- const allowedOp = getAllowedEdgeOperation(graph);
147
- const wrongOp = getOppositeEdgeOp(allowedOp);
148
- const kwk = graph.keyword.kind;
149
- const fixSingleEdge = ChangeEdgeOpCommand.create(d.start, d.end, allowedOp, wrongOp);
150
- const fixAll = convertGraphTypeCommand(file, graph, kwk);
151
- const convertToThisWrongType = convertGraphTypeCommand(file, graph, getOppositeKind(kwk));
152
- return [fixSingleEdge, fixAll, convertToThisWrongType];
153
- }
154
- case 1:
155
- return undefined;
156
- }
157
- }
158
- function convertGraphTypeCommand(file, graph, changeToGraphType) {
159
- const changeToEdgeOp = getAllowedOp(changeToGraphType);
160
- const allEdges = findAllEdges(graph);
161
- const edgeOffsets = allEdges
162
- .filter(e => e.operation.kind !== changeToEdgeOp)
163
- .map(e => ({
164
- start: getStart(file, e.operation),
165
- end: e.operation.end,
166
- }));
167
- const graphTypeOffset = {
168
- start: getStart(file, graph.keyword),
169
- end: graph.keyword.end,
170
- };
171
- return ChangeAllOtherEdgeOpsAndFixGraphCommand.create(edgeOffsets, changeToEdgeOp, graphTypeOffset, graph.keyword.kind, changeToGraphType);
172
- }
173
- function isInRange(rangeStartOffset, rangeEndOffset, startOffset, endOffset) {
174
- if (rangeStartOffset === rangeEndOffset)
175
- return startOffset <= rangeStartOffset && rangeEndOffset <= endOffset;
176
- if (rangeStartOffset === startOffset && rangeEndOffset === endOffset)
177
- return true;
178
- return false;
179
- }
180
- const commandHandlers = {
181
- ["DOT.changeEdgeOp"]: ChangeEdgeOpCommand.execute,
182
- ["DOT.convertGraphType"]: ChangeAllOtherEdgeOpsAndFixGraphCommand.execute,
183
- ["DOT.consolidateDescendants"]: ConsolidateDescendantsCommand.execute,
184
- ["DOT.removeSemicolons"]: RemoveSemicolonsCommand.execute,
185
- };
186
- export function getAvailableCommands() {
187
- return Object.keys(commandHandlers);
188
- }
189
- export function executeCommand(doc, sourceFile, cmd) {
190
- const handler = commandHandlers[cmd.command];
191
- return handler === undefined ? undefined : handler(doc, sourceFile, cmd);
192
- }
193
- function subtreeContainsErrors(node) {
194
- if (nodeContainsErrors(node))
195
- return true;
196
- let hasError = false;
197
- forEachChild(node, child => {
198
- if (nodeContainsErrors(child)) {
199
- hasError = true;
200
- }
201
- if (!hasError) {
202
- hasError = subtreeContainsErrors(child);
203
- }
204
- });
205
- return hasError;
206
- }
207
- //# sourceMappingURL=codeAction.js.map
@@ -1,5 +0,0 @@
1
- import type { Color, ColorInformation, ColorPresentation, Range } from "vscode-languageserver-types";
2
- import type { DocumentLike } from "../index.js";
3
- import type { SourceFile } from "../types.js";
4
- export declare function getDocumentColors(doc: DocumentLike, sourceFile: SourceFile): ColorInformation[] | undefined;
5
- export declare function getColorRepresentations(_doc: DocumentLike, _sourceFile: SourceFile, color: Color, range: Range): ColorPresentation[] | undefined;
@@ -1,54 +0,0 @@
1
- import * as languageFacts from "./languageFacts.js";
2
- import { syntaxNodeToRange } from "./util.js";
3
- const colorMap = languageFacts.colors;
4
- export function getDocumentColors(doc, sourceFile) {
5
- const cs = sourceFile.colors;
6
- return cs ? colorTableToColorInformation(doc, sourceFile, cs) : undefined;
7
- }
8
- export function getColorRepresentations(_doc, _sourceFile, color, range) {
9
- return !color || !range ? undefined : [{ label: `"${getColorStringFromColor(color)}"` }];
10
- }
11
- function colorTableToColorInformation(doc, sf, colors) {
12
- if (!colors || colors.size === 0)
13
- return [];
14
- const res = [];
15
- for (const [name, value] of colors) {
16
- if (!name || !value)
17
- continue;
18
- const color = getColorFromName(name);
19
- if (color) {
20
- res.push({
21
- range: syntaxNodeToRange(doc, sf, value.node),
22
- color,
23
- });
24
- }
25
- }
26
- return res;
27
- }
28
- function getColorFromName(name) {
29
- if (name.charAt(0) === "#")
30
- return getHexCodeColor(name);
31
- const colorAlias = colorMap[name.toLowerCase()];
32
- return colorAlias ? getHexCodeColor(colorAlias) : undefined;
33
- }
34
- function getHexCodeColor(colorCode) {
35
- const hexCode = colorCode.charAt(0) === "#" ? colorCode.substring(1) : colorCode;
36
- const colorInt = Number.parseInt(hexCode, 16);
37
- return {
38
- red: ((colorInt >> 16) & 0xff) / 255.0,
39
- green: ((colorInt >> 8) & 0xff) / 255.0,
40
- blue: (colorInt & 0xff) / 255.0,
41
- alpha: hexCode.length === 8 ? ((colorInt >> 24) & 0xff) / 255.0 : 1.0,
42
- };
43
- }
44
- function getColorStringFromColor(c) {
45
- const red = (c.red * 255) | 0;
46
- const green = (c.green * 255) | 0;
47
- const blue = (c.blue * 255) | 0;
48
- return `#${numberToPaddedString(red)}${numberToPaddedString(green)}${numberToPaddedString(blue)}`;
49
- }
50
- function numberToPaddedString(n) {
51
- const s = n.toString(16);
52
- return (s.length === 1 ? `0${s}` : s).toLowerCase();
53
- }
54
- //# sourceMappingURL=colorProvider.js.map
@@ -1,10 +0,0 @@
1
- import type * as lst from "vscode-languageserver-types";
2
- import type { CommandApplication, DocumentLike, SourceFile } from "../../index.js";
3
- import { CommandIds } from "../codeAction.js";
4
- import { type EdgeOpStr, type EdgeType, type ExecutableCommand, type GraphType, type GraphTypeStr, type Offset } from "./common.js";
5
- export interface ChangeAllOtherEdgeOpsAndFixGraphCommand extends lst.Command {
6
- command: CommandIds.ConvertGraphType;
7
- arguments: [Offset[], EdgeOpStr, Offset, GraphTypeStr];
8
- }
9
- export declare function create(edgeOffsets: Offset[], changeEdgesTo: EdgeType, graphOffset: Offset, changeFromGraph: GraphType, changeGraphTo: GraphType): ChangeAllOtherEdgeOpsAndFixGraphCommand;
10
- export declare function execute(doc: DocumentLike, _sourceFile: SourceFile, cmd: ExecutableCommand<unknown[]>): CommandApplication | undefined;
@@ -1,38 +0,0 @@
1
- import { createChangeToEdit, getEdgeStr, getGraphKeywordStr, } from "./common.js";
2
- export function create(edgeOffsets, changeEdgesTo, graphOffset, changeFromGraph, changeGraphTo) {
3
- const toGraph = getGraphKeywordStr(changeGraphTo);
4
- const title = changeGraphTo === changeFromGraph
5
- ? `Fix all edges to match ${toGraph}`
6
- : `Convert ${getGraphKeywordStr(changeFromGraph)} to ${toGraph}`;
7
- const edgeStr = getEdgeStr(changeEdgesTo);
8
- return {
9
- title,
10
- command: "DOT.convertGraphType",
11
- arguments: [edgeOffsets, edgeStr, graphOffset, toGraph],
12
- };
13
- }
14
- export function execute(doc, _sourceFile, cmd) {
15
- if (!isChangeAllOtherEdgeOpsAndFixGraphCommand(cmd))
16
- return undefined;
17
- const [edgeOffsets, changeEdgeTo, graphOffset, changeGraphTo] = cmd.arguments;
18
- const edits = edgeOffsets.map(o => {
19
- const startPos = doc.positionAt(o.start);
20
- const endPos = doc.positionAt(o.end);
21
- return createChangeToEdit(startPos, endPos, changeEdgeTo);
22
- });
23
- const graphStart = doc.positionAt(graphOffset.start);
24
- const graphEnd = doc.positionAt(graphOffset.end);
25
- edits.push(createChangeToEdit(graphStart, graphEnd, changeGraphTo));
26
- return {
27
- label: `Convert graph to "${changeGraphTo}"`,
28
- edit: {
29
- changes: {
30
- [doc.uri]: edits,
31
- },
32
- },
33
- };
34
- }
35
- function isChangeAllOtherEdgeOpsAndFixGraphCommand(cmd) {
36
- return (cmd.command === "DOT.convertGraphType" && !!cmd.arguments && cmd.arguments.length === 4);
37
- }
38
- //# sourceMappingURL=ChangeAllOtherEdgeOpsAndFixGraphCommand.js.map
@@ -1,10 +0,0 @@
1
- import * as lst from "vscode-languageserver-types";
2
- import type { CommandApplication, DocumentLike, SourceFile } from "../../index.js";
3
- import { CommandIds } from "../codeAction.js";
4
- import { type EdgeOpStr, type EdgeType, type ExecutableCommand } from "./common.js";
5
- export interface ChangeEdgeOpCommand extends lst.Command {
6
- command: CommandIds.ChangeEdgeOp;
7
- arguments: [number, number, EdgeOpStr];
8
- }
9
- export declare function create(startOffset: number, endOffset: number, changeTo: EdgeType, changeFrom: EdgeType): ChangeEdgeOpCommand;
10
- export declare function execute(doc: DocumentLike, _sourceFile: SourceFile, cmd: ExecutableCommand<unknown[]>): CommandApplication | undefined;
@@ -1,30 +0,0 @@
1
- import * as lst from "vscode-languageserver-types";
2
- import { getEdgeStr } from "./common.js";
3
- export function create(startOffset, endOffset, changeTo, changeFrom) {
4
- const from = getEdgeStr(changeFrom);
5
- const to = getEdgeStr(changeTo);
6
- return {
7
- title: `Change "${from}" to "${to}".`,
8
- command: "DOT.changeEdgeOp",
9
- arguments: [startOffset, endOffset, to],
10
- };
11
- }
12
- export function execute(doc, _sourceFile, cmd) {
13
- if (!isChangeEdgeOpCommand(cmd))
14
- return undefined;
15
- const [startOffset, endOffset, changeTo] = cmd.arguments;
16
- const startPos = doc.positionAt(startOffset);
17
- const endPos = doc.positionAt(endOffset);
18
- return {
19
- label: `Change of invalid edge to "${changeTo}"'"`,
20
- edit: {
21
- changes: {
22
- [doc.uri]: [lst.TextEdit.replace(lst.Range.create(startPos, endPos), changeTo)],
23
- },
24
- },
25
- };
26
- }
27
- function isChangeEdgeOpCommand(cmd) {
28
- return cmd.command === "DOT.changeEdgeOp" && !!cmd.arguments && cmd.arguments.length === 3;
29
- }
30
- //# sourceMappingURL=ChangeEdgeOpCommand.js.map
@@ -1,10 +0,0 @@
1
- import type * as lst from "vscode-languageserver-types";
2
- import type { CommandApplication, DocumentLike, EdgeStatement, SourceFile } from "../../index.js";
3
- import { CommandIds } from "../codeAction.js";
4
- import type { ExecutableCommand } from "./common.js";
5
- export interface ConsolidateDescendantsCommand extends lst.Command {
6
- command: CommandIds.ConsolidateDescendants;
7
- arguments: number[];
8
- }
9
- export declare function create(statements: EdgeStatement[], below: boolean): ConsolidateDescendantsCommand;
10
- export declare function execute(doc: DocumentLike, sourceFile: SourceFile, cmd: ExecutableCommand<unknown[]>): CommandApplication | undefined;
@@ -1,83 +0,0 @@
1
- import { findNodeAtOffset, getIdentifierText } from "../../checker.js";
2
- import { getStart } from "../util.js";
3
- export function create(statements, below) {
4
- const first = statements[0];
5
- const from = getIdentifierText(first.source.id);
6
- const title = below
7
- ? `Convert edges below from "${from}" to subgraph`
8
- : `Convert edges from "${from}" to subgraph`;
9
- return {
10
- title,
11
- command: "DOT.consolidateDescendants",
12
- arguments: statements.map(s => s.pos),
13
- };
14
- }
15
- export function execute(doc, sourceFile, cmd) {
16
- if (!isConsolidateDescendantsCommand(cmd))
17
- return undefined;
18
- const g = sourceFile.graph;
19
- if (!g)
20
- return undefined;
21
- const candidateIndexes = cmd.arguments;
22
- const candidates = candidateIndexes.map(i => findNodeAtOffset(g, i).parent.parent);
23
- const first = candidates.shift();
24
- const from = getIdentifierText(first.source.id);
25
- const edits = [];
26
- const firstRight = first.rhs[0];
27
- const firstRightTargetStart = getStart(sourceFile, firstRight.target);
28
- const firstRightTargetEnd = firstRight.target.end;
29
- const contents = [sourceFile.content.substring(firstRightTargetStart, firstRightTargetEnd)];
30
- for (const descendant of candidates) {
31
- const rightItem = descendant.rhs[0];
32
- const rightItemTarget = rightItem.target;
33
- const rightItemTargetStart = rightItemTarget.pos;
34
- const rightItemTargetEnd = rightItem.target.end;
35
- const rightItemContent = sourceFile.content.substring(rightItemTargetStart, rightItemTargetEnd);
36
- edits.push({
37
- newText: "",
38
- range: {
39
- start: doc.positionAt(descendant.pos),
40
- end: doc.positionAt(rightItemTargetStart),
41
- },
42
- });
43
- edits.push({
44
- newText: "",
45
- range: {
46
- start: doc.positionAt(rightItemTargetStart),
47
- end: doc.positionAt(rightItemTargetEnd),
48
- },
49
- });
50
- if (descendant.terminator !== undefined) {
51
- edits.push({
52
- newText: "",
53
- range: {
54
- start: doc.positionAt(getStart(sourceFile, descendant.terminator)),
55
- end: doc.positionAt(descendant.terminator.end),
56
- },
57
- });
58
- }
59
- contents.push(rightItemContent);
60
- }
61
- const toInsert = `{ ${contents.map(s => s.trim()).join(" ")} }`;
62
- edits.push({
63
- newText: toInsert,
64
- range: {
65
- start: doc.positionAt(firstRightTargetStart),
66
- end: doc.positionAt(firstRightTargetEnd),
67
- },
68
- });
69
- return {
70
- label: `Convert edges from "${from}" to subgraph.`,
71
- edit: {
72
- changes: {
73
- [doc.uri]: edits,
74
- },
75
- },
76
- };
77
- }
78
- function isConsolidateDescendantsCommand(cmd) {
79
- return (cmd.command === "DOT.consolidateDescendants" &&
80
- !!cmd.arguments &&
81
- cmd.arguments.length > 1);
82
- }
83
- //# sourceMappingURL=ConsolidateDescendantsCommand.js.map
@@ -1,10 +0,0 @@
1
- import type * as lst from "vscode-languageserver-types";
2
- import type { CommandApplication, DocumentLike, SourceFile } from "../../index.js";
3
- import { CommandIds } from "../codeAction.js";
4
- import { type ExecutableCommand } from "./common.js";
5
- export interface RemoveSemicolonsCommand extends lst.Command {
6
- command: CommandIds.RemoveSemicolons;
7
- arguments: undefined;
8
- }
9
- export declare function create(): RemoveSemicolonsCommand;
10
- export declare function execute(doc: DocumentLike, sourceFile: SourceFile, cmd: ExecutableCommand<unknown[]>): CommandApplication | undefined;
@@ -1,35 +0,0 @@
1
- import { findOptionalSemicolons } from "../../checker.js";
2
- import { createChangeToEdit } from "./common.js";
3
- export function create() {
4
- return {
5
- title: "Remove optional semicolons",
6
- command: "DOT.removeSemicolons",
7
- arguments: undefined,
8
- };
9
- }
10
- export function execute(doc, sourceFile, cmd) {
11
- if (!isRemoveSemicolonsCommand(cmd))
12
- return undefined;
13
- const g = sourceFile.graph;
14
- if (!g)
15
- return undefined;
16
- const semicolons = findOptionalSemicolons(g);
17
- const edits = semicolons.map(s => {
18
- const end = s.end;
19
- const start = end - 1;
20
- return createChangeToEdit(doc.positionAt(start), doc.positionAt(end), "");
21
- });
22
- return {
23
- label: "Remove optional semicolons",
24
- edit: {
25
- changes: {
26
- [doc.uri]: edits,
27
- },
28
- },
29
- };
30
- }
31
- function isRemoveSemicolonsCommand(cmd) {
32
- return (cmd.command === "DOT.removeSemicolons" &&
33
- (!cmd.arguments || cmd.arguments.length === 0 || cmd.arguments.every(e => e === undefined)));
34
- }
35
- //# sourceMappingURL=RemoveSemicolons.js.map
@@ -1,31 +0,0 @@
1
- import { type Position, TextEdit } from "vscode-languageserver-types";
2
- import { SyntaxKind } from "../../index.js";
3
- import type { CommandIds } from "../codeAction.js";
4
- export declare function createChangeToEdit(start: Position, end: Position, changeTo: string): TextEdit;
5
- export interface Offset {
6
- start: number;
7
- end: number;
8
- }
9
- export type ExecutableCommand<TArgs> = {
10
- command: CommandIds;
11
- arguments?: TArgs;
12
- };
13
- export type EdgeOpStr = "--" | "->";
14
- export declare function getEdgeStr(op: SyntaxKind.UndirectedEdgeOp): "--";
15
- export declare function getEdgeStr(op: SyntaxKind.DirectedEdgeOp): "->";
16
- export declare function getEdgeStr(op: SyntaxKind.DirectedEdgeOp | SyntaxKind.UndirectedEdgeOp): "->" | "--";
17
- export type GraphTypeStr = "graph" | "digraph";
18
- export declare function getGraphKeywordStr(g: SyntaxKind.GraphKeyword): "graph";
19
- export declare function getGraphKeywordStr(g: SyntaxKind.DigraphKeyword): "digraph";
20
- export declare function getGraphKeywordStr(g: GraphType): "digraph" | "graph";
21
- export type GraphType = SyntaxKind.DigraphKeyword | SyntaxKind.GraphKeyword;
22
- export declare function getOppositeKind(g: SyntaxKind.DigraphKeyword): SyntaxKind.GraphKeyword;
23
- export declare function getOppositeKind(g: SyntaxKind.GraphKeyword): SyntaxKind.DigraphKeyword;
24
- export declare function getOppositeKind(g: GraphType): GraphType;
25
- export type EdgeType = SyntaxKind.DirectedEdgeOp | SyntaxKind.UndirectedEdgeOp;
26
- export declare function getOppositeEdgeOp(g: SyntaxKind.DirectedEdgeOp): SyntaxKind.UndirectedEdgeOp;
27
- export declare function getOppositeEdgeOp(g: SyntaxKind.UndirectedEdgeOp): SyntaxKind.DirectedEdgeOp;
28
- export declare function getOppositeEdgeOp(g: EdgeType): EdgeType;
29
- export declare function getAllowedOp(g: SyntaxKind.GraphKeyword): SyntaxKind.UndirectedEdgeOp;
30
- export declare function getAllowedOp(g: SyntaxKind.DigraphKeyword): SyntaxKind.DirectedEdgeOp;
31
- export declare function getAllowedOp(g: GraphType): EdgeType;
@@ -1,25 +0,0 @@
1
- import { Range, TextEdit } from "vscode-languageserver-types";
2
- import { SyntaxKind } from "../../index.js";
3
- export function createChangeToEdit(start, end, changeTo) {
4
- return TextEdit.replace(Range.create(start, end), changeTo);
5
- }
6
- export function getEdgeStr(op) {
7
- return op === SyntaxKind.DirectedEdgeOp ? "->" : "--";
8
- }
9
- export function getGraphKeywordStr(g) {
10
- return g === SyntaxKind.DigraphKeyword ? "digraph" : "graph";
11
- }
12
- export function getOppositeKind(g) {
13
- return g === SyntaxKind.DigraphKeyword ? SyntaxKind.GraphKeyword : SyntaxKind.DigraphKeyword;
14
- }
15
- export function getOppositeEdgeOp(g) {
16
- return g === SyntaxKind.DirectedEdgeOp
17
- ? SyntaxKind.UndirectedEdgeOp
18
- : SyntaxKind.DirectedEdgeOp;
19
- }
20
- export function getAllowedOp(g) {
21
- return g === SyntaxKind.DigraphKeyword
22
- ? SyntaxKind.DirectedEdgeOp
23
- : SyntaxKind.UndirectedEdgeOp;
24
- }
25
- //# sourceMappingURL=common.js.map
@@ -1,4 +0,0 @@
1
- import * as lst from "vscode-languageserver-types";
2
- import { type DocumentLike } from "../index.js";
3
- import { type SourceFile } from "../types.js";
4
- export declare function getCompletions(doc: DocumentLike, sourceFile: SourceFile, position: lst.Position): lst.CompletionItem[];