occam-furtle 2.0.342 → 3.0.2
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/example.js +5905 -1786
- package/lib/context/block.js +81 -41
- package/lib/context/file/furtle.js +260 -0
- package/lib/context/file/nominal.js +956 -0
- package/lib/context/file.js +146 -271
- package/lib/context.js +210 -0
- package/lib/element/assignment/array.js +116 -14
- package/lib/element/assignment/object.js +116 -14
- package/lib/element/assignment/variable.js +121 -14
- package/lib/element/assignments/variable.js +120 -13
- package/lib/element/declaration/procedure.js +120 -12
- package/lib/element/error.js +118 -13
- package/lib/element/every.js +116 -13
- package/lib/element/expression.js +127 -20
- package/lib/element/label.js +119 -12
- package/lib/element/nodeQuery.js +116 -14
- package/lib/element/nodesQuery.js +116 -14
- package/lib/element/parameter/named.js +117 -15
- package/lib/element/parameter.js +116 -14
- package/lib/element/parameters/named.js +116 -14
- package/lib/element/parameters.js +115 -13
- package/lib/element/primitive.js +115 -13
- package/lib/element/procedure/anonymous.js +118 -16
- package/lib/element/procedure.js +118 -16
- package/lib/element/procedureCall.js +116 -14
- package/lib/element/reduce.js +116 -14
- package/lib/element/reference.js +119 -12
- package/lib/element/returnBlock.js +116 -14
- package/lib/element/some.js +115 -13
- package/lib/element/statement/return.js +120 -13
- package/lib/element/step.js +121 -14
- package/lib/element/term/bracketed.js +120 -13
- package/lib/element/term/comparison.js +117 -15
- package/lib/element/term/logical.js +118 -16
- package/lib/element/term/negated.js +116 -14
- package/lib/element/term.js +127 -18
- package/lib/element/terms.js +125 -14
- package/lib/element/ternary.js +117 -15
- package/lib/element/variable.js +127 -19
- package/lib/element.js +1 -8
- package/lib/index.js +5 -5
- package/lib/log.js +13 -12
- package/lib/metaTypeNames.js +26 -0
- package/lib/metaTypes.js +66 -0
- package/lib/nodeProperties.js +17 -21
- package/lib/nodeProperty.js +4 -7
- package/lib/utilities/context.js +8 -37
- package/lib/utilities/customGrammar.js +49 -0
- package/lib/utilities/element.js +91 -37
- package/lib/utilities/lineIndex.js +26 -0
- package/lib/utilities/node.js +1 -8
- package/lib/utilities/primitive.js +14 -5
- package/lib/utilities/string.js +30 -19
- package/lib/utilities/term.js +14 -5
- package/lib/utilities/terms.js +7 -3
- package/package.json +2 -2
- package/src/context/block.js +20 -32
- package/src/context/file/furtle.js +141 -0
- package/src/context/file/nominal.js +946 -0
- package/src/context/file.js +32 -209
- package/src/context.js +74 -0
- package/src/element/assignment/array.js +6 -8
- package/src/element/assignment/object.js +6 -8
- package/src/element/assignment/variable.js +7 -8
- package/src/element/assignments/variable.js +7 -8
- package/src/element/declaration/procedure.js +6 -6
- package/src/element/error.js +4 -6
- package/src/element/every.js +5 -6
- package/src/element/expression.js +6 -7
- package/src/element/label.js +6 -7
- package/src/element/nodeQuery.js +6 -8
- package/src/element/nodesQuery.js +6 -8
- package/src/element/parameter/named.js +7 -8
- package/src/element/parameter.js +6 -8
- package/src/element/parameters/named.js +8 -9
- package/src/element/parameters.js +6 -8
- package/src/element/primitive.js +5 -7
- package/src/element/procedure/anonymous.js +7 -9
- package/src/element/procedure.js +6 -8
- package/src/element/procedureCall.js +6 -8
- package/src/element/reduce.js +5 -7
- package/src/element/reference.js +6 -7
- package/src/element/returnBlock.js +5 -7
- package/src/element/some.js +5 -7
- package/src/element/statement/return.js +7 -8
- package/src/element/step.js +6 -7
- package/src/element/term/bracketed.js +7 -8
- package/src/element/term/comparison.js +6 -8
- package/src/element/term/logical.js +6 -8
- package/src/element/term/negated.js +6 -8
- package/src/element/term.js +12 -9
- package/src/element/terms.js +16 -9
- package/src/element/ternary.js +6 -8
- package/src/element/variable.js +24 -14
- package/src/element.js +0 -8
- package/src/index.js +1 -1
- package/src/log.js +11 -11
- package/src/metaTypeNames.js +5 -0
- package/src/metaTypes.js +71 -0
- package/src/nodeProperties.js +23 -32
- package/src/nodeProperty.js +5 -10
- package/src/utilities/context.js +7 -45
- package/src/utilities/customGrammar.js +40 -0
- package/src/utilities/element.js +158 -64
- package/src/utilities/lineIndex.js +21 -0
- package/src/utilities/node.js +0 -5
- package/src/utilities/primitive.js +22 -5
- package/src/utilities/string.js +33 -19
- package/src/utilities/term.js +22 -5
- package/src/utilities/terms.js +12 -4
- package/test/context/release.js +477 -46
- package/test/helpers/furtle.js +1 -1
- package/test/helpers/nominal.js +2 -3
- package/test/main.js +1 -1
- package/test/context/file.js +0 -127
- package/test/helpers/constants.js +0 -17
package/src/utilities/term.js
CHANGED
|
@@ -8,8 +8,13 @@ export function termFromNode(node, context) {
|
|
|
8
8
|
const { Term } = elements,
|
|
9
9
|
variable = null,
|
|
10
10
|
primitive = primitiveFromNode(node, context),
|
|
11
|
-
string = primitive.getString()
|
|
12
|
-
|
|
11
|
+
string = primitive.getString();
|
|
12
|
+
|
|
13
|
+
node = null;
|
|
14
|
+
|
|
15
|
+
context = null;
|
|
16
|
+
|
|
17
|
+
const term = new Term(context, string, node, variable, primitive);
|
|
13
18
|
|
|
14
19
|
return term;
|
|
15
20
|
}
|
|
@@ -19,7 +24,11 @@ export function termFromNodes(nodes, context) {
|
|
|
19
24
|
variable = null,
|
|
20
25
|
primitive = primitiveFromNodes(nodes, context),
|
|
21
26
|
string = primitive.getString(),
|
|
22
|
-
|
|
27
|
+
node = null;
|
|
28
|
+
|
|
29
|
+
context = null;
|
|
30
|
+
|
|
31
|
+
const term = new Term(context, string, node, variable, primitive);
|
|
23
32
|
|
|
24
33
|
return term;
|
|
25
34
|
}
|
|
@@ -29,7 +38,11 @@ export function termFromBoolean(boolean, context) {
|
|
|
29
38
|
variable = null,
|
|
30
39
|
primitive = primitiveFromBoolean(boolean, context),
|
|
31
40
|
string = primitive.getString(),
|
|
32
|
-
|
|
41
|
+
node = null;
|
|
42
|
+
|
|
43
|
+
context = null;
|
|
44
|
+
|
|
45
|
+
const term = new Term(context, string, node, variable, primitive);
|
|
33
46
|
|
|
34
47
|
return term;
|
|
35
48
|
}
|
|
@@ -39,7 +52,11 @@ export function termFromStringLiteral(stringLiteral, context) {
|
|
|
39
52
|
variable = null,
|
|
40
53
|
primitive = primitiveFromStringLiteral(stringLiteral, context),
|
|
41
54
|
string = primitive.getString(),
|
|
42
|
-
|
|
55
|
+
node = null;
|
|
56
|
+
|
|
57
|
+
context = null;
|
|
58
|
+
|
|
59
|
+
const term = new Term(context, string, node, variable, primitive);
|
|
43
60
|
|
|
44
61
|
return term;
|
|
45
62
|
}
|
package/src/utilities/terms.js
CHANGED
|
@@ -10,8 +10,12 @@ export function termsFromNodes(nodes, context) {
|
|
|
10
10
|
termsArray = termsArrayFromNodes(nodes, context),
|
|
11
11
|
termsString = termsStringFromTermsArray(termsArray),
|
|
12
12
|
string = termsString, ///
|
|
13
|
-
array = termsArray,
|
|
14
|
-
|
|
13
|
+
array = termsArray, ///
|
|
14
|
+
node = null;
|
|
15
|
+
|
|
16
|
+
context = null;
|
|
17
|
+
|
|
18
|
+
const terms = new Terms(context, string, node, array);
|
|
15
19
|
|
|
16
20
|
return terms;
|
|
17
21
|
}
|
|
@@ -23,8 +27,12 @@ export function termsFromExpression(term, context) {
|
|
|
23
27
|
],
|
|
24
28
|
termsString = termsStringFromTermsArray(termsArray),
|
|
25
29
|
string = termsString, ///
|
|
26
|
-
array = termsArray,
|
|
27
|
-
|
|
30
|
+
array = termsArray, ///
|
|
31
|
+
node = null;
|
|
32
|
+
|
|
33
|
+
context = null;
|
|
34
|
+
|
|
35
|
+
const terms = new Primitives(context, string, node, array);
|
|
28
36
|
|
|
29
37
|
return terms;
|
|
30
38
|
}
|
package/test/context/release.js
CHANGED
|
@@ -1,39 +1,255 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import { filePathUtilities } from "occam-model";
|
|
6
|
+
import { FurtleFileContext } from "../../lib/index"; ///
|
|
7
|
+
import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
import from "../context/file/furtle";
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
import { LEVELS } from "../constants";
|
|
12
|
+
import { getMetaTypes } from "../metaTypes";
|
|
13
|
+
import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
|
|
14
|
+
|
|
15
|
+
const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
|
|
16
|
+
{ nominalParserFromCombinedCustomGrammar } = parsersUtilities,
|
|
17
|
+
{ tail, push, first, clear, resolve } = arrayUtilities,
|
|
18
|
+
{ isFilePathFurtleFilePath, isFilePathNominalFilePath } = filePathUtilities,
|
|
10
19
|
[ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
|
|
11
20
|
|
|
12
|
-
class ReleaseContext {
|
|
13
|
-
constructor(log,
|
|
21
|
+
export default class ReleaseContext {
|
|
22
|
+
constructor(log, name, json, entries, lexer, parser, verified, initialised, fileContexts, customGrammar, dependencyReleaseContexts) {
|
|
14
23
|
this.log = log;
|
|
15
|
-
this.
|
|
24
|
+
this.name = name;
|
|
25
|
+
this.json = json;
|
|
26
|
+
this.entries = entries;
|
|
27
|
+
this.lexer = lexer;
|
|
28
|
+
this.parser = parser;
|
|
29
|
+
this.verified = verified;
|
|
30
|
+
this.initialised = initialised;
|
|
16
31
|
this.fileContexts = fileContexts;
|
|
32
|
+
this.customGrammar = customGrammar;
|
|
33
|
+
this.dependencyReleaseContexts = dependencyReleaseContexts;
|
|
17
34
|
}
|
|
18
35
|
|
|
19
36
|
getLog() {
|
|
20
|
-
return
|
|
37
|
+
return log;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getName() {
|
|
41
|
+
return this.name;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getJSON() {
|
|
45
|
+
return this.json;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
getEntries() {
|
|
49
|
+
return this.entries;
|
|
21
50
|
}
|
|
22
51
|
|
|
23
|
-
|
|
24
|
-
return this.
|
|
52
|
+
getLexer() {
|
|
53
|
+
return this.lexer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
getParser() {
|
|
57
|
+
return this.parser;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
getMetaTypes() {
|
|
61
|
+
const metaTypes = getMetaTypes();
|
|
62
|
+
|
|
63
|
+
return metaTypes;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
isVerified() {
|
|
67
|
+
return this.verified;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
isInitialised() {
|
|
71
|
+
return this.initialised;
|
|
25
72
|
}
|
|
26
73
|
|
|
27
74
|
getFileContexts() {
|
|
28
75
|
return this.fileContexts;
|
|
29
76
|
}
|
|
30
77
|
|
|
31
|
-
|
|
32
|
-
this.
|
|
78
|
+
getCustomGrammar() {
|
|
79
|
+
return this.customGrammar;
|
|
33
80
|
}
|
|
34
81
|
|
|
35
|
-
|
|
36
|
-
this.
|
|
82
|
+
getDependencyReleaseContexts() {
|
|
83
|
+
return this.dependencyReleaseContexts;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
isReleased() {
|
|
87
|
+
const released = (this.json !== null);
|
|
88
|
+
|
|
89
|
+
return released;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
findFile(filePath) { return this.entries.findFile(filePath); }
|
|
93
|
+
|
|
94
|
+
findFileContext(filePath) {
|
|
95
|
+
const fileContext = this.fileContexts.find((fileContext) => {
|
|
96
|
+
const fileContextFilePath = fileContext.getFilePath();
|
|
97
|
+
|
|
98
|
+
if (fileContextFilePath === filePath) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
return fileContext;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
getTypePrefix() {
|
|
107
|
+
let typePrefix = null;
|
|
108
|
+
|
|
109
|
+
const includeDependencies = false,
|
|
110
|
+
typePrefixes = this.getTypePrefixes(includeDependencies),
|
|
111
|
+
typePrefixesLength = typePrefixes.length;
|
|
112
|
+
|
|
113
|
+
if (typePrefixesLength === 1) {
|
|
114
|
+
const firstTypePrefix = first(typePrefixes);
|
|
115
|
+
|
|
116
|
+
typePrefix = firstTypePrefix; ///
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return typePrefix;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
getLabels(includeDependencies = true) {
|
|
123
|
+
const labels = [];
|
|
124
|
+
|
|
125
|
+
this.fileContexts.forEach((fileContext) => {
|
|
126
|
+
const includeRelease = false,
|
|
127
|
+
fileContextLabels = fileContext.getLabels(includeRelease);
|
|
128
|
+
|
|
129
|
+
push(labels, fileContextLabels);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
if (includeDependencies) {
|
|
133
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
134
|
+
|
|
135
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
136
|
+
const includeDependencies = false,
|
|
137
|
+
releaseContextLabels = releaseContext.getLabels(includeDependencies);
|
|
138
|
+
|
|
139
|
+
push(labels, releaseContextLabels);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return labels;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
getTypes(includeDependencies = true) {
|
|
147
|
+
const types = [];
|
|
148
|
+
|
|
149
|
+
this.fileContexts.forEach((fileContext) => {
|
|
150
|
+
const includeRelease = false,
|
|
151
|
+
fileContextTypes = fileContext.getTypes(includeRelease);
|
|
152
|
+
|
|
153
|
+
push(types, fileContextTypes);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
if (includeDependencies) {
|
|
157
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
158
|
+
|
|
159
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
160
|
+
const includeDependencies = false,
|
|
161
|
+
releaseContextTypes = releaseContext.getTypes(includeDependencies);
|
|
162
|
+
|
|
163
|
+
push(types, releaseContextTypes);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return types;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
getRules(includeDependencies = true) {
|
|
171
|
+
const rules = [];
|
|
172
|
+
|
|
173
|
+
this.fileContexts.forEach((fileContext) => {
|
|
174
|
+
const includeRelease = false,
|
|
175
|
+
fileContextRules = fileContext.getRules(includeRelease);
|
|
176
|
+
|
|
177
|
+
push(rules, fileContextRules);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
if (includeDependencies) {
|
|
181
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
182
|
+
|
|
183
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
184
|
+
const includeDependencies = false,
|
|
185
|
+
releaseContextRules = releaseContext.getRules(includeDependencies);
|
|
186
|
+
|
|
187
|
+
push(rules, releaseContextRules);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return rules;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
getAxioms(includeDependencies = true) {
|
|
195
|
+
const axioms = [];
|
|
196
|
+
|
|
197
|
+
this.fileContexts.forEach((fileContext) => {
|
|
198
|
+
const includeRelease = false,
|
|
199
|
+
fileContextAxioms = fileContext.getAxioms(includeRelease);
|
|
200
|
+
|
|
201
|
+
push(axioms, fileContextAxioms);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
if (includeDependencies) {
|
|
205
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
206
|
+
|
|
207
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
208
|
+
const includeDependencies = false,
|
|
209
|
+
releaseContextAxioms = releaseContext.getAxioms(includeDependencies);
|
|
210
|
+
|
|
211
|
+
push(axioms, releaseContextAxioms);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return axioms;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
getLemmas(includeDependencies = true) {
|
|
219
|
+
const lemmas = [];
|
|
220
|
+
|
|
221
|
+
this.fileContexts.forEach((fileContext) => {
|
|
222
|
+
const includeRelease = false,
|
|
223
|
+
fileContextLemmas = fileContext.getLemmas(includeRelease);
|
|
224
|
+
|
|
225
|
+
push(lemmas, fileContextLemmas);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
return lemmas;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
getTheorems(includeDependencies = true) {
|
|
232
|
+
const theorems = [];
|
|
233
|
+
|
|
234
|
+
this.fileContexts.forEach((fileContext) => {
|
|
235
|
+
const includeRelease = false,
|
|
236
|
+
fileContextTheorems = fileContext.getTheorems(includeRelease);
|
|
237
|
+
|
|
238
|
+
push(theorems, fileContextTheorems);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
if (includeDependencies) {
|
|
242
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
243
|
+
|
|
244
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
245
|
+
const includeDependencies = false,
|
|
246
|
+
releaseContextTheorems = releaseContext.getTheorems(includeDependencies);
|
|
247
|
+
|
|
248
|
+
push(theorems, releaseContextTheorems);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return theorems;
|
|
37
253
|
}
|
|
38
254
|
|
|
39
255
|
getProcedures(includeDependencies = true) {
|
|
@@ -46,41 +262,174 @@ class ReleaseContext {
|
|
|
46
262
|
push(procedures, fileContextProcedures);
|
|
47
263
|
});
|
|
48
264
|
|
|
265
|
+
if (includeDependencies) {
|
|
266
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
267
|
+
|
|
268
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
269
|
+
const includeDependencies = false,
|
|
270
|
+
releaseContextProcedures = releaseContext.getProcedures(includeDependencies);
|
|
271
|
+
|
|
272
|
+
push(procedures, releaseContextProcedures);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
|
|
49
276
|
return procedures;
|
|
50
277
|
}
|
|
51
278
|
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const filePathMatches = file.matchFilePath(filePath);
|
|
279
|
+
getMetaLemmas(includeDependencies = true) {
|
|
280
|
+
const metaLemmas = [];
|
|
55
281
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
282
|
+
this.fileContexts.forEach((fileContext) => {
|
|
283
|
+
const includeRelease = false,
|
|
284
|
+
fileContextMetaLemmas = fileContext.getMetaLemmas(includeRelease);
|
|
285
|
+
|
|
286
|
+
push(metaLemmas, fileContextMetaLemmas);
|
|
287
|
+
});
|
|
60
288
|
|
|
61
|
-
return
|
|
289
|
+
return metaLemmas;
|
|
62
290
|
}
|
|
63
291
|
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
procedure = procedures.find((procedure) => {
|
|
67
|
-
const nameMatches = procedure.matchName(name);
|
|
292
|
+
getConjectures(includeDependencies = true) {
|
|
293
|
+
const conjectures = [];
|
|
68
294
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}) || null;
|
|
295
|
+
this.fileContexts.forEach((fileContext) => {
|
|
296
|
+
const includeRelease = false,
|
|
297
|
+
fileContextConjectures = fileContext.getConjectures(includeRelease);
|
|
73
298
|
|
|
74
|
-
|
|
299
|
+
push(conjectures, fileContextConjectures);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
if (includeDependencies) {
|
|
303
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
304
|
+
|
|
305
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
306
|
+
const includeDependencies = false,
|
|
307
|
+
releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
|
|
308
|
+
|
|
309
|
+
push(conjectures, releaseContextConjectures);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return conjectures;
|
|
75
314
|
}
|
|
76
315
|
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
316
|
+
getCombinators(includeDependencies = true) {
|
|
317
|
+
const combinators = [];
|
|
318
|
+
|
|
319
|
+
this.fileContexts.forEach((fileContext) => {
|
|
320
|
+
const includeRelease = false,
|
|
321
|
+
fileContextCombinators = fileContext.getCombinators(includeRelease);
|
|
322
|
+
|
|
323
|
+
push(combinators, fileContextCombinators);
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
if (includeDependencies) {
|
|
327
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
328
|
+
|
|
329
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
330
|
+
const includeDependencies = false,
|
|
331
|
+
releaseContextCombinators = releaseContext.getCombinators(includeDependencies);
|
|
332
|
+
|
|
333
|
+
push(combinators, releaseContextCombinators);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
80
336
|
|
|
81
|
-
return
|
|
337
|
+
return combinators;
|
|
82
338
|
}
|
|
83
339
|
|
|
340
|
+
getTypePrefixes(includeDependencies = true) {
|
|
341
|
+
const typePrefixes = [];
|
|
342
|
+
|
|
343
|
+
this.fileContexts.forEach((fileContext) => {
|
|
344
|
+
const includeRelease = false,
|
|
345
|
+
fileContextTypePrefixes = fileContext.getTypePrefixes(includeRelease);
|
|
346
|
+
|
|
347
|
+
push(typePrefixes, fileContextTypePrefixes);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
if (includeDependencies) {
|
|
351
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
352
|
+
|
|
353
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
354
|
+
const includeDependencies = false,
|
|
355
|
+
releaseContextTypePrefixes = releaseContext.getTypePrefixes(includeDependencies);
|
|
356
|
+
|
|
357
|
+
push(typePrefixes, releaseContextTypePrefixes);
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return typePrefixes;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
getConstructors(includeDependencies = true) {
|
|
365
|
+
const constructors = [];
|
|
366
|
+
|
|
367
|
+
this.fileContexts.forEach((fileContext) => {
|
|
368
|
+
const includeRelease = false,
|
|
369
|
+
fileContextConstructors = fileContext.getConstructors(includeRelease);
|
|
370
|
+
|
|
371
|
+
push(constructors, fileContextConstructors);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
if (includeDependencies) {
|
|
375
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
376
|
+
|
|
377
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
378
|
+
const includeDependencies = false,
|
|
379
|
+
releaseContextConstructors = releaseContext.getConstructors(includeDependencies);
|
|
380
|
+
|
|
381
|
+
push(constructors, releaseContextConstructors);
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
return constructors;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
getMetatheorems(includeDependencies = true) {
|
|
389
|
+
const metatheorems = [];
|
|
390
|
+
|
|
391
|
+
this.fileContexts.forEach((fileContext) => {
|
|
392
|
+
const includeRelease = false,
|
|
393
|
+
fileContextMetatheorems = fileContext.getMetatheorems(includeRelease);
|
|
394
|
+
|
|
395
|
+
push(metatheorems, fileContextMetatheorems);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
if (includeDependencies) {
|
|
399
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
400
|
+
|
|
401
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
402
|
+
const includeDependencies = false,
|
|
403
|
+
releaseContextMetatheorems = releaseContext.getMetatheorems(includeDependencies);
|
|
404
|
+
|
|
405
|
+
push(metatheorems, releaseContextMetatheorems);
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return metatheorems;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
addFileContext(fileContext) {
|
|
413
|
+
this.fileContexts.push(fileContext);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
getReleaseName() {
|
|
417
|
+
const name = this.getName(),
|
|
418
|
+
releaseName = name; ///
|
|
419
|
+
|
|
420
|
+
return releaseName;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
getFile(filePath) { return this.entries.getFile(filePath); }
|
|
424
|
+
|
|
425
|
+
getVersion() { return this.entries.getVersion(); }
|
|
426
|
+
|
|
427
|
+
getFilePaths() { return this.entries.getFilePaths(); }
|
|
428
|
+
|
|
429
|
+
getDependencies() { return this.entries.getDependencies(); }
|
|
430
|
+
|
|
431
|
+
matchShortenedVersion(shortenedVersion) { return this.entries.matchShortenedVersion(shortenedVersion); }
|
|
432
|
+
|
|
84
433
|
trace(message, filePath = null, lineIndex = null) {
|
|
85
434
|
const level = TRACE_LEVEL;
|
|
86
435
|
|
|
@@ -127,25 +476,107 @@ class ReleaseContext {
|
|
|
127
476
|
return depth;
|
|
128
477
|
}
|
|
129
478
|
|
|
479
|
+
initialise(releaseContexts) {
|
|
480
|
+
const combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts),
|
|
481
|
+
nominalLexer = nominalLexerFromCombinedCustomGrammar(NominalLexer, combinedCustomGrammar),
|
|
482
|
+
nominalParser = nominalParserFromCombinedCustomGrammar(NominalParser, combinedCustomGrammar),
|
|
483
|
+
releaseContext = this, ///
|
|
484
|
+
released = this.isReleased();
|
|
485
|
+
|
|
486
|
+
this.dependencyReleaseContexts = tail(releaseContexts); ///
|
|
487
|
+
|
|
488
|
+
this.lexer = nominalLexer; ///
|
|
489
|
+
|
|
490
|
+
this.parser = nominalParser; ///
|
|
491
|
+
|
|
492
|
+
clear(this.fileContexts);
|
|
493
|
+
|
|
494
|
+
released ?
|
|
495
|
+
fileContextsFromJSON(this.json, this.fileContexts, releaseContext) :
|
|
496
|
+
fileContextsFromEntries(this.entries, this.fileContexts, releaseContext);
|
|
497
|
+
|
|
498
|
+
this.initialised = true;
|
|
499
|
+
}
|
|
500
|
+
|
|
130
501
|
verify() {
|
|
131
|
-
|
|
132
|
-
const context = this, ///
|
|
133
|
-
fileContext = FileContext.fromFile(file, context);
|
|
502
|
+
let verifies = false;
|
|
134
503
|
|
|
135
|
-
|
|
504
|
+
const typePrefixes = this.getTypePrefixes(),
|
|
505
|
+
releaseContext = this, ///
|
|
506
|
+
typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
|
|
136
507
|
|
|
137
|
-
|
|
138
|
-
|
|
508
|
+
if (typePrefixesVerify) {
|
|
509
|
+
const verifiedFileContexts = [],
|
|
510
|
+
fileContextsVerify = verifyFileContexts(this.fileContexts, verifiedFileContexts, releaseContext);
|
|
511
|
+
|
|
512
|
+
if (fileContextsVerify) {
|
|
513
|
+
this.fileContexts = verifiedFileContexts; ///
|
|
514
|
+
|
|
515
|
+
this.verified = true;
|
|
516
|
+
|
|
517
|
+
verifies = true;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
return verifies;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
toJSON() {
|
|
525
|
+
const fileContextsJSON = this.fileContexts.map((fileContext) => {
|
|
526
|
+
const fileContextJSON = fileContext.toJSON();
|
|
527
|
+
|
|
528
|
+
return fileContextJSON;
|
|
529
|
+
}),
|
|
530
|
+
json = fileContextsJSON; ///
|
|
531
|
+
|
|
532
|
+
return json;
|
|
139
533
|
}
|
|
140
534
|
|
|
141
|
-
static
|
|
142
|
-
const
|
|
143
|
-
|
|
535
|
+
static fromLogNameJSONAndEntries(log, name, json, entries) {
|
|
536
|
+
const lexer = null,
|
|
537
|
+
parser = null,
|
|
538
|
+
verifies = false,
|
|
539
|
+
initialised = false,
|
|
144
540
|
fileContexts = [],
|
|
145
|
-
|
|
541
|
+
customGrammar = customGrammarFromNameAndEntries(name, entries),
|
|
542
|
+
dependencyReleaseContexts = null,
|
|
543
|
+
releaseContext = new ReleaseContext(log, name, json, entries, lexer, parser, verifies, initialised, fileContexts, customGrammar, dependencyReleaseContexts);
|
|
146
544
|
|
|
147
545
|
return releaseContext;
|
|
148
546
|
}
|
|
149
547
|
}
|
|
150
548
|
|
|
151
|
-
|
|
549
|
+
function verifyFileContexts(fileContexts, verifiedFileContexts) {
|
|
550
|
+
const resolved = resolve(fileContexts, verifiedFileContexts, (fileContext) => {
|
|
551
|
+
const fileContextVerifies = fileContext.verify();
|
|
552
|
+
|
|
553
|
+
if (fileContextVerifies) {
|
|
554
|
+
return true;
|
|
555
|
+
}
|
|
556
|
+
}),
|
|
557
|
+
fileContextsVerify = resolved; ///
|
|
558
|
+
|
|
559
|
+
return fileContextsVerify;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
function fileContextsFromEntries(entries, fileContexts, releaseContext) {
|
|
563
|
+
entries.forEachFile((file) => {
|
|
564
|
+
const filePath = file.getPath(),
|
|
565
|
+
filePathFurtleFilePath = isFilePathFurtleFilePath(filePath),
|
|
566
|
+
filePathNominalFilePath = isFilePathNominalFilePath(filePath);
|
|
567
|
+
|
|
568
|
+
if (filePathFurtleFilePath) {
|
|
569
|
+
const furtleFileContext = FurtleFileContext.fromFile(file, releaseContext),
|
|
570
|
+
fileContext = furtleFileContext; ///
|
|
571
|
+
|
|
572
|
+
fileContexts.push(fileContext);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (filePathNominalFilePath) {
|
|
576
|
+
const context = releaseContext, ///
|
|
577
|
+
fileContext = NominalFileContext.fromFile(file, context);
|
|
578
|
+
|
|
579
|
+
fileContexts.push(fileContext);
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
}
|
package/test/helpers/furtle.js
CHANGED
package/test/helpers/nominal.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
const { NominalFileContext } = require("../../lib/index"); ///
|
|
3
4
|
const { lexersUtilities, parsersUtilities } = require("occam-custom-grammars");
|
|
4
5
|
|
|
5
|
-
const FileContext = require("../context/file");
|
|
6
|
-
|
|
7
6
|
const { combinedCustomGrammarFromNothing } = require("../helpers/grammar");
|
|
8
7
|
|
|
9
8
|
const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
|
|
@@ -21,7 +20,7 @@ function nominalFileContextFromReleaseContext(releaseContext) {
|
|
|
21
20
|
node = parser.parse(tokens),
|
|
22
21
|
context = releaseContext, ///
|
|
23
22
|
filePath = "lemmas.nml",
|
|
24
|
-
fileContext =
|
|
23
|
+
fileContext = NominalFileContext.fromFilePathNodeAndTokens(filePath, tokens, node, context),
|
|
25
24
|
nominalFileContext = fileContext; ///
|
|
26
25
|
|
|
27
26
|
return nominalFileContext;
|
package/test/main.js
CHANGED