occam-verify-cli 0.0.308 → 0.0.310

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 (49) hide show
  1. package/bin/abbreviations.js +2 -4
  2. package/bin/main.js +10 -10
  3. package/bin/options.js +1 -3
  4. package/bin/utilities/logging.js +42 -0
  5. package/bin/utilities/release.js +77 -0
  6. package/lib/context/file.js +33 -16
  7. package/lib/context/metaproof.js +13 -13
  8. package/lib/context/proof.js +13 -13
  9. package/lib/context/release.js +38 -68
  10. package/lib/mixins/log.js +41 -0
  11. package/lib/utilities/customGrammar.js +32 -0
  12. package/lib/utilities/tokens.js +63 -0
  13. package/lib/verify/assertion/type.js +4 -4
  14. package/lib/verify/axiom.js +3 -3
  15. package/lib/verify/label.js +2 -2
  16. package/lib/verify/metastatement/qualified.js +2 -2
  17. package/lib/verify/metastatement/unqualified.js +2 -2
  18. package/lib/verify/release.js +2 -2
  19. package/lib/verify/rule.js +3 -3
  20. package/lib/verify/statement.js +3 -3
  21. package/lib/verify/statementAsCombinator.js +4 -4
  22. package/lib/verify/term.js +2 -2
  23. package/lib/verify/termAsConstructor.js +7 -7
  24. package/lib/verify/termAsVariable.js +2 -2
  25. package/lib/verify/type.js +5 -5
  26. package/lib/verify/variable.js +4 -4
  27. package/package.json +2 -2
  28. package/src/context/file.js +26 -10
  29. package/src/context/metaproof.js +6 -6
  30. package/src/context/proof.js +6 -6
  31. package/src/context/release.js +38 -54
  32. package/src/mixins/log.js +28 -0
  33. package/src/utilities/customGrammar.js +27 -0
  34. package/src/utilities/tokens.js +67 -0
  35. package/src/verify/assertion/type.js +3 -3
  36. package/src/verify/axiom.js +2 -2
  37. package/src/verify/label.js +1 -1
  38. package/src/verify/metastatement/qualified.js +1 -1
  39. package/src/verify/metastatement/unqualified.js +1 -1
  40. package/src/verify/release.js +1 -1
  41. package/src/verify/rule.js +2 -2
  42. package/src/verify/statement.js +2 -2
  43. package/src/verify/statementAsCombinator.js +3 -3
  44. package/src/verify/term.js +1 -1
  45. package/src/verify/termAsConstructor.js +6 -6
  46. package/src/verify/termAsVariable.js +1 -1
  47. package/src/verify/type.js +4 -4
  48. package/src/verify/variable.js +3 -3
  49. package/bin/loadReleaseContexts.js +0 -68
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ import { levels } from "necessary";
3
4
  import { rewriteNodes } from "occam-grammar-utilities";
4
5
 
5
6
  import { push } from "../utilities/array";
7
+ import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "../utilities/tokens";
8
+
9
+ const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
6
10
 
