dot-language-support 1.6.1 → 2.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.
- package/.github/workflows/CD.yml +3 -3
- package/.github/workflows/CI.yml +2 -2
- package/README.md +5 -4
- package/jest.config.mjs +19 -0
- package/lib/{binder.d.ts → cjs/binder.d.ts} +1 -1
- package/lib/{binder.js → cjs/binder.js} +34 -34
- package/lib/{checker.d.ts → cjs/checker.d.ts} +1 -1
- package/lib/{checker.js → cjs/checker.js} +28 -28
- package/lib/{core.d.ts → cjs/core.d.ts} +0 -0
- package/lib/{core.js → cjs/core.js} +0 -0
- package/lib/{error.d.ts → cjs/error.d.ts} +1 -1
- package/lib/{error.js → cjs/error.js} +0 -0
- package/lib/cjs/index.d.ts +5 -0
- package/lib/{index.js → cjs/index.js} +5 -6
- package/lib/{parser.d.ts → cjs/parser.d.ts} +2 -2
- package/lib/{parser.js → cjs/parser.js} +14 -12
- package/lib/{scanner.d.ts → cjs/scanner.d.ts} +1 -1
- package/lib/{scanner.js → cjs/scanner.js} +67 -67
- package/lib/{service → cjs/service}/codeAction.d.ts +4 -4
- package/lib/cjs/service/codeAction.js +237 -0
- package/lib/cjs/service/colorProvider.d.ts +6 -0
- package/lib/cjs/service/colorProvider.js +97 -0
- package/lib/{service → cjs/service}/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +4 -4
- package/lib/{service → cjs/service}/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +7 -7
- package/lib/{service → cjs/service}/command/ChangeEdgeOpCommand.d.ts +4 -4
- package/lib/cjs/service/command/ChangeEdgeOpCommand.js +60 -0
- package/lib/{service → cjs/service}/command/ConsolidateDescendantsCommand.d.ts +3 -3
- package/lib/{service → cjs/service}/command/ConsolidateDescendantsCommand.js +7 -25
- package/lib/{service → cjs/service}/command/RemoveSemicolons.d.ts +3 -3
- package/lib/{service → cjs/service}/command/RemoveSemicolons.js +4 -4
- package/lib/{service → cjs/service}/command/common.d.ts +4 -4
- package/lib/cjs/service/command/common.js +31 -0
- package/lib/{service → cjs/service}/completion.d.ts +2 -2
- package/lib/{service → cjs/service}/completion.js +49 -26
- package/lib/cjs/service/hover.d.ts +4 -0
- package/lib/{service → cjs/service}/hover.js +38 -38
- package/lib/{service → cjs/service}/languageFacts.d.ts +0 -0
- package/lib/{service → cjs/service}/languageFacts.js +0 -0
- package/lib/{service → cjs/service}/polyfill.d.ts +4 -4
- package/lib/{service → cjs/service}/polyfill.js +0 -0
- package/lib/cjs/service/reference.d.ts +5 -0
- package/lib/{service → cjs/service}/reference.js +9 -11
- package/lib/cjs/service/rename.d.ts +4 -0
- package/lib/{service → cjs/service}/rename.js +13 -13
- package/lib/{service → cjs/service}/service.d.ts +5 -4
- package/lib/cjs/service/service.js +39 -0
- package/lib/cjs/service/util.d.ts +11 -0
- package/lib/{service → cjs/service}/util.js +7 -7
- package/lib/{service → cjs/service}/validation.d.ts +2 -2
- package/lib/{service → cjs/service}/validation.js +3 -3
- package/lib/cjs/tester.d.ts +1 -0
- package/lib/cjs/tester.js +23 -0
- package/lib/{types.d.ts → cjs/types.d.ts} +0 -0
- package/lib/{types.js → cjs/types.js} +0 -0
- package/lib/{visitor.d.ts → cjs/visitor.d.ts} +1 -1
- package/lib/{visitor.js → cjs/visitor.js} +17 -17
- package/lib/esm/binder.d.ts +2 -0
- package/lib/esm/binder.js +296 -0
- package/lib/esm/checker.d.ts +14 -0
- package/lib/esm/checker.js +169 -0
- package/lib/esm/core.d.ts +1 -0
- package/lib/esm/core.js +10 -0
- package/lib/esm/error.d.ts +3 -0
- package/lib/esm/error.js +10 -0
- package/lib/esm/index.d.ts +5 -0
- package/lib/esm/index.js +6 -0
- package/lib/esm/parser.d.ts +84 -0
- package/lib/esm/parser.js +700 -0
- package/lib/esm/scanner.d.ts +52 -0
- package/lib/esm/scanner.js +581 -0
- package/lib/esm/service/codeAction.d.ts +12 -0
- package/lib/{service → esm/service}/codeAction.js +40 -46
- package/lib/esm/service/colorProvider.d.ts +6 -0
- package/lib/{service → esm/service}/colorProvider.js +5 -10
- package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.d.ts +10 -0
- package/lib/esm/service/command/ChangeAllOtherEdgeOpsAndFixGraphCommand.js +38 -0
- package/lib/esm/service/command/ChangeEdgeOpCommand.d.ts +10 -0
- package/lib/{service → esm/service}/command/ChangeEdgeOpCommand.js +6 -11
- package/lib/esm/service/command/ConsolidateDescendantsCommand.d.ts +10 -0
- package/lib/esm/service/command/ConsolidateDescendantsCommand.js +83 -0
- package/lib/esm/service/command/RemoveSemicolons.d.ts +10 -0
- package/lib/esm/service/command/RemoveSemicolons.js +37 -0
- package/lib/esm/service/command/common.d.ts +31 -0
- package/lib/esm/service/command/common.js +22 -0
- package/lib/esm/service/completion.d.ts +4 -0
- package/lib/esm/service/completion.js +137 -0
- package/lib/esm/service/hover.d.ts +4 -0
- package/lib/esm/service/hover.js +119 -0
- package/lib/esm/service/languageFacts.d.ts +683 -0
- package/lib/esm/service/languageFacts.js +997 -0
- package/lib/esm/service/polyfill.d.ts +16 -0
- package/lib/esm/service/polyfill.js +2 -0
- package/lib/esm/service/reference.d.ts +5 -0
- package/lib/esm/service/reference.js +66 -0
- package/lib/esm/service/rename.d.ts +4 -0
- package/lib/esm/service/rename.js +45 -0
- package/lib/esm/service/service.d.ts +28 -0
- package/lib/esm/service/service.js +35 -0
- package/lib/esm/service/util.d.ts +11 -0
- package/lib/esm/service/util.js +44 -0
- package/lib/esm/service/validation.d.ts +4 -0
- package/lib/esm/service/validation.js +20 -0
- package/lib/esm/tester.d.ts +1 -0
- package/lib/esm/tester.js +21 -0
- package/lib/esm/types.d.ts +396 -0
- package/lib/esm/types.js +71 -0
- package/lib/esm/visitor.d.ts +2 -0
- package/lib/esm/visitor.js +74 -0
- package/package.json +14 -10
- package/lib/index.d.ts +0 -6
- package/lib/service/colorProvider.d.ts +0 -6
- package/lib/service/command/common.js +0 -31
- package/lib/service/hover.d.ts +0 -4
- package/lib/service/interop.d.ts +0 -15
- package/lib/service/interop.js +0 -56
- package/lib/service/reference.d.ts +0 -5
- package/lib/service/rename.d.ts +0 -4
- package/lib/service/service.js +0 -39
- package/lib/service/util.d.ts +0 -11
package/.github/workflows/CD.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: CD
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -15,10 +15,10 @@ jobs:
|
|
|
15
15
|
steps:
|
|
16
16
|
- uses: actions/checkout@v2
|
|
17
17
|
|
|
18
|
-
- name: Use Node.js
|
|
18
|
+
- name: Use Node.js 18.x
|
|
19
19
|
uses: actions/setup-node@v1
|
|
20
20
|
with:
|
|
21
|
-
node-version:
|
|
21
|
+
node-version: 18.x
|
|
22
22
|
|
|
23
23
|
- uses: actions/cache@v2
|
|
24
24
|
with:
|
package/.github/workflows/CI.yml
CHANGED
package/README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
# dot-language-support
|
|
2
|
-
|
|
1
|
+
# dot-language-support [](https://github.com/nikeee/dot-language-support/actions/workflows/CD.yml) [](https://github.com/nikeee/dot-language-support/actions/workflows/CI.yml)  [](https://www.npmjs.com/package/dot-language-support)
|
|
2
|
+
|
|
3
|
+
|
|
3
4
|
|
|
4
5
|
A language service library, written in TypeScript. Used by [dot-language-server](https://github.com/nikeee/dot-language-server) and [edotor.net](https://edotor.net).
|
|
5
6
|
|
|
6
7
|
## Features
|
|
7
|
-
-
|
|
8
|
+
- Highlight semantic and syntactic errors
|
|
8
9
|
- Auto completion for colors and shapes
|
|
9
10
|
- Code Actions:
|
|
10
11
|
- Refactoring Graphs to Digraphs and vice-versa
|
|
@@ -12,6 +13,6 @@ A language service library, written in TypeScript. Used by [dot-language-server]
|
|
|
12
13
|
- Refactor edges to sub graphs
|
|
13
14
|
|
|
14
15
|
## Installation
|
|
15
|
-
```
|
|
16
|
+
```sh
|
|
16
17
|
npm -S i dot-language-support
|
|
17
18
|
```
|
package/jest.config.mjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SourceFile } from "./types";
|
|
1
|
+
import { SourceFile } from "./types.js";
|
|
2
2
|
export declare function bindSourceFile(file: SourceFile): void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.bindSourceFile = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const types_js_1 = require("./types.js");
|
|
5
|
+
const checker_js_1 = require("./checker.js");
|
|
6
|
+
const parser_js_1 = require("./parser.js");
|
|
7
7
|
const binder = createBinder();
|
|
8
8
|
function bindSourceFile(file) {
|
|
9
9
|
binder.bind(file);
|
|
@@ -28,37 +28,37 @@ function createBinder() {
|
|
|
28
28
|
}
|
|
29
29
|
function innerBind(node) {
|
|
30
30
|
switch (node.kind) {
|
|
31
|
-
case
|
|
32
|
-
case
|
|
31
|
+
case types_js_1.SyntaxKind.DirectedGraph:
|
|
32
|
+
case types_js_1.SyntaxKind.UndirectedGraph:
|
|
33
33
|
return bindGraph(node);
|
|
34
|
-
case
|
|
34
|
+
case types_js_1.SyntaxKind.AttributeStatement:
|
|
35
35
|
return bindAttributeStatement(node);
|
|
36
|
-
case
|
|
36
|
+
case types_js_1.SyntaxKind.EdgeStatement:
|
|
37
37
|
return bindEdgeStatement(node);
|
|
38
|
-
case
|
|
38
|
+
case types_js_1.SyntaxKind.NodeStatement:
|
|
39
39
|
return bindNodeStatement(node);
|
|
40
|
-
case
|
|
40
|
+
case types_js_1.SyntaxKind.SubGraph:
|
|
41
41
|
return bindSubGraph(node);
|
|
42
|
-
case
|
|
42
|
+
case types_js_1.SyntaxKind.SubGraphStatement:
|
|
43
43
|
return bindSubGraphStatement(node);
|
|
44
|
-
case
|
|
44
|
+
case types_js_1.SyntaxKind.IdEqualsIdStatement:
|
|
45
45
|
return bindIdEqualsIdStatement(node);
|
|
46
|
-
case
|
|
46
|
+
case types_js_1.SyntaxKind.QuotedTextIdentifier:
|
|
47
47
|
return bindQuotedTextIdentifier(node);
|
|
48
|
-
case
|
|
48
|
+
case types_js_1.SyntaxKind.EdgeRhs:
|
|
49
49
|
return bindEdgeRhs(node);
|
|
50
|
-
case
|
|
50
|
+
case types_js_1.SyntaxKind.AttributeContainer:
|
|
51
51
|
return bindAttributeContainer(node);
|
|
52
|
-
case
|
|
52
|
+
case types_js_1.SyntaxKind.Assignment:
|
|
53
53
|
return bindAssignment(node);
|
|
54
|
-
case
|
|
54
|
+
case types_js_1.SyntaxKind.NormalPortDeclaration:
|
|
55
55
|
return bindNormalPortDeclaration(node);
|
|
56
|
-
case
|
|
56
|
+
case types_js_1.SyntaxKind.CompassPortDeclaration:
|
|
57
57
|
return bindCompassPortDeclaration(node);
|
|
58
|
-
case
|
|
58
|
+
case types_js_1.SyntaxKind.NodeId:
|
|
59
59
|
return bindNodeId(node);
|
|
60
60
|
default:
|
|
61
|
-
if (node.kind >=
|
|
61
|
+
if (node.kind >= types_js_1.SyntaxKind.FirstNode)
|
|
62
62
|
throw "TODO";
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -67,10 +67,10 @@ function createBinder() {
|
|
|
67
67
|
graphContext |= 2;
|
|
68
68
|
}
|
|
69
69
|
switch (node.kind) {
|
|
70
|
-
case
|
|
70
|
+
case types_js_1.SyntaxKind.DirectedGraph:
|
|
71
71
|
graphContext |= 4;
|
|
72
72
|
break;
|
|
73
|
-
case
|
|
73
|
+
case types_js_1.SyntaxKind.UndirectedGraph:
|
|
74
74
|
graphContext |= 8;
|
|
75
75
|
break;
|
|
76
76
|
}
|
|
@@ -117,7 +117,7 @@ function createBinder() {
|
|
|
117
117
|
function bindIdEqualsIdStatement(node) {
|
|
118
118
|
bind(node.leftId);
|
|
119
119
|
bind(node.rightId);
|
|
120
|
-
if (node.rightId && !(0,
|
|
120
|
+
if (node.rightId && !(0, checker_js_1.nodeContainsErrors)(node.rightId)) {
|
|
121
121
|
if (isAttributeName("color", node.leftId)) {
|
|
122
122
|
ensureGlobalColor(node.rightId);
|
|
123
123
|
}
|
|
@@ -155,20 +155,20 @@ function createBinder() {
|
|
|
155
155
|
bind(node.leftId);
|
|
156
156
|
let carrierIdentifier = undefined;
|
|
157
157
|
switch (superParentStatement.kind) {
|
|
158
|
-
case
|
|
158
|
+
case types_js_1.SyntaxKind.NodeStatement:
|
|
159
159
|
carrierIdentifier = superParentStatement.id.id;
|
|
160
160
|
break;
|
|
161
|
-
case
|
|
161
|
+
case types_js_1.SyntaxKind.EdgeStatement:
|
|
162
162
|
break;
|
|
163
|
-
case
|
|
163
|
+
case types_js_1.SyntaxKind.SubGraphStatement:
|
|
164
164
|
break;
|
|
165
|
-
case
|
|
165
|
+
case types_js_1.SyntaxKind.AttributeStatement:
|
|
166
166
|
break;
|
|
167
167
|
}
|
|
168
168
|
if (carrierIdentifier)
|
|
169
169
|
ensureMemberSymbol(node.leftId, carrierIdentifier);
|
|
170
170
|
bind(node.rightId);
|
|
171
|
-
if (node.rightId && !(0,
|
|
171
|
+
if (node.rightId && !(0, checker_js_1.nodeContainsErrors)(node.rightId)) {
|
|
172
172
|
if (isAttributeName("color", node.leftId)) {
|
|
173
173
|
ensureGlobalColor(node.rightId);
|
|
174
174
|
}
|
|
@@ -205,8 +205,8 @@ function createBinder() {
|
|
|
205
205
|
return new Map();
|
|
206
206
|
}
|
|
207
207
|
function ensureMemberSymbol(node, carrier) {
|
|
208
|
-
if (node && carrier && (0,
|
|
209
|
-
const name = (0,
|
|
208
|
+
if (node && carrier && (0, parser_js_1.isIdentifierNode)(node)) {
|
|
209
|
+
const name = (0, checker_js_1.getIdentifierText)(node);
|
|
210
210
|
if (name === undefined)
|
|
211
211
|
return;
|
|
212
212
|
const carrierSymbol = carrier.symbol;
|
|
@@ -222,9 +222,9 @@ function createBinder() {
|
|
|
222
222
|
debugger;
|
|
223
223
|
}
|
|
224
224
|
function ensureGlobalSymbol(node) {
|
|
225
|
-
if (node && (0,
|
|
225
|
+
if (node && (0, parser_js_1.isIdentifierNode)(node)) {
|
|
226
226
|
const symbols = symbolTable;
|
|
227
|
-
const name = (0,
|
|
227
|
+
const name = (0, checker_js_1.getIdentifierText)(node);
|
|
228
228
|
if (name === undefined)
|
|
229
229
|
return;
|
|
230
230
|
if (symbols === undefined)
|
|
@@ -252,9 +252,9 @@ function createBinder() {
|
|
|
252
252
|
node.symbol = sym;
|
|
253
253
|
}
|
|
254
254
|
function ensureGlobalColor(node) {
|
|
255
|
-
if (node && (0,
|
|
255
|
+
if (node && (0, parser_js_1.isIdentifierNode)(node)) {
|
|
256
256
|
const colors = colorTable;
|
|
257
|
-
const name = (0,
|
|
257
|
+
const name = (0, checker_js_1.getIdentifierText)(node);
|
|
258
258
|
if (name === undefined)
|
|
259
259
|
return;
|
|
260
260
|
if (colors === undefined)
|
|
@@ -283,7 +283,7 @@ function createBinder() {
|
|
|
283
283
|
};
|
|
284
284
|
}
|
|
285
285
|
function isAttributeName(name, id) {
|
|
286
|
-
return id ? (0,
|
|
286
|
+
return id ? (0, checker_js_1.getIdentifierText)(id).trim().toLowerCase() === name : false;
|
|
287
287
|
}
|
|
288
288
|
return {
|
|
289
289
|
bind: file => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SyntaxNode, Identifier, SyntaxKind, Graph, EdgeStatement, EdgeRhs, SourceFile, SubGraphStatement, NodeId, AttributeStatement, Statement, StatementOf, Token } from "./types";
|
|
1
|
+
import { SyntaxNode, Identifier, SyntaxKind, Graph, EdgeStatement, EdgeRhs, SourceFile, SubGraphStatement, NodeId, AttributeStatement, Statement, StatementOf, Token } from "./types.js";
|
|
2
2
|
export declare function checkSourceFile(file: SourceFile): void;
|
|
3
3
|
export declare function findNodeAtOffset(root: SyntaxNode, offset: number, inclusiveEnd?: boolean): SyntaxNode | undefined;
|
|
4
4
|
export declare function getAllowedEdgeOperation(graph: Graph): SyntaxKind.DirectedEdgeOp | SyntaxKind.UndirectedEdgeOp;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.nodeContainsErrors = exports.getIdentifierText = exports.edgeStatementHasAttributes = exports.isNodeId = exports.isSubGraphStatement = exports.isEdgeStatement = exports.isAttrStatement = exports.findAllStatements = exports.findOptionalSemicolons = exports.findAllEdges = exports.getAllowedEdgeOperation = exports.findNodeAtOffset = exports.checkSourceFile = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const types_js_1 = require("./types.js");
|
|
5
|
+
const util_js_1 = require("./service/util.js");
|
|
6
|
+
const visitor_js_1 = require("./visitor.js");
|
|
7
7
|
function checkSourceFile(file) {
|
|
8
8
|
const g = file.graph;
|
|
9
9
|
if (g) {
|
|
@@ -33,16 +33,16 @@ function findNodeAtOffset(root, offset, inclusiveEnd = false) {
|
|
|
33
33
|
if (root.pos === offset && root.pos === root.end)
|
|
34
34
|
return root;
|
|
35
35
|
if (rangeContainsOffset(root, offset, inclusiveEnd)) {
|
|
36
|
-
const narrowerChild = (0,
|
|
36
|
+
const narrowerChild = (0, visitor_js_1.forEachChild)(root, child => findNodeAtOffset(child, offset, inclusiveEnd));
|
|
37
37
|
return narrowerChild ? narrowerChild : root;
|
|
38
38
|
}
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
41
|
exports.findNodeAtOffset = findNodeAtOffset;
|
|
42
42
|
function getAllowedEdgeOperation(graph) {
|
|
43
|
-
return graph.kind ===
|
|
44
|
-
?
|
|
45
|
-
:
|
|
43
|
+
return graph.kind === types_js_1.SyntaxKind.DirectedGraph
|
|
44
|
+
? types_js_1.SyntaxKind.DirectedEdgeOp
|
|
45
|
+
: types_js_1.SyntaxKind.UndirectedEdgeOp;
|
|
46
46
|
}
|
|
47
47
|
exports.getAllowedEdgeOperation = getAllowedEdgeOperation;
|
|
48
48
|
function checkGraphSemantics(file, root) {
|
|
@@ -54,7 +54,7 @@ function checkGraphSemantics(file, root) {
|
|
|
54
54
|
}
|
|
55
55
|
function findAllEdges(node) {
|
|
56
56
|
const allEdges = [];
|
|
57
|
-
(0,
|
|
57
|
+
(0, visitor_js_1.forEachChild)(node, child => {
|
|
58
58
|
if (isEdgeStatement(child)) {
|
|
59
59
|
if (child.rhs && child.rhs.length > 0) {
|
|
60
60
|
for (const edgeRhs of child.rhs)
|
|
@@ -75,15 +75,15 @@ function findOptionalSemicolons(node) {
|
|
|
75
75
|
}
|
|
76
76
|
exports.findOptionalSemicolons = findOptionalSemicolons;
|
|
77
77
|
function isStatement(node) {
|
|
78
|
-
return node.kind ===
|
|
79
|
-
|| node.kind ===
|
|
80
|
-
|| node.kind ===
|
|
81
|
-
|| node.kind ===
|
|
82
|
-
|| node.kind ===
|
|
78
|
+
return node.kind === types_js_1.SyntaxKind.SubGraphStatement
|
|
79
|
+
|| node.kind === types_js_1.SyntaxKind.EdgeStatement
|
|
80
|
+
|| node.kind === types_js_1.SyntaxKind.NodeStatement
|
|
81
|
+
|| node.kind === types_js_1.SyntaxKind.IdEqualsIdStatement
|
|
82
|
+
|| node.kind === types_js_1.SyntaxKind.AttributeStatement;
|
|
83
83
|
}
|
|
84
84
|
function findAllStatements(node, kind) {
|
|
85
85
|
const allStatements = [];
|
|
86
|
-
(0,
|
|
86
|
+
(0, visitor_js_1.forEachChild)(node, child => {
|
|
87
87
|
if ((kind === undefined && isStatement(child)) || (child.kind === kind)) {
|
|
88
88
|
allStatements.push(child);
|
|
89
89
|
}
|
|
@@ -106,14 +106,14 @@ function findEdgeErrors(expectedEdgeOp, node) {
|
|
|
106
106
|
return undefined;
|
|
107
107
|
}
|
|
108
108
|
function createEdgeViolationDiagnostics(file, expectedEdgeOp, violators) {
|
|
109
|
-
const op = expectedEdgeOp ===
|
|
110
|
-
const graphType = expectedEdgeOp ===
|
|
109
|
+
const op = expectedEdgeOp === types_js_1.SyntaxKind.UndirectedEdgeOp ? "--" : "->";
|
|
110
|
+
const graphType = expectedEdgeOp === types_js_1.SyntaxKind.UndirectedEdgeOp ? "undirected" : "directed";
|
|
111
111
|
const message = `Invalid edge operation, use "${op}" in ${graphType} graph`;
|
|
112
112
|
const code = createCheckerError(0);
|
|
113
|
-
const category =
|
|
113
|
+
const category = types_js_1.DiagnosticCategory.Error;
|
|
114
114
|
violators.forEach(edge => edge.operation.flags |= 2);
|
|
115
115
|
return violators.map(edge => {
|
|
116
|
-
const start = (0,
|
|
116
|
+
const start = (0, util_js_1.getStart)(file, edge.operation);
|
|
117
117
|
const end = edge.operation.end;
|
|
118
118
|
return {
|
|
119
119
|
message,
|
|
@@ -133,22 +133,22 @@ function getInvalidEdgeRhs(allowedOp, edges) {
|
|
|
133
133
|
return res;
|
|
134
134
|
}
|
|
135
135
|
function isAttrStatement(node) {
|
|
136
|
-
return node.kind ===
|
|
136
|
+
return node.kind === types_js_1.SyntaxKind.AttributeStatement;
|
|
137
137
|
}
|
|
138
138
|
exports.isAttrStatement = isAttrStatement;
|
|
139
139
|
function isEdgeStatement(node) {
|
|
140
|
-
return node.kind ===
|
|
140
|
+
return node.kind === types_js_1.SyntaxKind.EdgeStatement;
|
|
141
141
|
}
|
|
142
142
|
exports.isEdgeStatement = isEdgeStatement;
|
|
143
143
|
function isSubGraphStatement(node) {
|
|
144
|
-
return node.kind ===
|
|
144
|
+
return node.kind === types_js_1.SyntaxKind.SubGraphStatement;
|
|
145
145
|
}
|
|
146
146
|
exports.isSubGraphStatement = isSubGraphStatement;
|
|
147
147
|
function isGraph(node) {
|
|
148
|
-
return node.kind ===
|
|
148
|
+
return node.kind === types_js_1.SyntaxKind.DirectedGraph || node.kind === types_js_1.SyntaxKind.UndirectedGraph;
|
|
149
149
|
}
|
|
150
150
|
function isNodeId(node) {
|
|
151
|
-
return node.kind ===
|
|
151
|
+
return node.kind === types_js_1.SyntaxKind.NodeId;
|
|
152
152
|
}
|
|
153
153
|
exports.isNodeId = isNodeId;
|
|
154
154
|
function edgeStatementHasAttributes(es) {
|
|
@@ -159,16 +159,16 @@ function edgeStatementHasAttributes(es) {
|
|
|
159
159
|
exports.edgeStatementHasAttributes = edgeStatementHasAttributes;
|
|
160
160
|
function getIdentifierText(n) {
|
|
161
161
|
switch (n.kind) {
|
|
162
|
-
case
|
|
162
|
+
case types_js_1.SyntaxKind.HtmlIdentifier:
|
|
163
163
|
return n.htmlContent;
|
|
164
|
-
case
|
|
164
|
+
case types_js_1.SyntaxKind.TextIdentifier:
|
|
165
165
|
return n.text;
|
|
166
|
-
case
|
|
166
|
+
case types_js_1.SyntaxKind.NumericIdentifier:
|
|
167
167
|
return n.text;
|
|
168
|
-
case
|
|
168
|
+
case types_js_1.SyntaxKind.QuotedTextIdentifier:
|
|
169
169
|
return n.concatenation;
|
|
170
170
|
default:
|
|
171
|
-
return (0,
|
|
171
|
+
return (0, util_js_1.assertNever)(n);
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
exports.getIdentifierText = getIdentifierText;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -14,10 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./types"), exports);
|
|
18
|
-
__exportStar(require("./scanner"), exports);
|
|
19
|
-
__exportStar(require("./parser"), exports);
|
|
20
|
-
__exportStar(require("./visitor"), exports);
|
|
21
|
-
__exportStar(require("./service/service"), exports);
|
|
22
|
-
__exportStar(require("./service/interop"), exports);
|
|
17
|
+
__exportStar(require("./types.js"), exports);
|
|
18
|
+
__exportStar(require("./scanner.js"), exports);
|
|
19
|
+
__exportStar(require("./parser.js"), exports);
|
|
20
|
+
__exportStar(require("./visitor.js"), exports);
|
|
21
|
+
__exportStar(require("./service/service.js"), exports);
|
|
23
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Scanner } from "./scanner";
|
|
1
|
+
import { Scanner } from "./scanner.js";
|
|
2
2
|
import { SyntaxKind, SourceFile, Identifier, SyntaxNode, DiagnosticMessage } from "./types";
|
|
3
3
|
export declare enum ParsingContext {
|
|
4
4
|
None = 0,
|
|
@@ -81,4 +81,4 @@ export declare class Parser {
|
|
|
81
81
|
private tryParse;
|
|
82
82
|
}
|
|
83
83
|
export declare function isIdentifier(kind: SyntaxKind): boolean;
|
|
84
|
-
export declare function isIdentifierNode
|
|
84
|
+
export declare function isIdentifierNode(node: SyntaxNode): node is Identifier;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isIdentifierNode = exports.isIdentifier = exports.Parser = exports.ParsingContext = void 0;
|
|
4
|
-
const
|
|
4
|
+
const scanner_js_1 = require("./scanner.js");
|
|
5
|
+
const util_js_1 = require("./service/util.js");
|
|
5
6
|
const types_1 = require("./types");
|
|
6
7
|
var ParsingContext;
|
|
7
8
|
(function (ParsingContext) {
|
|
@@ -17,7 +18,7 @@ class Parser {
|
|
|
17
18
|
constructor() {
|
|
18
19
|
this.currentToken = types_1.SyntaxKind.Unknown;
|
|
19
20
|
this.identifierCount = 0;
|
|
20
|
-
this.scanner = new
|
|
21
|
+
this.scanner = new scanner_js_1.DefaultScanner();
|
|
21
22
|
this.resetState();
|
|
22
23
|
}
|
|
23
24
|
resetState() {
|
|
@@ -268,13 +269,13 @@ class Parser {
|
|
|
268
269
|
node.terminator = this.parseOptionalToken(types_1.SyntaxKind.SemicolonToken);
|
|
269
270
|
return this.finishNode(node);
|
|
270
271
|
}
|
|
271
|
-
parseEdgeStatement(
|
|
272
|
-
console.assert(
|
|
273
|
-
console.assert(
|
|
272
|
+
parseEdgeStatement(precedingItem) {
|
|
273
|
+
console.assert(precedingItem.kind === types_1.SyntaxKind.SubGraph || precedingItem.kind === types_1.SyntaxKind.NodeId);
|
|
274
|
+
console.assert(precedingItem.pos !== undefined);
|
|
274
275
|
if (!this.isEdgeOp())
|
|
275
276
|
debugger;
|
|
276
|
-
const node = this.createNode(types_1.SyntaxKind.EdgeStatement,
|
|
277
|
-
node.source =
|
|
277
|
+
const node = this.createNode(types_1.SyntaxKind.EdgeStatement, precedingItem.pos);
|
|
278
|
+
node.source = precedingItem;
|
|
278
279
|
node.rhs = this.parseList(ParsingContext.EdgeRhsList, () => this.parseEdgeRhs());
|
|
279
280
|
if (this.token() === types_1.SyntaxKind.OpenBracketToken) {
|
|
280
281
|
node.attributes = this.parseList(ParsingContext.AttributeContainerList, () => this.parseAttributeContainer());
|
|
@@ -425,8 +426,9 @@ class Parser {
|
|
|
425
426
|
return "Wat, no parsing context";
|
|
426
427
|
case ParsingContext.Count:
|
|
427
428
|
return "Wat, 'Count' parsing context";
|
|
429
|
+
default:
|
|
430
|
+
return (0, util_js_1.assertNever)(context);
|
|
428
431
|
}
|
|
429
|
-
return "Error parsing list";
|
|
430
432
|
}
|
|
431
433
|
isInSomeParsingContext() {
|
|
432
434
|
for (let ctx = 0; ctx < ParsingContext.Count; ctx++) {
|
|
@@ -446,7 +448,7 @@ class Parser {
|
|
|
446
448
|
this.nextToken();
|
|
447
449
|
return false;
|
|
448
450
|
}
|
|
449
|
-
isListElement(context,
|
|
451
|
+
isListElement(context, _inErrorRecovery) {
|
|
450
452
|
switch (context) {
|
|
451
453
|
case ParsingContext.AssignmentList:
|
|
452
454
|
return this.isIdentifier();
|
|
@@ -544,7 +546,7 @@ class Parser {
|
|
|
544
546
|
};
|
|
545
547
|
return this.parseErrorAtPosition(this.scanner.tokenPos, this.scanner.pos, message, error);
|
|
546
548
|
}
|
|
547
|
-
scanError(message,
|
|
549
|
+
scanError(message, _category, sub, length) {
|
|
548
550
|
const errorPos = this.scanner.pos;
|
|
549
551
|
const err = {
|
|
550
552
|
source: 1,
|
|
@@ -557,13 +559,13 @@ class Parser {
|
|
|
557
559
|
? "identifier"
|
|
558
560
|
: this.token() === types_1.SyntaxKind.EndOfFileToken
|
|
559
561
|
? "end of file"
|
|
560
|
-
: `"${(0,
|
|
562
|
+
: `"${(0, scanner_js_1.getTokenAsText)(this.token())}"`;
|
|
561
563
|
const expected = expectedKinds.map(k => {
|
|
562
564
|
if (isIdentifier(k))
|
|
563
565
|
return "identifier";
|
|
564
566
|
else if (k === types_1.SyntaxKind.EndOfFileToken)
|
|
565
567
|
return "end of file";
|
|
566
|
-
return `"${(0,
|
|
568
|
+
return `"${(0, scanner_js_1.getTokenAsText)(k)}"`;
|
|
567
569
|
});
|
|
568
570
|
const lastExpected = expected.pop();
|
|
569
571
|
const expectedJoined = expected.join(", ");
|