occam-verify-cli 1.0.318 → 1.0.325

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 (53) hide show
  1. package/lib/context/file.js +108 -126
  2. package/lib/context/local.js +21 -8
  3. package/lib/context/release.js +58 -7
  4. package/lib/dom/assertion/type.js +3 -3
  5. package/lib/dom/declaration/complexType.js +125 -101
  6. package/lib/dom/declaration/constructor.js +5 -5
  7. package/lib/dom/declaration/metavariable.js +3 -3
  8. package/lib/dom/declaration/simpleType.js +58 -52
  9. package/lib/dom/declaration/typePrefix.js +18 -7
  10. package/lib/dom/declaration/variable.js +5 -5
  11. package/lib/dom/metavariable.js +3 -3
  12. package/lib/dom/property.js +4 -4
  13. package/lib/dom/topLevelAssertion.js +1 -43
  14. package/lib/dom/type.js +107 -21
  15. package/lib/dom/variable.js +4 -4
  16. package/lib/node/declaration/complexType.js +22 -1
  17. package/lib/node/declaration/simpleType.js +22 -1
  18. package/lib/node/type.js +35 -9
  19. package/lib/unifier/metavariable.js +2 -2
  20. package/lib/unifier/statementWithCombinator.js +3 -3
  21. package/lib/unifier/termWithConstructor.js +2 -2
  22. package/lib/utilities/json.js +8 -6
  23. package/lib/utilities/node.js +4 -4
  24. package/lib/utilities/type.js +10 -5
  25. package/lib/verifier/combinator.js +2 -2
  26. package/lib/verifier/constructor.js +3 -3
  27. package/package.json +1 -1
  28. package/src/context/file.js +137 -171
  29. package/src/context/local.js +7 -3
  30. package/src/context/release.js +54 -8
  31. package/src/dom/assertion/type.js +3 -3
  32. package/src/dom/declaration/complexType.js +159 -132
  33. package/src/dom/declaration/constructor.js +6 -6
  34. package/src/dom/declaration/metavariable.js +3 -3
  35. package/src/dom/declaration/simpleType.js +74 -68
  36. package/src/dom/declaration/typePrefix.js +24 -6
  37. package/src/dom/declaration/variable.js +6 -6
  38. package/src/dom/metavariable.js +2 -2
  39. package/src/dom/property.js +1 -1
  40. package/src/dom/topLevelAssertion.js +3 -15
  41. package/src/dom/type.js +132 -22
  42. package/src/dom/variable.js +4 -4
  43. package/src/node/declaration/complexType.js +21 -0
  44. package/src/node/declaration/simpleType.js +21 -0
  45. package/src/node/type.js +42 -9
  46. package/src/unifier/metavariable.js +2 -2
  47. package/src/unifier/statementWithCombinator.js +2 -2
  48. package/src/unifier/termWithConstructor.js +2 -2
  49. package/src/utilities/json.js +18 -10
  50. package/src/utilities/node.js +6 -3
  51. package/src/utilities/type.js +12 -5
  52. package/src/verifier/combinator.js +2 -2
  53. package/src/verifier/constructor.js +3 -3
@@ -28,6 +28,13 @@ export default class ComplexTypeDeclarationNode extends NonTerminalNode {
28
28
  return provisional;
29
29
  }
30
30
 