7
11
  export default class FileContext {
8
- constructor(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
12
+ constructor(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
13
+ this.filePath = filePath;
9
14
  this.tokens = tokens;
10
15
  this.node = node;
11
16
  this.rules = rules;
@@ -17,6 +22,10 @@ export default class FileContext {
17
22
  this.releaseContext = releaseContext;
18
23
  }
19
24
 
25
+ getFilePath() {
26
+ return this.filePath;
27
+ }
28
+
20
29
  getTokens() {
21
30
  return this.tokens;
22
31
  }
@@ -236,21 +245,28 @@ export default class FileContext {
236
245
  this.constructors.push(constructor);
237
246
  }
238
247
 
239
- trace(message) { this.releaseContext.trace(message); }
248
+ trace(message, node) { this.log(node, TRACE_LEVEL, message); }
240
249
 
241
- debug(message) { this.releaseContext.debug(message); }
250
+ debug(message, node) { this.log(node, DEBUG_LEVEL, message); }
242
251
 
243
- info(message) { this.releaseContext.info(message); }
252
+ info(message, node) { this.log(node, INFO_LEVEL, message); }
244
253
 
245
- warning(message) { this.releaseContext.warning(message); }
254
+ warning(message, node) { this.log(node, WARNING_LEVEL, message); }
246
255
 
247
- error(message) { this.releaseContext.error(message); }
256
+ error(message, node) { this.log(node, ERROR_LEVEL, message); }
248
257
 
249
- fatal(message) { this.releaseContext.fatal(message); }
258
+ fatal(message, node) { this.log(node, FATAL_LEVEL, message); }
259
+
260
+ log(node, level, message) {
261
+ const leastLineIndex = leastLineIndexFromNodeAndTokens(node, this.tokens),
262
+ greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, this.tokens);
263
+
264
+ this.releaseContext.log(level, message, this.filePath, leastLineIndex, greatestLineIndex);
265
+ }
250
266
 
251
267
  static fromReleaseContextAndFilePath(releaseContext, filePath) {
252
- const fileContent = releaseContext.getFileContent(filePath),
253
- content = fileContent, ///
268
+ const file = releaseContext.getFile(filePath),
269
+ content = file.getContent(),
254
270
  tokens = releaseContext.tokenise(content),
255
271
  node = releaseContext.parse(tokens);
256
272
 
@@ -262,7 +278,7 @@ export default class FileContext {
262
278
  variables = [],
263
279
  combinators = [],
264
280
  constructors = [],
265
- fileContext = new FileContext(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
281
+ fileContext = new FileContext(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
266
282
 
267
283
  return fileContext;
268
284
  }
@@ -79,17 +79,17 @@ export default class MetaproofContext {
79
79
  this.metaAssertions.push(metaAssertion);
80
80
  }
81
81
 
82
- trace(message) { this.context.trace(message); }
82
+ trace(message, node) { this.context.trace(message, node); }
83
83
 
84
- debug(message) { this.context.debug(message); }
84
+ debug(message, node) { this.context.debug(message, node); }
85
85
 
86
- info(message) { this.context.info(message); }
86
+ info(message, node) { this.context.info(message, node); }
87
87
 
88
- warning(message) { this.context.warning(message); }
88
+ warning(message, node) { this.context.warning(message, node); }
89
89
 
90
- error(message) { this.context.error(message); }
90
+ error(message, node) { this.context.error(message, node); }
91
91
 
92
- fatal(message) { this.context.fatal(message); }
92
+ fatal(message, node) { this.context.fatal(message, node); }
93
93
 
94
94
  static fromContext(context) {
95
95
  const derived = false,
@@ -80,17 +80,17 @@ export default class ProofContext {
80
80
  this.statementNodes.push(statementNode);
81
81
  }
82
82
 
83
- trace(message) { this.context.trace(message); }
83
+ trace(message, node) { this.context.trace(message, node); }
84
84
 
85
- debug(message) { this.context.debug(message); }
85
+ debug(message, node) { this.context.debug(message, node); }
86
86
 
87
- info(message) { this.context.info(message); }
87
+ info(message, node) { this.context.info(message, node); }
88
88
 
89
- warning(message) { this.context.warning(message); }
89
+ warning(message, node) { this.context.warning(message, node); }
90
90
 
91
- error(message) { this.context.error(message); }
91
+ error(message, node) { this.context.error(message, node); }
92
92
 
93
- fatal(message) { this.context.fatal(message); }
93
+ fatal(message, node) { this.context.fatal(message, node); }
94
94
 
95
95
  static fromContext(context) {
96
96
  const derived = false,
@@ -1,17 +1,22 @@
1
1
  "use strict";
2
2
 
3
- import { CustomGrammar, lexersUtilities, parsersUtilities, CombinedCustomGrammar } from "occam-custom-grammars";
3
+ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
4
+
5
+ import logMixins from "../mixins/log";
4
6
 
5
7
  import { push } from "../utilities/array";
8
+ import { customGrammarFromRelease, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
6
9
 
7
10
  const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
8
11
  { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
9
12
 
10
- export default class ReleaseContext {
11
- constructor(log, release, verified, fileContexts, florenceLexer, florenceParser, releaseContexts) {
13
+ class ReleaseContext {
14
+ constructor(log, release, verified, customGrammar, fileContexts, florenceLexer, florenceParser, releaseContexts) {
12
15
  this.log = log;
13
16
  this.release = release;
14
17
  this.verified = verified;
18
+ this.customGrammar = customGrammar;
19
+
15
20
  this.fileContexts = fileContexts;
16
21
  this.florenceLexer = florenceLexer;
17
22
  this.florenceParser = florenceParser;
@@ -30,6 +35,10 @@ export default class ReleaseContext {
30
35
  return this.verified;
31
36
  }
32
37
 
38
+ getCustomGrammar() {
39
+ return this.customGrammar;
40
+ }
41
+
33
42
  getFileContexts() {
34
43
  return this.fileContexts;
35
44
  }
@@ -46,23 +55,20 @@ export default class ReleaseContext {
46
55
  return this.releaseContexts;
47
56
  }
48
57
 
49
- getReleaseName() {
50
- const releaseName = this.release.getName();
58
+ getFile(filePath) { return this.release.getFile(filePath); }
51
59
 
52
- return releaseName;
53
- }
60
+ getName() { return this.release.getName(); }
54
61
 
55
62
  getVersion() { return this.release.getVersion(); }
56
63
 
57
- getFilePaths() { return this.release.getFilePatns(); }
58
-
59
- getFileContent(filePath) { return this.release.getFileContent(filePath); }
64
+ getFilePaths() { return this.release.getFilePaths(); }
60
65
 
61
66
  getDependencies() { return this.release.getDependencies(); }
62
67
 
63
68
  getRules(releaseNames = []) {
64
- const rules = [],
65
- releaseName = this.getReleaseName(),
69
+ const name = this.getName(),
70
+ rules = [],
71
+ releaseName = name, ///
66
72
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
67
73
 
68
74
  if (!releaseNamesIncludesReleaseName) {
@@ -87,8 +93,9 @@ export default class ReleaseContext {
87
93
  }
88
94
 
89
95
  getTypes(releaseNames = []) {
90
- const types = [],
91
- releaseName = this.getReleaesName(),
96
+ const name = this.getName(),
97
+ types = [],
98
+ releaseName = name, ///
92
99
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
93
100
 
94
101
  if (!releaseNamesIncludesReleaseName) {
@@ -113,8 +120,9 @@ export default class ReleaseContext {
113
120
  }
114
121
 
115
122
  getAxioms(releaseNames = []) {
116
- const axioms = [],
117
- releaseName = this.getReleaseName(),
123
+ const name = this.getName(),
124
+ axioms = [],
125
+ releaseName = name, ///
118
126
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
119
127
 
120
128
  if (!releaseNamesIncludesReleaseName) {
@@ -139,8 +147,9 @@ export default class ReleaseContext {
139
147
  }
140
148
 
141
149
  getCombinators(releaseNames = []) {
142
- const combinators = [],
143
- releaseName = this.getReleaseName(),
150
+ const name = this.getName(),
151
+ combinators = [],
152
+ releaseName = name, ///
144
153
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
145
154
 
146
155
  if (!releaseNamesIncludesReleaseName) {
@@ -165,8 +174,9 @@ export default class ReleaseContext {
165
174
  }
166
175
 
167
176
  getConstructors(releaseNames = []) {
168
- const releaseName = this.getReleaseName(),
177
+ const name = this.getName(),
169
178
  constructors = [],
179
+ releaseName = name, ///
170
180
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
171
181
 
172
182
  if (!releaseNamesIncludesReleaseName) {
@@ -190,20 +200,6 @@ export default class ReleaseContext {
190
200
  return constructors;
191
201
  }
192
202
 
193
- getCustomGrammar() {
194
- const releaseName = this.getReleaseName(),
195
- name = releaseName, ///
196
- termBNF = this.release.getTermBNF(),
197
- statementBNF = this.release.getStatementBNF(),
198
- metastatementBNF = this.release.getMetastatementBNF(),
199
- typePattern = this.release.getTypePattern(),
200
- symbolPattern = this.release.getSymbolPattern(),
201
- operatorPattern = this.release.getOperatorPattern(),
202
- customGrammar = CustomGrammar.fromNameTermBNFStatementBNFMetastatementBNFTypePatternSymbolPatternAndOperatorPattern(name, termBNF, statementBNF, metastatementBNF, typePattern, symbolPattern, operatorPattern);
203
-
204
- return customGrammar;
205
- }
206
-
207
203
  addFileContext(fileContext) {
208
204
  this.fileContexts.push(fileContext);
209
205
  }
@@ -212,45 +208,33 @@ export default class ReleaseContext {
212
208
 
213
209
  parse(tokens) { return this.florenceParser.parse(tokens); }
214
210
 
215
- trace(message) { this.log.trace(message); }
216
-
217
- debug(message) { this.log.debug(message); }
218
-
219
- info(message) { this.log.info(message); }
220
-
221
- warning(message) { this.log.warning(message); }
222
-
223
- error(message) { this.log.error(message); }
224
-
225
- fatal(message) { this.log.fatal(message); }
226
-
227
211
  initialise(releaseContexts, dependencyReleaseContexts) {
228
- this.releaseContexts = releaseContexts;
229
-
230
212
  const releaseContext = this; ///
231
213
 
232
214
  releaseContexts = [ releaseContext, ...dependencyReleaseContexts ]; ///
233
215
 
234
- const customGrammars = releaseContexts.map((releaseContext) => {
235
- const customGrammar = releaseContext.getCustomGrammar();
236
-
237
- return customGrammar;
238
- }),
239
- combinedCustomGrammar = CombinedCustomGrammar.fromCustomGrammars(customGrammars);
216
+ const combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts);
240
217
 
241
218
  this.florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar);
242
219
 
243
220
  this.florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
221
+
222
+ this.releaseContexts = releaseContexts;
244
223
  }
245
224
 
246
225
  static fromLogAndRelease(log, release, ...remainingArguments) {
247
226
  const verified = false,
227
+ customGrammar = customGrammarFromRelease(release),
248
228
  fileContexts = [],
249
229
  florenceLexer = null,
250
230
  florenceParser = null,
251
231
  releaseContexts = [],
252
- releaseContext = new ReleaseContext(log, release, verified, fileContexts, florenceLexer, florenceParser, releaseContexts, ...remainingArguments);
232
+ releaseContext = new ReleaseContext(log, release, verified, customGrammar, fileContexts, florenceLexer, florenceParser, releaseContexts, ...remainingArguments);
253
233
 
254
234
  return releaseContext;
255
235
  }
256
236
  }
237
+
238
+ Object.assign(ReleaseContext.prototype, logMixins);
239
+
240
+ export default ReleaseContext;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ import { levels } from "necessary";
4
+
5
+ const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
6
+
7
+ function trace(message) { this.log(TRACE_LEVEL, message); }
8
+
9
+ function debug(message) { this.log(DEBUG_LEVEL, message); }
10
+
11
+ function info(message) { this.log(INFO_LEVEL, message); }
12
+
13
+ function warning(message) { this.log(WARNING_LEVEL, message); }
14
+
15
+ function error(message) { this.log(ERROR_LEVEL, message); }
16
+
17
+ function fatal(message) { this.log(FATAL_LEVEL, message); }
18
+
19
+ const logMixins = {
20
+ trace,
21
+ debug,
22
+ info,
23
+ warning,
24
+ error,
25
+ fatal
26
+ };
27
+
28
+ export default logMixins;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ import { CustomGrammar, CombinedCustomGrammar } from "occam-custom-grammars";
4
+
5
+ export function customGrammarFromRelease(release) {
6
+ const name = release.getName(),
7
+ termBNF = release.getTermBNF(),
8
+ statementBNF = release.getStatementBNF(),
9
+ metastatementBNF = release.getMetastatementBNF(),
10
+ typePattern = release.getTypePattern(),
11
+ symbolPattern = release.getSymbolPattern(),
12
+ operatorPattern = release.getOperatorPattern(),
13
+ customGrammar = CustomGrammar.fromNameTermBNFStatementBNFMetastatementBNFTypePatternSymbolPatternAndOperatorPattern(name, termBNF, statementBNF, metastatementBNF, typePattern, symbolPattern, operatorPattern);
14
+
15
+ return customGrammar;
16
+ }
17
+
18
+ export function combinedCustomGrammarFromReleaseContexts(releaseContexts) {
19
+ const customGrammars = releaseContexts.map((releaseContext) => {
20
+ const customGrammar = releaseContext.getCustomGrammar();
21
+
22
+ return customGrammar;
23
+ }),
24
+ combinedCustomGrammar = CombinedCustomGrammar.fromCustomGrammars(customGrammars);
25
+
26
+ return combinedCustomGrammar;
27
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ export function leastLineIndexFromNodeAndTokens(node, tokens) {
4
+ let leastLineIndex = undefined; ///
5
+
6
+ const firstSignificantToken = node.getFirstSignificantToken(),
7
+ firstSignificantTokenIndex = significantTokenIndexFromSignificantTokenAndTokens(firstSignificantToken, tokens); ///
8
+
9
+ let lineIndex = 0;
10
+
11
+ tokens.some((token, tokenIndex) => { ///
12
+ if (tokenIndex === firstSignificantTokenIndex) {
13
+ leastLineIndex = lineIndex; ///
14
+
15
+ return true;
16
+ }
17
+
18
+ const tokenEndOfLineToken = token.isEndOfLineToken();
19
+
20
+ if (tokenEndOfLineToken) {
21
+ lineIndex += 1;
22
+ }
23
+ });
24
+
25
+ return leastLineIndex;
26
+ }
27
+
28
+ export function greatestLineIndexFromNodeAndTokens(node, tokens) {
29
+ let greatestLineIndex = undefined; ///
30
+
31
+ const lastSignificantToken = node.getLastSignificantToken(),
32
+ lastSignificantTokenIndex = significantTokenIndexFromSignificantTokenAndTokens(lastSignificantToken, tokens);
33
+
34
+ let lineIndex = 0;
35
+
36
+ tokens.some((token, tokenIndex) => { ///
37
+ if (tokenIndex === lastSignificantTokenIndex) {
38
+ greatestLineIndex = lineIndex; ///
39
+
40
+ return true;
41
+ }
42
+
43
+ const tokenEndOfLineToken = token.isEndOfLineToken();
44
+
45
+ if (tokenEndOfLineToken) {
46
+ lineIndex += 1;
47
+ }
48
+ });
49
+
50
+ return greatestLineIndex;
51
+ }
52
+
53
+ function significantTokenIndexFromSignificantTokenAndTokens(significantToken, tokens) {
54
+ let significantTokenIndex = -1;
55
+
56
+ tokens.some((token) => {
57
+ significantTokenIndex++;
58
+
59
+ const tokenEqualToSignificantToken = token.isEqualTo(significantToken);
60
+
61
+ if (tokenEqualToSignificantToken) {
62
+ return true;
63
+ }
64
+ });
65
+
66
+ return significantTokenIndex;
67
+ }
@@ -17,7 +17,7 @@ export default function verifyTypeAssertion(typeAssertionNode, context) {
17
17
  typePresent = context.isTypePresentByTypeName(typeName);
18
18
 
19
19
  if (!typePresent) {
20
- context.error(`The ${typeName} type is not present.`);
20
+ context.error(`The ${typeName} type is not present.`, typeAssertionNode);
21
21
  } else {
22
22
  const derived = context.isDerived();
23
23
 
@@ -37,7 +37,7 @@ export default function verifyTypeAssertion(typeAssertionNode, context) {
37
37
  value = firstValue;
38
38
 
39
39
  if (value !== undefined) {
40
- context.error(`The value of the ${variableName} variable is not undefined.`);
40
+ context.error(`The value of the ${variableName} variable is not undefined.`, typeAssertionNode);
41
41
  } else {
42
42
  const type = context.findTypeByTypeName(typeName),
43
43
  firstType = first(types),
@@ -45,7 +45,7 @@ export default function verifyTypeAssertion(typeAssertionNode, context) {
45
45
  typeSubTypeOfVariableType = type.isSubTypeOf(variableType);
46
46
 
47
47
  if (!typeSubTypeOfVariableType) {
48
- context.error(`The asserted type of the ${variableName} variable is not a sub-type of its declared type.`);
48
+ context.error(`The asserted type of the ${variableName} variable is not a sub-type of its declared type.`, typeAssertionNode);
49
49
  } else {
50
50
  const name = variableName, ///
51
51
  variable = Variable.fromTypeAndName(type, name);
@@ -17,7 +17,7 @@ export default function verifyAxiom(axiomNode, context) {
17
17
  const labelNodes = labelNodesQuery(axiomNode),
18
18
  labelsString = nodesAsString(labelNodes);
19
19
 
20
- context.debug(`Verifying the '${labelsString}' axiom...`);
20
+ context.debug(`Verifying the '${labelsString}' axiom...`, axiomNode);
21
21
 
22
22
  const proofContext = ProofContext.fromContext(context);
23
23
 
@@ -61,7 +61,7 @@ export default function verifyAxiom(axiomNode, context) {
61
61
  }
62
62
 
63
63
  if (axiomVerified) {
64
- context.info(`Verified the '${labelsString}' axiom.`);
64
+ context.info(`Verified the '${labelsString}' axiom.`, axiomNode);
65
65
  }
66
66
 
67
67
  return axiomVerified;
@@ -10,7 +10,7 @@ export default function verifyLabel(labelNode, labels, context) {
10
10
  labelPresent = context.isLabelPresent(label);
11
11
 
12
12
  if (labelPresent) {
13
- context.error(`The label ${label} is already present`);
13
+ context.error(`The label ${label} is already present`, labelNode);
14
14
  } else {
15
15
  labels.push(label);
16
16
 
@@ -26,7 +26,7 @@ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode,
26
26
  if (qualifiedMetastatementVerified) {
27
27
  const metastatementString = nodeAsString(metastatementNode);
28
28
 
29
- context.debug(`Verified the '${metastatementString}' qualified metastatement.`);
29
+ context.debug(`Verified the '${metastatementString}' qualified metastatement.`, qualifiedMetastatementNode);
30
30
  }
31
31
 
32
32
  return qualifiedMetastatementVerified;
@@ -28,7 +28,7 @@ export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementN
28
28
  if (unqualifiedMetastatementVerified) {
29
29
  const metastatementString = nodeAsString(metastatementNode);
30
30
 
31
- context.debug(`Verified the '${metastatementString}' unqualified metastatement.`);
31
+ context.debug(`Verified the '${metastatementString}' unqualified metastatement.`, unqualifiedMetastatementNode);
32
32
  }
33
33
 
34
34
  return unqualifiedMetastatementVerified;
@@ -42,7 +42,7 @@ export default function verifyRelease(releaseName, releaseContextMap, releaseCon
42
42
  if (releaseVerified) {
43
43
  releaseContexts.push(releaseContext);
44
44
 
45
- releaseContext.info(`Verified the '${releaseName}' release.`);
45
+ releaseContext.info(`Verified the '${releaseName}' package.`);
46
46
  }
47
47
  }
48
48
  }
@@ -26,7 +26,7 @@ export default function verifyRule(ruleNode, context) {
26
26
 
27
27
  context = metaproofContext; ///
28
28
 
29
- context.debug(`Verifying the '${labelsString}' rule...`);
29
+ context.debug(`Verifying the '${labelsString}' rule...`, ruleNode);
30
30
 
31
31
  const labels = [],
32
32
  labelsVerified = verifyLabels(labelNodes, labels, context);
@@ -69,7 +69,7 @@ export default function verifyRule(ruleNode, context) {
69
69
  }
70
70
 
71
71
  if (ruleVerified) {
72
- context.info(`Verified the '${labelsString}' rule.`);
72
+ context.info(`Verified the '${labelsString}' rule.`, ruleNode);
73
73
  }
74
74
  }
75
75
 
@@ -14,7 +14,7 @@ export default function verifyStatement(statementNode, context) {
14
14
 
15
15
  const statementString = nodeAsString(statementNode);
16
16
 
17
- context.debug(`Verifying the '${statementString}' statement...`);
17
+ context.debug(`Verifying the '${statementString}' statement...`, statementNode);
18
18
 
19
19
  const equalityNode = equalityNodeQuery(statementNode),
20
20
  typeAssertionNode = typeAssertionNodeQuery(statementNode);
@@ -34,7 +34,7 @@ export default function verifyStatement(statementNode, context) {
34
34
  }
35
35
 
36
36
  if (statementVerified) {
37
- context.info(`Verified the '${statementString}' statement.`);
37
+ context.info(`Verified the '${statementString}' statement.`, statementNode);
38
38
  }
39
39
 
40
40
  return statementVerified;
@@ -11,7 +11,7 @@ export default function verifyStatementAsCombinator(statementNode, context) {
11
11
 
12
12
  const statementString = nodeAsString(statementNode);
13
13
 
14
- context.debug(`Verifying the ${statementString} statement as a combinator...`);
14
+ context.debug(`Verifying the ${statementString} statement as a combinator...`, statementNode);
15
15
 
16
16
  const nonTerminalNode = statementNode, ///
17
17
  childNodes = nonTerminalNode.getChildNodes(),
@@ -28,7 +28,7 @@ export default function verifyStatementAsCombinator(statementNode, context) {
28
28
 
29
29
  const statementString = nodeAsString(statementNode);
30
30
 
31
- context.info(`Verified the '${statementString}' combinator.`);
31
+ context.info(`Verified the '${statementString}' combinator.`, statementNode);
32
32
  }
33
33
 
34
34
  return statementVerifiedAsCombinator;
@@ -117,7 +117,7 @@ function verifyTypeNode(typeNode, context) {
117
117
  typePresent = context.isTypePresentByTypeName(typeName);
118
118
 
119
119
  if (!typePresent) {
120
- context.error(`The type '${typeName}' is missing.`);
120
+ context.error(`The type '${typeName}' is missing.`, typeNode);
121
121
  } else {
122
122
  typeNodeVerified = true;
123
123
  }
@@ -153,7 +153,7 @@ function verifyArgumentNode(argumentNode, constructorArgumentNode, context) {
153
153
  if (termNode === null) {
154
154
  const argumentString = nodeAsString(argumentNode);
155
155
 
156
- context.error(`The ${argumentString} argument should be a term, not a type`);
156
+ context.error(`The ${argumentString} argument should be a term, not a type`, argumentNode);
157
157
  } else {
158
158
  const types = [],
159
159
  values = [],
@@ -15,7 +15,7 @@ export default function verifyTermAsConstructor(termNode, typeNode, context) {
15
15
 
16
16
  const termString = nodeAsString(termNode);
17
17
 
18
- context.debug(`Verifying the '${termString}' term as a constructor...`);
18
+ context.debug(`Verifying the '${termString}' term as a constructor...`, termNode);
19
19
 
20
20
  const nonTerminalNode = termNode, ///
21
21
  childNodes = nonTerminalNode.getChildNodes(),
@@ -36,7 +36,7 @@ export default function verifyTermAsConstructor(termNode, typeNode, context) {
36
36
  } else {
37
37
  const termString = nodeAsString(termNode);
38
38
 
39
- context.error(`The '${termString}' constructor's '${typeName}' type is missing.`);
39
+ context.error(`The '${termString}' constructor's '${typeName}' type is missing.`, termNode);
40
40
  }
41
41
  }
42
42
  }
@@ -48,7 +48,7 @@ export default function verifyTermAsConstructor(termNode, typeNode, context) {
48
48
 
49
49
  const termString = nodeAsString(termNode);
50
50
 
51
- context.info(`Verified the '${termString}' constructor.`);
51
+ context.info(`Verified the '${termString}' constructor.`, termNode);
52
52
  }
53
53
 
54
54
  return termVerifiedAsConstructor;
@@ -121,7 +121,7 @@ function verifyNonTerminalNode(nonTerminalNode, context) {
121
121
  if (type !== null) {
122
122
  const termString = nodeAsString(termNode);
123
123
 
124
- context.error(`The type of the constructor's compound '${termString}' term node is not null.`);
124
+ context.error(`The type of the constructor's compound '${termString}' term node is not null.`, termNode);
125
125
  } else {
126
126
  nonTerminalNodeVerified = true; ///
127
127
  }
@@ -151,13 +151,13 @@ function verifyArgumentNode(argumentNode, context) {
151
151
  if (typeNode === null) {
152
152
  const argumentString = nodeAsString(argumentNode);
153
153
 
154
- context.error(`The ${argumentString} argument should be a type.`);
154
+ context.error(`The ${argumentString} argument should be a type.`, argumentNode);
155
155
  } else {
156
156
  const typeName = typeNameFromTypeNode(typeNode),
157
157
  typePresent = context.isTypePresentByTypeName(typeName);
158
158
 
159
159
  if (!typePresent) {
160
- context.error(`The type '${typeName}' is missing.`);
160
+ context.error(`The type '${typeName}' is missing.`, typeNode);
161
161
  } else {
162
162
  typeNodeVerified = true;
163
163
  }
@@ -14,7 +14,7 @@ export default function verifyTermAsVariable(termNode, types, names, values, con
14
14
  variablePresent = context.isVariablePresentByVariableName(variableName);
15
15
 
16
16
  if (!variablePresent) {
17
- context.error(`The ${variableName} variable is not present.`)
17
+ context.error(`The ${variableName} variable is not present.`, variableNode)
18
18
  } else {
19
19
  const variable = context.findVariableByVariableName(variableName),
20
20
  type = variable.getType(),