occam-verify-cli 0.0.374 → 0.0.376
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/lib/axiom.js +45 -12
- package/lib/combinator.js +13 -7
- package/lib/conclusion.js +8 -1
- package/lib/constructor.js +24 -8
- package/lib/context/file.js +12 -13
- package/lib/context/release/directory.js +32 -26
- package/lib/context/release/file.js +94 -56
- package/lib/context/release.js +8 -8
- package/lib/kinds.js +5 -5
- package/lib/label.js +16 -1
- package/lib/premise.js +8 -1
- package/lib/rule.js +39 -12
- package/lib/ruleNames.js +9 -1
- package/lib/type.js +19 -8
- package/lib/verify/release.js +4 -6
- package/package.json +1 -1
- package/src/axiom.js +62 -13
- package/src/combinator.js +14 -2
- package/src/conclusion.js +11 -0
- package/src/constructor.js +23 -2
- package/src/context/file.js +13 -16
- package/src/context/release/directory.js +36 -24
- package/src/context/release/file.js +130 -49
- package/src/context/release.js +6 -6
- package/src/kinds.js +1 -1
- package/src/label.js +17 -0
- package/src/premise.js +11 -0
- package/src/rule.js +44 -12
- package/src/ruleNames.js +2 -0
- package/src/type.js +19 -2
- package/src/verify/release.js +6 -8
package/src/axiom.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import Label from "./label";
|
|
4
|
+
|
|
3
5
|
import { AXIOM_KIND } from "./kinds";
|
|
4
6
|
import { nodeAsString } from "./utilities/string";
|
|
7
|
+
import { STATEMENT_RULE_NAME } from "occam-custom-grammars/lib/ruleNames";
|
|
5
8
|
|
|
6
9
|
export default class Axiom {
|
|
7
10
|
constructor(labels, statementNode, suppositionStatementNode, consequentStatementNode) {
|
|
@@ -41,28 +44,74 @@ export default class Axiom {
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
toJSON() {
|
|
44
|
-
const
|
|
47
|
+
const labelsJSON = this.labels.map((label) => {
|
|
48
|
+
const labelJSON = label.toJSON();
|
|
49
|
+
|
|
50
|
+
return labelJSON;
|
|
51
|
+
}),
|
|
52
|
+
statementString = nodeAsString(this.statementNode),
|
|
45
53
|
consequentStatementString = nodeAsString(this.consequentStatementNode),
|
|
46
54
|
suppositionStatementString = nodeAsString(this.suppositionStatementNode),
|
|
47
55
|
kind = AXIOM_KIND,
|
|
56
|
+
labels = labelsJSON, ///
|
|
48
57
|
statement = statementString, ///
|
|
49
58
|
consequent = consequentStatementString, ///
|
|
50
59
|
supposition = suppositionStatementString, ///
|
|
51
|
-
json =
|
|
52
|
-
|
|
60
|
+
json = {
|
|
61
|
+
kind,
|
|
62
|
+
labels,
|
|
63
|
+
statement,
|
|
64
|
+
consequent,
|
|
65
|
+
supposition
|
|
66
|
+
};
|
|
53
67
|
|
|
54
|
-
|
|
68
|
+
return json;
|
|
69
|
+
}
|
|
55
70
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
label,
|
|
59
|
-
statement,
|
|
60
|
-
consequent,
|
|
61
|
-
supposition
|
|
62
|
-
});
|
|
63
|
-
});
|
|
71
|
+
static fromJSON(json, callback) {
|
|
72
|
+
let { labels } = json;
|
|
64
73
|
|
|
65
|
-
|
|
74
|
+
const { statement, consequent, supposition } = json;
|
|
75
|
+
|
|
76
|
+
labels = labels.map((label) => {
|
|
77
|
+
const json = label; ///
|
|
78
|
+
|
|
79
|
+
label = Label.fromJSON(json);
|
|
80
|
+
|
|
81
|
+
return label;
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
let statementNode = null,
|
|
85
|
+
consequentNode = null,
|
|
86
|
+
suppositionNode = null;
|
|
87
|
+
|
|
88
|
+
if (statement !== null) {
|
|
89
|
+
const content = statement, ///
|
|
90
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
91
|
+
node = callback(content, ruleName);
|
|
92
|
+
|
|
93
|
+
statementNode = node; ///
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (consequent !== null) {
|
|
97
|
+
const content = consequent, ///
|
|
98
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
99
|
+
node = callback(content, ruleName);
|
|
100
|
+
|
|
101
|
+
consequentNode = node; ///
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (supposition !== null) {
|
|
105
|
+
const content = supposition, ///
|
|
106
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
107
|
+
node = callback(content, ruleName);
|
|
108
|
+
|
|
109
|
+
suppositionNode = node; ///
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const axiom = new Axiom(labels, statementNode, consequentNode, suppositionNode);
|
|
113
|
+
|
|
114
|
+
return axiom;
|
|
66
115
|
}
|
|
67
116
|
|
|
68
117
|
static fromStatementNodeAndLabels(statementNode, labels) {
|
package/src/combinator.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { COMBINATOR_KIND } from "./kinds";
|
|
5
|
+
import { STATEMENT_RULE_NAME } from "./ruleNames";
|
|
5
6
|
|
|
6
7
|
export default class Combinator {
|
|
7
8
|
constructor(statementNode) {
|
|
@@ -22,14 +23,25 @@ export default class Combinator {
|
|
|
22
23
|
const statementString = nodeAsString(this.statementNode),
|
|
23
24
|
kind = COMBINATOR_KIND,
|
|
24
25
|
statement = statementString, ///
|
|
25
|
-
json =
|
|
26
|
+
json = {
|
|
26
27
|
kind,
|
|
27
28
|
statement
|
|
28
|
-
}
|
|
29
|
+
};
|
|
29
30
|
|
|
30
31
|
return json;
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
static fromJSON(json, callback) {
|
|
35
|
+
const { statement } = json,
|
|
36
|
+
content = statement, ///
|
|
37
|
+
ruleName = STATEMENT_RULE_NAME,
|
|
38
|
+
node = callback(content, ruleName),
|
|
39
|
+
statementNode = node, ///
|
|
40
|
+
combinator = new Combinator(statementNode);
|
|
41
|
+
|
|
42
|
+
return combinator;
|
|
43
|
+
}
|
|
44
|
+
|
|
33
45
|
static fromStatementNode(statementNode) {
|
|
34
46
|
const combinator = new Combinator(statementNode);
|
|
35
47
|
|
package/src/conclusion.js
CHANGED
|
@@ -33,6 +33,17 @@ export default class Conclusion {
|
|
|
33
33
|
return json;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
static fromJSON(json, callback) {
|
|
37
|
+
const { metastatement } = json,
|
|
38
|
+
ruleName = METASTATEMENT_RULE_NAME,
|
|
39
|
+
content = metastatement, ///
|
|
40
|
+
node = callback(content, ruleName),
|
|
41
|
+
metastatementNode = node, ///
|
|
42
|
+
conclusion = new Conclusion(metastatementNode);
|
|
43
|
+
|
|
44
|
+
return conclusion;
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
static fromMetastatementNode(metastatementNode) {
|
|
37
48
|
const conclusion = new Conclusion(metastatementNode);
|
|
38
49
|
|
package/src/constructor.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import Type from "./type";
|
|
4
|
+
|
|
3
5
|
import { nodeAsString } from "./utilities/string";
|
|
6
|
+
import { TERM_RULE_NAME } from "./ruleNames";
|
|
4
7
|
import { CONSTRUCTOR_KIND } from "./kinds";
|
|
5
8
|
|
|
6
9
|
export default class Constructor {
|
|
@@ -42,15 +45,33 @@ export default class Constructor {
|
|
|
42
45
|
kind = CONSTRUCTOR_KIND,
|
|
43
46
|
term = termString, ///
|
|
44
47
|
type = typeJSON, ///
|
|
45
|
-
json =
|
|
48
|
+
json = {
|
|
46
49
|
kind,
|
|
47
50
|
term,
|
|
48
51
|
type
|
|
49
|
-
}
|
|
52
|
+
};
|
|
50
53
|
|
|
51
54
|
return json;
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
static fromJSON(json, callback) {
|
|
58
|
+
let { type } = json;
|
|
59
|
+
|
|
60
|
+
const { term } = json,
|
|
61
|
+
content = term, ///
|
|
62
|
+
ruleName = TERM_RULE_NAME,
|
|
63
|
+
node = callback(content, ruleName),
|
|
64
|
+
termNode = node; ///
|
|
65
|
+
|
|
66
|
+
json = type; ///
|
|
67
|
+
|
|
68
|
+
type = Type.fromJSON(json);
|
|
69
|
+
|
|
70
|
+
const constructor = new Constructor(termNode, type);
|
|
71
|
+
|
|
72
|
+
return constructor;
|
|
73
|
+
}
|
|
74
|
+
|
|
54
75
|
static fromTermNodeAndType(termNode, type) {
|
|
55
76
|
const constructor = new Constructor(termNode, type);
|
|
56
77
|
|
package/src/context/file.js
CHANGED
|
@@ -42,27 +42,24 @@ export default class FileContext {
|
|
|
42
42
|
getLabels(bubble = true) {
|
|
43
43
|
const labels = [];
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
const releaseContextLabels = this.releaseContext.getLabels();
|
|
47
|
-
|
|
48
|
-
push(labels, releaseContextLabels);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const rules = this.getRules(),
|
|
52
|
-
axioms = this.getAxioms();
|
|
53
|
-
|
|
54
|
-
rules.forEach((rule) => {
|
|
45
|
+
this.rules.forEach((rule) => {
|
|
55
46
|
const ruleLabels = rule.getLabels();
|
|
56
47
|
|
|
57
48
|
push(labels, ruleLabels);
|
|
58
49
|
});
|
|
59
50
|
|
|
60
|
-
axioms.forEach((axiom) => {
|
|
51
|
+
this.axioms.forEach((axiom) => {
|
|
61
52
|
const axiomLabels = axiom.getLabels();
|
|
62
53
|
|
|
63
54
|
push(labels, axiomLabels);
|
|
64
55
|
});
|
|
65
56
|
|
|
57
|
+
if (bubble) {
|
|
58
|
+
const releaseContextLabels = this.releaseContext.getLabels();
|
|
59
|
+
|
|
60
|
+
push(labels, releaseContextLabels);
|
|
61
|
+
}
|
|
62
|
+
|
|
66
63
|
return labels;
|
|
67
64
|
}
|
|
68
65
|
|
|
@@ -301,31 +298,31 @@ export default class FileContext {
|
|
|
301
298
|
this.rules.forEach((rule) => {
|
|
302
299
|
const ruleJSON = rule.toJSON();
|
|
303
300
|
|
|
304
|
-
push(
|
|
301
|
+
json.push(ruleJSON);
|
|
305
302
|
});
|
|
306
303
|
|
|
307
304
|
this.types.forEach((type) => {
|
|
308
305
|
const typeJSON = type.toJSON();
|
|
309
306
|
|
|
310
|
-
push(
|
|
307
|
+
json.push(typeJSON);
|
|
311
308
|
});
|
|
312
309
|
|
|
313
310
|
this.axioms.forEach((axiom) => {
|
|
314
311
|
const axiomJSON = axiom.toJSON();
|
|
315
312
|
|
|
316
|
-
push(
|
|
313
|
+
json.push(axiomJSON);
|
|
317
314
|
});
|
|
318
315
|
|
|
319
316
|
this.combinators.forEach((combinator) => {
|
|
320
317
|
const combinatorJSON = combinator.toJSON();
|
|
321
318
|
|
|
322
|
-
push(
|
|
319
|
+
json.push(combinatorJSON);
|
|
323
320
|
});
|
|
324
321
|
|
|
325
322
|
this.constructors.forEach((constructor) => {
|
|
326
323
|
const constructorJSON = constructor.toJSON();
|
|
327
324
|
|
|
328
|
-
push(
|
|
325
|
+
json.push(constructorJSON)
|
|
329
326
|
});
|
|
330
327
|
|
|
331
328
|
return json;
|
|
@@ -6,8 +6,8 @@ import { push } from "../../utilities/array";
|
|
|
6
6
|
import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
|
|
7
7
|
|
|
8
8
|
export default class DirectoryReleaseContext extends ReleaseContext {
|
|
9
|
-
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser,
|
|
10
|
-
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser,
|
|
9
|
+
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, fileContexts) {
|
|
10
|
+
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts);
|
|
11
11
|
|
|
12
12
|
this.fileContexts = fileContexts;
|
|
13
13
|
}
|
|
@@ -16,8 +16,8 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
16
16
|
return this.fileContexts;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
const
|
|
19
|
+
getTypes(releaseNames = []) {
|
|
20
|
+
const types = [],
|
|
21
21
|
releaseName = this.getReleaseName(),
|
|
22
22
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
23
23
|
|
|
@@ -27,23 +27,25 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
27
27
|
const bubble = false;
|
|
28
28
|
|
|
29
29
|
this.fileContexts.forEach((fileContext) => {
|
|
30
|
-
const
|
|
30
|
+
const fileContextTypes = fileContext.getTypes(bubble);
|
|
31
31
|
|
|
32
|
-
push(
|
|
32
|
+
push(types, fileContextTypes);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
this.
|
|
36
|
-
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
35
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
38
|
+
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
39
|
+
|
|
40
|
+
push(types, releaseContextTypes);
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
return
|
|
44
|
+
return types;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
+
getRules(releaseNames = []) {
|
|
48
|
+
const rules = [],
|
|
47
49
|
releaseName = this.getReleaseName(),
|
|
48
50
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
49
51
|
|
|
@@ -53,19 +55,21 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
53
55
|
const bubble = false;
|
|
54
56
|
|
|
55
57
|
this.fileContexts.forEach((fileContext) => {
|
|
56
|
-
const
|
|
58
|
+
const fileContextRules = fileContext.getRules(bubble);
|
|
57
59
|
|
|
58
|
-
push(
|
|
60
|
+
push(rules, fileContextRules);
|
|
59
61
|
});
|
|
60
62
|
|
|
61
|
-
this.
|
|
62
|
-
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
63
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
66
|
+
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
67
|
+
|
|
68
|
+
push(rules, releaseContextRules);
|
|
65
69
|
});
|
|
66
70
|
}
|
|
67
71
|
|
|
68
|
-
return
|
|
72
|
+
return rules;
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
getAxioms(releaseNames = []) {
|
|
@@ -84,7 +88,9 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
84
88
|
push(axioms, fileContextAxioms);
|
|
85
89
|
});
|
|
86
90
|
|
|
87
|
-
this.
|
|
91
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
92
|
+
|
|
93
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
88
94
|
const releaseContextAxioms = releaseContext.getAxioms(releaseNames);
|
|
89
95
|
|
|
90
96
|
push(axioms, releaseContextAxioms);
|
|
@@ -110,7 +116,9 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
110
116
|
push(labels, fileContextLabels);
|
|
111
117
|
});
|
|
112
118
|
|
|
113
|
-
this.
|
|
119
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
120
|
+
|
|
121
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
114
122
|
const releaseContextLabels = releaseContext.getLabels(releaseNames);
|
|
115
123
|
|
|
116
124
|
push(labels, releaseContextLabels);
|
|
@@ -136,7 +144,9 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
136
144
|
push(combinators, fileContextCombinators);
|
|
137
145
|
});
|
|
138
146
|
|
|
139
|
-
this.
|
|
147
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
148
|
+
|
|
149
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
140
150
|
const releaseContextCombinators = releaseContext.getCombinators(releaseNames);
|
|
141
151
|
|
|
142
152
|
push(combinators, releaseContextCombinators);
|
|
@@ -162,7 +172,9 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
162
172
|
push(constructors, fileContextConstructors);
|
|
163
173
|
});
|
|
164
174
|
|
|
165
|
-
this.
|
|
175
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
176
|
+
|
|
177
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
166
178
|
const releaseContextConstructors = releaseContext.getConstructors(releaseNames);
|
|
167
179
|
|
|
168
180
|
push(constructors, releaseContextConstructors);
|
|
@@ -193,9 +205,9 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
193
205
|
customGrammar = customGrammarFromNameAndEntries(name, entries),
|
|
194
206
|
florenceLexer = null,
|
|
195
207
|
florenceParser = null,
|
|
196
|
-
|
|
208
|
+
dependencyReleaseContexts = null,
|
|
197
209
|
fileContexts = [],
|
|
198
|
-
directoryReleaseContext = new DirectoryReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser,
|
|
210
|
+
directoryReleaseContext = new DirectoryReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, fileContexts);
|
|
199
211
|
|
|
200
212
|
return directoryReleaseContext;
|
|
201
213
|
}
|
|
@@ -2,17 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
import ReleaseContext from "../../context/release";
|
|
4
4
|
|
|
5
|
+
import Rule from "../../rule";
|
|
6
|
+
import Type from "../../type";
|
|
7
|
+
import Axiom from "../../axiom";
|
|
8
|
+
import Combinator from "../../combinator";
|
|
9
|
+
import Constructor from "../../constructor";
|
|
10
|
+
|
|
5
11
|
import { push } from "../../utilities/array";
|
|
6
|
-
import {
|
|
12
|
+
import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
|
|
13
|
+
import { RULE_KIND, TYPE_KIND, AXIOM_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
|
|
7
14
|
|
|
8
15
|
export default class FileReleaseContext extends ReleaseContext {
|
|
9
|
-
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser,
|
|
10
|
-
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser,
|
|
16
|
+
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, combinators, constructors) {
|
|
17
|
+
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts);
|
|
11
18
|
|
|
12
|
-
this.rules = rules;
|
|
13
19
|
this.types = types;
|
|
20
|
+
this.rules = rules;
|
|
14
21
|
this.axioms = axioms;
|
|
15
|
-
this.labels = labels;
|
|
16
22
|
this.combinators = combinators;
|
|
17
23
|
this.constructors = constructors;
|
|
18
24
|
this.contextJSON = contextJSON;
|
|
@@ -22,57 +28,63 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
22
28
|
return this.contextJSON;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
...this.rules
|
|
28
|
-
],
|
|
31
|
+
getTypes(releaseNames = []) {
|
|
32
|
+
const types = [],
|
|
29
33
|
releaseName = this.getReleaseName(),
|
|
30
34
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
31
35
|
|
|
32
36
|
if (!releaseNamesIncludesReleaseName) {
|
|
33
37
|
releaseNames.push(releaseName);
|
|
34
38
|
|
|
35
|
-
this.
|
|
36
|
-
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
39
|
+
push(types, this.types);
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
42
|
+
|
|
43
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
44
|
+
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
45
|
+
|
|
46
|
+
push(types, releaseContextTypes);
|
|
39
47
|
});
|
|
40
48
|
}
|
|
41
49
|
|
|
42
|
-
return
|
|
50
|
+
return types;
|
|
43
51
|
}
|
|
44
52
|
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
...this.types
|
|
48
|
-
],
|
|
53
|
+
getRules(releaseNames = []) {
|
|
54
|
+
const rules = [],
|
|
49
55
|
releaseName = this.getReleaseName(),
|
|
50
56
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
51
57
|
|
|
52
58
|
if (!releaseNamesIncludesReleaseName) {
|
|
53
59
|
releaseNames.push(releaseName);
|
|
54
60
|
|
|
55
|
-
this.
|
|
56
|
-
const releaseContextTypes = releaseContext.getTypes(releaseNames);
|
|
61
|
+
push(rules, this.rules);
|
|
57
62
|
|
|
58
|
-
|
|
63
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
64
|
+
|
|
65
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
66
|
+
const releaseContextRules = releaseContext.getRules(releaseNames);
|
|
67
|
+
|
|
68
|
+
push(rules, releaseContextRules);
|
|
59
69
|
});
|
|
60
70
|
}
|
|
61
71
|
|
|
62
|
-
return
|
|
72
|
+
return rules;
|
|
63
73
|
}
|
|
64
74
|
|
|
65
75
|
getAxioms(releaseNames = []) {
|
|
66
|
-
const axioms = [
|
|
67
|
-
...this.axioms
|
|
68
|
-
],
|
|
76
|
+
const axioms = [],
|
|
69
77
|
releaseName = this.getReleaseName(),
|
|
70
78
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
71
79
|
|
|
72
80
|
if (!releaseNamesIncludesReleaseName) {
|
|
73
81
|
releaseNames.push(releaseName);
|
|
74
82
|
|
|
75
|
-
this.
|
|
83
|
+
push(axioms, this.axioms);
|
|
84
|
+
|
|
85
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
86
|
+
|
|
87
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
76
88
|
const releaseContextAxioms = releaseContext.getAxioms(releaseNames);
|
|
77
89
|
|
|
78
90
|
push(axioms, releaseContextAxioms);
|
|
@@ -83,19 +95,31 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
83
95
|
}
|
|
84
96
|
|
|
85
97
|
getLabels(releaseNames = []) {
|
|
86
|
-
const labels = [
|
|
87
|
-
...this.labels
|
|
88
|
-
],
|
|
98
|
+
const labels = [],
|
|
89
99
|
releaseName = this.getReleaseName(),
|
|
90
100
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
91
101
|
|
|
92
102
|
if (!releaseNamesIncludesReleaseName) {
|
|
93
103
|
releaseNames.push(releaseName);
|
|
94
104
|
|
|
95
|
-
this.
|
|
96
|
-
const
|
|
105
|
+
this.rules.forEach((rule) => {
|
|
106
|
+
const ruleLabels = rule.getLabels();
|
|
107
|
+
|
|
108
|
+
push(labels, ruleLabels);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
this.axioms.forEach((axiom) => {
|
|
112
|
+
const axiomLabels = axiom.getLabels();
|
|
97
113
|
|
|
98
|
-
push(labels,
|
|
114
|
+
push(labels, axiomLabels);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
118
|
+
|
|
119
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
120
|
+
const releaseContextAxioms = releaseContext.getAxioms(releaseNames);
|
|
121
|
+
|
|
122
|
+
push(labels, releaseContextAxioms);
|
|
99
123
|
});
|
|
100
124
|
}
|
|
101
125
|
|
|
@@ -103,16 +127,18 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
103
127
|
}
|
|
104
128
|
|
|
105
129
|
getCombinators(releaseNames = []) {
|
|
106
|
-
const combinators = [
|
|
107
|
-
...this.combinators
|
|
108
|
-
],
|
|
130
|
+
const combinators = [],
|
|
109
131
|
releaseName = this.getReleaseName(),
|
|
110
132
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
111
133
|
|
|
112
134
|
if (!releaseNamesIncludesReleaseName) {
|
|
113
135
|
releaseNames.push(releaseName);
|
|
114
136
|
|
|
115
|
-
this.
|
|
137
|
+
push(combinators, this.combinators);
|
|
138
|
+
|
|
139
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
140
|
+
|
|
141
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
116
142
|
const releaseContextCombinators = releaseContext.getCombinators(releaseNames);
|
|
117
143
|
|
|
118
144
|
push(combinators, releaseContextCombinators);
|
|
@@ -123,16 +149,18 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
123
149
|
}
|
|
124
150
|
|
|
125
151
|
getConstructors(releaseNames = []) {
|
|
126
|
-
const constructors = [
|
|
127
|
-
...this.constructors
|
|
128
|
-
],
|
|
152
|
+
const constructors = [],
|
|
129
153
|
releaseName = this.getReleaseName(),
|
|
130
154
|
releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
|
|
131
155
|
|
|
132
156
|
if (!releaseNamesIncludesReleaseName) {
|
|
133
157
|
releaseNames.push(releaseName);
|
|
134
158
|
|
|
135
|
-
this.
|
|
159
|
+
push(constructors, this.constructors);
|
|
160
|
+
|
|
161
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
162
|
+
|
|
163
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
136
164
|
const releaseContextConstructors = releaseContext.getConstructors(releaseNames);
|
|
137
165
|
|
|
138
166
|
push(constructors, releaseContextConstructors);
|
|
@@ -145,22 +173,75 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
145
173
|
initialise(dependencyReleaseContexts) {
|
|
146
174
|
super.initialise(dependencyReleaseContexts);
|
|
147
175
|
|
|
148
|
-
|
|
176
|
+
const jsonArray = this.contextJSON, ///
|
|
177
|
+
callback = (content, ruleName) => {
|
|
178
|
+
const ruleMap = this.florenceParser.getRuleMap(),
|
|
179
|
+
tokens = this.florenceLexer.tokenise(content),
|
|
180
|
+
rule = ruleMap[ruleName],
|
|
181
|
+
node = this.florenceParser.parse(tokens, rule);
|
|
182
|
+
|
|
183
|
+
return node;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
jsonArray.forEach((json) => {
|
|
187
|
+
const { kind } = json;
|
|
188
|
+
|
|
189
|
+
switch (kind) {
|
|
190
|
+
case TYPE_KIND: {
|
|
191
|
+
const type = Type.fromJSON(json);
|
|
192
|
+
|
|
193
|
+
this.types.push(type);
|
|
194
|
+
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
case RULE_KIND: {
|
|
199
|
+
const rule = Rule.fromJSON(json, callback);
|
|
200
|
+
|
|
201
|
+
this.rules.push(rule);
|
|
202
|
+
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
case AXIOM_KIND: {
|
|
207
|
+
const axiom = Axiom.fromJSON(json, callback);
|
|
208
|
+
|
|
209
|
+
this.axioms.push(axiom);
|
|
210
|
+
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
case COMBINATOR_KIND: {
|
|
215
|
+
const combinator = Combinator.fromJSON(json, callback);
|
|
216
|
+
|
|
217
|
+
this.combinators.push(combinator);
|
|
218
|
+
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
case CONSTRUCTOR_KIND: {
|
|
223
|
+
const constructor = Constructor.fromJSON(json, callback);
|
|
224
|
+
|
|
225
|
+
this.constructors.push(constructor);
|
|
226
|
+
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
});
|
|
149
231
|
}
|
|
150
232
|
|
|
151
233
|
static fromLogNameEntriesCallbacksAndContextJSON(log, name, entries, callbacks, contextJSON) {
|
|
152
|
-
const verified =
|
|
234
|
+
const verified = true,
|
|
153
235
|
customGrammar = customGrammarFromNameAndEntries(name, entries),
|
|
154
236
|
florenceLexer = null,
|
|
155
237
|
florenceParser = null,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
axioms =
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, releaseContexts, contextJSON, rules, types, axioms, labels, combinators, constructors);
|
|
238
|
+
dependencyReleaseContexts = null,
|
|
239
|
+
types = [],
|
|
240
|
+
rules = [],
|
|
241
|
+
axioms = [],
|
|
242
|
+
combinators = [],
|
|
243
|
+
constructors = [],
|
|
244
|
+
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, combinators, constructors);
|
|
164
245
|
|
|
165
246
|
return releaseContext;
|
|
166
247
|
}
|