31
+ isPrefixed() {
32
+ const typeNode = this.getTypeNode(),
33
+ prefixed = typeNode.isPrefixed();
34
+
35
+ return prefixed;
36
+ }
37
+
31
38
  getTypeName() {
32
39
  const typeNode = this.getTypeNode(),
33
40
  typeName = typeNode.getTypeName();
@@ -63,6 +70,20 @@ export default class ComplexTypeDeclarationNode extends NonTerminalNode {
63
70
  return superTypeNodes;
64
71
  }
65
72
 
73
+ getTypePrefixName() {
74
+ const typeNode = this.getTypeNode(),
75
+ typePrefixName = typeNode.getTypePrefixName();
76
+
77
+ return typePrefixName;
78
+ }
79
+
80
+ getNominalTypeName() {
81
+ const typeNode = this.getTypeNode(),
82
+ nominalTypeName = typeNode.getNominalTypeName();
83
+
84
+ return nominalTypeName;
85
+ }
86
+
66
87
  getPropertyDeclarationNodes() {
67
88
  const ruleName = PROPERTY_DECLARATION_RULE_NAME,
68
89
  propertyDeclarationNodes = this.getNodesByRuleName(ruleName);
@@ -28,6 +28,13 @@ export default class SimpleTypeDeclarationNode extends NonTerminalNode {
28
28
  return provisional;
29
29
  }
30
30
 
31
+ isPrefixed() {
32
+ const typeNode = this.getTypeNode(),
33
+ prefixed = typeNode.isPrefixed();
34
+
35
+ return prefixed;
36
+ }
37
+
31
38
  getTypeName() {
32
39
  let typeName = null;
33
40
 
@@ -54,6 +61,13 @@ export default class SimpleTypeDeclarationNode extends NonTerminalNode {
54
61
  return typesNode;
55
62
  }
56
63
 
64
+ getTypePrefixName() {
65
+ const typeNode = this.getTypeNode(),
66
+ typePrefixName = typeNode.getTypePrefixName();
67
+
68
+ return typePrefixName;
69
+ }
70
+
57
71
  getSuperTypeNodes() {
58
72
  let superTypeNodes = [];
59
73
 
@@ -68,6 +82,13 @@ export default class SimpleTypeDeclarationNode extends NonTerminalNode {
68
82
  return superTypeNodes;
69
83
  }
70
84
 
85
+ getNominalTypeName() {
86
+ const typeNode = this.getTypeNode(),
87
+ nominalTypeName = typeNode.getNominalTypeName();
88
+
89
+ return nominalTypeName;
90
+ }
91
+
71
92
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(SimpleTypeDeclarationNode, ruleName, childNodes, opacity, precedence); }
72
93
  }
73
94
 
package/src/node/type.js CHANGED
@@ -3,11 +3,21 @@
3
3
  import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
5
  export default class TypeNode extends NonTerminalNode {
6
+ isPrefixed() {
7
+ const multiplicity = this.getMultiplicity(),
8
+ prefixed = (multiplicity > 1);
9
+
10
+ return prefixed;
11
+ }
12
+
6
13
  getTypeName() {
7
14
  let typeName;
8
15
 
16
+ const prefixed = this.isPrefixed(),
17
+ nameIndex = prefixed ? 2 : 0;
18
+
9
19
  this.someChildNode((childNode, index) => {
10
- if (index === 0) {
20
+ if (index === nameIndex) {
11
21
  const typeTerminalNode = childNode, ///
12
22
  content = typeTerminalNode.getContent();
13
23
 
@@ -23,19 +33,42 @@ export default class TypeNode extends NonTerminalNode {
23
33
  getTypePrefixName() {
24
34
  let typePrefixName = null;
25
35
 
26
- this.someChildNode((childNode, index) => {
27
- if (index === 2) {
28
- const typeTerminalNode = childNode, ///
29
- content = typeTerminalNode.getContent();
36
+ const prefixed = this.isPrefixed();
30
37
 
31
- typePrefixName = content; ///
38
+ if (prefixed) {
39
+ const prefixIndex = 0;
32
40
 
33
- return true;
34
- }
35
- });
41
+ this.someChildNode((childNode, index) => {
42
+ if (index === prefixIndex) {
43
+ const typeTerminalNode = childNode, ///
44
+ content = typeTerminalNode.getContent();
45
+
46
+ typePrefixName = content; ///
47
+
48
+ return true;
49
+ }
50
+ });
51
+ }
36
52
 
37
53
  return typePrefixName;
38
54
  }
39
55
 
56
+ getNominalTypeName() {
57
+ let nominalTypeName;
58
+
59
+ const prefixed = this.isPrefixed(),
60
+ typeName = this.getTypeName();
61
+
62
+ if (prefixed) {
63
+ const typePrefixName = this.getTypePrefixName();
64
+
65
+ nominalTypeName = `${typePrefixName}${typeName}`;
66
+ } else {
67
+ nominalTypeName = typeName; ///
68
+ }
69
+
70
+ return nominalTypeName;
71
+ }
72
+
40
73
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TypeNode, ruleName, childNodes, opacity, precedence); }
41
74
  }
@@ -31,8 +31,8 @@ class MetavariableUnifier extends Unifier {
31
31
  const { Term } = dom,
32
32
  typeNode = generalTypeNode, ///
33
33
  termNode = specificTermNode, ///
34
- typeName = typeNode.getTypeName(),
35
- type = generalContext.findTypeByTypeName(typeName),
34
+ nominalTypeName = typeNode.getNominalTypeName(),
35
+ type = generalContext.findTypeByNominalTypeName(nominalTypeName),
36
36
  context = specificContext, ///
37
37
  term = Term.fromTermNode(termNode, context),
38
38
  termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
@@ -86,13 +86,13 @@ class StatementWithCombinatorUnifier extends Unifier {
86
86
  const { Term } = dom,
87
87
  typeNode = generalTypeNode, ///
88
88
  termNode = specificTermNode, ///
89
- typeName = typeNode.getTypeName();
89
+ nominalTypeName = typeNode.getNominalTypeName();
90
90
 
91
91
  let context;
92
92
 
93
93
  context = generalContext; ///
94
94
 
95
- const type = context.findTypeByTypeName(typeName);
95
+ const type = context.findTypeByNominalTypeName(nominalTypeName);
96
96
 
97
97
  context = specificContext; ///
98
98
 
@@ -30,8 +30,8 @@ class TermWithConstructorUnifier extends Unifier {
30
30
 
31
31
  const { Term } = dom,
32
32
  typeNode = generalTypeNode, ///
33
- typeName = typeNode.getTypeName(),
34
- type = context.findTypeByTypeName(typeName);
33
+ nominalTypeName = typeNode.getNominalTypeName(),
34
+ type = context.findTypeByNominalTypeName(nominalTypeName);
35
35
 
36
36
  if (type !== null) {
37
37
  const termNode = specificTermNode, ///
@@ -20,10 +20,14 @@ export function typeFromJSON(json, context) {
20
20
  let { type } = json;
21
21
 
22
22
  if (type !== null) {
23
- const { name } = type,
24
- typeName = name; ///
23
+ json = type; ///
25
24
 
26
- type = context.findTypeByTypeName(typeName);
25
+ const { name, prefixName } = json,
26
+ nominalTypeName = (prefixName !== null) ?
27
+ `${prefixName}:${name}` :
28
+ name; ///
29
+
30
+ type = context.findTypeByNominalTypeName(nominalTypeName);
27
31
  }
28
32
 
29
33
  return type;
@@ -33,7 +37,9 @@ export function metaTypeFromJSON(json, context) {
33
37
  let { metaType } = json;
34
38
 
35
39
  if (metaType !== null) {
36
- const { name } = metaType,
40
+ json = metaType; ///
41
+
42
+ const { name } = json,
37
43
  metaTypeName = name; ///
38
44
 
39
45
  metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
@@ -172,11 +178,11 @@ export function rulesFromJSON(json, context) {
172
178
  let { rules } = json;
173
179
 
174
180
  const { Rule } = dom,
175
- rulesJSON = rules; ///
181
+ rulesJSON = rules; ///
176
182
 
177
183
  rules = rulesJSON.map((ruleJSON) => {
178
184
  const json = ruleJSON, ///
179
- rule = Rule.fromJSON(json, context);
185
+ rule = Rule.fromJSON(json, context);
180
186
 
181
187
  return rule;
182
188
  });
@@ -298,9 +304,11 @@ export function superTypesFromJSON(json, context) {
298
304
 
299
305
  const superTypes = superTypesJSON.map((superTypeJSON) => {
300
306
  const json = superTypeJSON, ///
301
- { name } = json,
302
- superTypeName = name, ///
303
- superType = context.findTypeByTypeName(superTypeName);
307
+ { name, prefixName } = json,
308
+ nominalSuperTypeName = (prefixName !== null) ?
309
+ `${prefixName}:${name}` :
310
+ name, ///
311
+ superType = context.findTypeByNominalTypeName(nominalSuperTypeName);
304
312
 
305
313
  return superType;
306
314
  });
@@ -373,7 +381,7 @@ export function combinatorsFromJSON(json, context) {
373
381
  }
374
382
 
375
383
  export function typePrefixesFromJSON(json, context) {
376
- let { typePrefixes = [] } = json;
384
+ let { typePrefixes } = json;
377
385
 
378
386
  const { TypePrefix } = dom,
379
387
  typePrefixesJSON = typePrefixes; ///
@@ -4,7 +4,7 @@ import dom from "../dom";
4
4
 
5
5
  import { objectType } from "../dom/type";
6
6
 
7
- export function typeFromTypeNode(typeNode) {
7
+ export function typeFromTypeNode(typeNode, context) {
8
8
  let type;
9
9
 
10
10
  if (typeNode === null) {
@@ -12,13 +12,16 @@ export function typeFromTypeNode(typeNode) {
12
12
  } else {
13
13
  const { Type } = dom,
14
14
  typeName = typeNode.getTypeName(),
15
+ typePrefixName = typeNode.getTypePrefixName(),
16
+ nominalTypeName = typeNode.getNominalTypeName(),
17
+ string = nominalTypeName, ///
15
18
  name = typeName, ///
16
- string = name, ///
19
+ prefixName = typePrefixName, ///
17
20
  superTypes = null,
18
21
  properties = null,
19
22
  provisional = null;
20
23
 
21
- type = new Type(string, name, superTypes, properties, provisional);
24
+ type = new Type(string, name, prefixName, superTypes, properties, provisional);
22
25
  }
23
26
 
24
27
  return type;
@@ -2,11 +2,18 @@
2
2
 
3
3
  import { objectType } from "../dom/type";
4
4
 
5
- export function stringFromTypeNameNameAndSuperTypes(typeName, superTypes) {
6
- const superTypesString = superTypesStringFromSuperTypes(superTypes),
7
- string = (superTypesString !== null) ?
8
- `'${typeName}':${superTypesString}` :
9
- typeName; ///
5
+ export function stringFromTypeNameTypePrefixNameAndSuperTypes(typeName, typePrefixName, superTypes) {
6
+ let string;
7
+
8
+ string = (typePrefixName !== null) ?
9
+ `${typePrefixName}${typeName}`:
10
+ typeName;
11
+
12
+ const superTypesString = superTypesStringFromSuperTypes(superTypes);
13
+
14
+ if (superTypesString !== null) {
15
+ string = `${string}:${superTypesString}`;
16
+ }
10
17
 
11
18
  return string;
12
19
  }
@@ -54,8 +54,8 @@ class CombinatorVerifier extends Verifier {
54
54
  verify: (typeNode, context) => {
55
55
  let typeVerifies = false;
56
56
 
57
- const typeName = typeNode.getTypeName(),
58
- typePresent = context.isTypePresentByTypeName(typeName);
57
+ const nominalTypeName = typeNode.getNominalTypeName(),
58
+ typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
59
59
 
60
60
  if (typePresent) {
61
61
  typeVerifies = true;
@@ -70,15 +70,15 @@ class ConstructorVerifier extends Verifier {
70
70
  verify: (typeNode, context, verifyAhead) => {
71
71
  let typeVerifies;
72
72
 
73
- const typeName = typeNode.getTypeName(),
74
- typePresent = context.isTypePresentByTypeName(typeName);
73
+ const nominalTypeName = typeNode.getNominalTypeName(),
74
+ typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
75
75
 
76
76
  if (typePresent) {
77
77
  const verifiesAhead = verifyAhead();
78
78
 
79
79
  typeVerifies = verifiesAhead; ///
80
80
  } else {
81
- const typeString = typeName; ///
81
+ const typeString = nominalTypeName; ///
82
82
 
83
83
  context.debug(`The '${typeString}' type is not present.`);
84
84