occam-verify-cli 0.0.309 → 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 +37 -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 +37 -58
  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,28 +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
64
  getFilePaths() { return this.release.getFilePaths(); }
58
65
 
59
- getFileContent(filePath) {
60
- const file = this.release.getFile(filePath),
61
- fileContent = file.getContent();
62
-
63
- return fileContent;
64
- }
65
-
66
66
  getDependencies() { return this.release.getDependencies(); }
67
67
 
68
68
  getRules(releaseNames = []) {
69
- const rules = [],
70
- releaseName = this.getReleaseName(),
69
+ const name = this.getName(),
70
+ rules = [],
71
+ releaseName = name, ///
71
72
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
72
73
 
73
74
  if (!releaseNamesIncludesReleaseName) {
@@ -92,8 +93,9 @@ export default class ReleaseContext {
92
93
  }
93
94
 
94
95
  getTypes(releaseNames = []) {
95
- const types = [],
96
- releaseName = this.getReleaesName(),
96
+ const name = this.getName(),
97
+ types = [],
98
+ releaseName = name, ///
97
99
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
98
100
 
99
101
  if (!releaseNamesIncludesReleaseName) {
@@ -118,8 +120,9 @@ export default class ReleaseContext {
118
120
  }
119
121
 
120
122
  getAxioms(releaseNames = []) {
121
- const axioms = [],
122
- releaseName = this.getReleaseName(),
123
+ const name = this.getName(),
124
+ axioms = [],
125
+ releaseName = name, ///
123
126
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
124
127
 
125
128
  if (!releaseNamesIncludesReleaseName) {
@@ -144,8 +147,9 @@ export default class ReleaseContext {
144
147
  }
145
148
 
146
149
  getCombinators(releaseNames = []) {
147
- const combinators = [],
148
- releaseName = this.getReleaseName(),
150
+ const name = this.getName(),
151
+ combinators = [],
152
+ releaseName = name, ///
149
153
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
150
154
 
151
155
  if (!releaseNamesIncludesReleaseName) {
@@ -170,8 +174,9 @@ export default class ReleaseContext {
170
174
  }
171
175
 
172
176
  getConstructors(releaseNames = []) {
173
- const releaseName = this.getReleaseName(),
177
+ const name = this.getName(),
174
178
  constructors = [],
179
+ releaseName = name, ///
175
180
  releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
176
181
 
177
182
  if (!releaseNamesIncludesReleaseName) {
@@ -195,20 +200,6 @@ export default class ReleaseContext {
195
200
  return constructors;
196
201
  }
197
202
 
198
- getCustomGrammar() {
199
- const releaseName = this.getReleaseName(),
200
- name = releaseName, ///
201
- termBNF = this.release.getTermBNF(),
202
- statementBNF = this.release.getStatementBNF(),
203
- metastatementBNF = this.release.getMetastatementBNF(),
204
- typePattern = this.release.getTypePattern(),
205
- symbolPattern = this.release.getSymbolPattern(),
206
- operatorPattern = this.release.getOperatorPattern(),
207
- customGrammar = CustomGrammar.fromNameTermBNFStatementBNFMetastatementBNFTypePatternSymbolPatternAndOperatorPattern(name, termBNF, statementBNF, metastatementBNF, typePattern, symbolPattern, operatorPattern);
208
-
209
- return customGrammar;
210
- }
211
-
212
203
  addFileContext(fileContext) {
213
204
  this.fileContexts.push(fileContext);
214
205
  }
@@ -217,45 +208,33 @@ export default class ReleaseContext {
217
208
 
218
209
  parse(tokens) { return this.florenceParser.parse(tokens); }
219
210
 
220
- trace(message) { this.log.trace(message); }
221
-
222
- debug(message) { this.log.debug(message); }
223
-
224
- info(message) { this.log.info(message); }
225
-
226
- warning(message) { this.log.warning(message); }
227
-
228
- error(message) { this.log.error(message); }
229
-
230
- fatal(message) { this.log.fatal(message); }
231
-
232
211
  initialise(releaseContexts, dependencyReleaseContexts) {
233
- this.releaseContexts = releaseContexts;
234
-
235
212
  const releaseContext = this; ///
236
213
 
237
214
  releaseContexts = [ releaseContext, ...dependencyReleaseContexts ]; ///
238
215
 
239
- const customGrammars = releaseContexts.map((releaseContext) => {
240
- const customGrammar = releaseContext.getCustomGrammar();
241
-
242
- return customGrammar;
243
- }),
244
- combinedCustomGrammar = CombinedCustomGrammar.fromCustomGrammars(customGrammars);
216
+ const combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts);
245
217
 
246
218
  this.florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar);
247
219
 
248
220
  this.florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
221
+
222
+ this.releaseContexts = releaseContexts;
249
223
  }
250
224
 
251
225
  static fromLogAndRelease(log, release, ...remainingArguments) {
252
226
  const verified = false,
227
+ customGrammar = customGrammarFromRelease(release),
253
228
  fileContexts = [],
254
229
  florenceLexer = null,
255
230
  florenceParser = null,
256
231
  releaseContexts = [],
257
- releaseContext = new ReleaseContext(log, release, verified, fileContexts, florenceLexer, florenceParser, releaseContexts, ...remainingArguments);
232
+ releaseContext = new ReleaseContext(log, release, verified, customGrammar, fileContexts, florenceLexer, florenceParser, releaseContexts, ...remainingArguments);
258
233
 
259
234
  return releaseContext;
260
235
  }
261
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(),