occam-verify-cli 0.0.871 → 0.0.873

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.
@@ -18,24 +18,36 @@ _export(exports, {
18
18
  });
19
19
  var _metavariable = /*#__PURE__*/ _interop_require_default(require("../metavariable"));
20
20
  var _metavariable1 = /*#__PURE__*/ _interop_require_default(require("../assignment/metavariable"));
21
+ var _array = require("../utilities/array");
21
22
  var _query = require("../utilities/query");
23
+ var _name = require("../utilities/name");
22
24
  function _interop_require_default(obj) {
23
25
  return obj && obj.__esModule ? obj : {
24
26
  default: obj
25
27
  };
26
28
  }
27
- var typeNodeQuery = (0, _query.nodeQuery)("/argument/type"), argumentNodeQuery = (0, _query.nodeQuery)("/metavariable/argument!");
29
+ var termNodeQuery = (0, _query.nodeQuery)("/argument/term"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type"), argumentNodeQuery = (0, _query.nodeQuery)("/metavariable/argument!");
28
30
  function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
29
31
  var metavariableVerified = false;
30
32
  var metavariableString = fileContext.nodeAsString(metavariableNode);
31
33
  fileContext.trace("Verifying the '".concat(metavariableString, "' metavariable..."), metavariableNode);
32
- var metavariablePresent = fileContext.isMetavariablePresentByMetavariableNode(metavariableNode);
34
+ var name = (0, _name.nameFromMetavariableNode)(metavariableNode), metavariablePresent = fileContext.isMetavariablePresentByName(name);
33
35
  if (metavariablePresent) {
34
36
  fileContext.debug("The metavariable '".concat(metavariableString, "' is already present."), metavariableNode);
35
37
  } else {
36
- var argumentNode = argumentNodeQuery(metavariableNode), argumentVerified = verifyArgument(metavariableNode, argumentNode, fileContext);
37
- if (argumentVerified) {
38
- var metaType = fileContext.findMetaTypeByMetaTypeNode(metaTypeNode), metavariable = _metavariable.default.fromMetavariableNodeAndMetaType(metavariableNode, metaType), metavariableAssignment = _metavariable1.default.fromMetavariable(metavariable), metavariableAssigned = metavariableAssignment.assign(fileContext);
38
+ var termTypes = [], metaTypes = [], argumentNode = argumentNodeQuery(metavariableNode), argumentVerified = verifyArgument(argumentNode, termTypes, fileContext), metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
39
+ if (argumentVerified && metaTypeVerified) {
40
+ var termType, metaType;
41
+ var firstMetaType = (0, _array.first)(metaTypes);
42
+ metaType = firstMetaType; ///
43
+ var termTypesLength = termTypes.length;
44
+ if (termTypesLength === 0) {
45
+ termType = null;
46
+ } else {
47
+ var firstTermType = (0, _array.first)(termTypes);
48
+ termType = firstTermType; ///
49
+ }
50
+ var node = metavariableNode, metavariable = _metavariable.default.fromNodeNameTermTypeAndMetaType(node, name, termType, metaType), metavariableAssignment = _metavariable1.default.fromMetavariable(metavariable), metavariableAssigned = metavariableAssignment.assign(fileContext);
39
51
  if (metavariableAssigned) {
40
52
  metavariableVerified = true;
41
53
  }
@@ -60,23 +72,37 @@ function verifyStandaloneMetavariable(metavariableNode, localMetaContext, verify
60
72
  }
61
73
  return standaloneMetavariableVerified;
62
74
  }
63
- function verifyArgument(metavariableNode, argumentNode, fileContext) {
75
+ function verifyArgument(argumentNode, termTypes, fileContext) {
64
76
  var argumentVerified = false;
65
77
  if (argumentNode === null) {
66
78
  argumentVerified = true;
67
79
  } else {
80
+ var termNode = termNodeQuery(argumentNode);
81
+ if (termNode === null) {} else {
82
+ var termString = fileContext.nodeAsString(termNode);
83
+ fileContext.debug("The '".concat(termString, "' term was found when a type should have been present."), termNode);
84
+ }
68
85
  var typeNode = typeNodeQuery(argumentNode);
69
86
  if (typeNode !== null) {
70
87
  var type = fileContext.findTypeByTypeNode(typeNode);
71
88
  if (type !== null) {
89
+ var termType = type; ///
90
+ termTypes.push(termType);
72
91
  argumentVerified = true;
73
92
  } else {
74
- var typeString = fileContext.nodeAsString(typeNode), metavariableString = fileContext.nodeAsString(metavariableNode);
75
- fileContext.debug("The '".concat(metavariableString, "' metavariable's '").concat(typeString, "' type is not present."), metavariableNode);
93
+ var typeString = fileContext.nodeAsString(typeNode);
94
+ fileContext.debug("The '".concat(typeString, "' type is not present."), typeNode);
76
95
  }
77
96
  }
78
97
  }
79
98
  return argumentVerified;
80
99
  }
100
+ function verifyMetaType(metaTypeNode, metaTypes, fileContext) {
101
+ var metaTypeVerified;
102
+ var metaType = fileContext.findMetaTypeByMetaTypeNode(metaTypeNode);
103
+ metaTypes.push(metaType);
104
+ metaTypeVerified = true;
105
+ return metaTypeVerified;
106
+ }
81
107
 
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YXZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWV0YXZhcmlhYmxlIGZyb20gXCIuLi9tZXRhdmFyaWFibGVcIjtcbmltcG9ydCBNZXRhdmFyaWFibGVBc3NpZ25tZW50IGZyb20gXCIuLi9hc3NpZ25tZW50L21ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZVwiKSxcbiAgICAgIGFyZ3VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZS9hcmd1bWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGVOb2RlLCBtZXRhVHlwZU5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKTtcblxuICBmaWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gLCBtZXRhdmFyaWFibGVOb2RlKTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVQcmVzZW50ID0gZmlsZUNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVQcmVzZW50KSB7XG4gICAgZmlsZUNvbnRleHQuZGVidWcoYFRoZSBtZXRhdmFyaWFibGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgaXMgYWxyZWFkeSBwcmVzZW50LmAsIG1ldGF2YXJpYWJsZU5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFyZ3VtZW50Tm9kZSA9IGFyZ3VtZW50Tm9kZVF1ZXJ5KG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGFyZ3VtZW50VmVyaWZpZWQgPSB2ZXJpZnlBcmd1bWVudChtZXRhdmFyaWFibGVOb2RlLCBhcmd1bWVudE5vZGUsIGZpbGVDb250ZXh0KTtcblxuICAgIGlmIChhcmd1bWVudFZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBtZXRhVHlwZSA9IGZpbGVDb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOb2RlKG1ldGFUeXBlTm9kZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbU1ldGF2YXJpYWJsZU5vZGVBbmRNZXRhVHlwZShtZXRhdmFyaWFibGVOb2RlLCBtZXRhVHlwZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBc3NpZ25tZW50ID0gTWV0YXZhcmlhYmxlQXNzaWdubWVudC5mcm9tTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBc3NpZ25lZCA9IG1ldGF2YXJpYWJsZUFzc2lnbm1lbnQuYXNzaWduKGZpbGVDb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFzc2lnbmVkKSB7XG4gICAgICAgIG1ldGF2YXJpYWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobWV0YXZhcmlhYmxlVmVyaWZpZWQpIHtcbiAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVWZXJpZmllZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVN0YW5kYWxvbmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxNZXRhQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsTWV0YUNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGxvY2FsTWV0YUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgc3RhbmRhbG9uZSBtZXRhdmFyaWFibGUuLi5gLCBtZXRhdmFyaWFibGVOb2RlKTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVQcmVzZW50ID0gbG9jYWxNZXRhQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcblxuICAgIHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCA9IHZlcmlmaWVkQWhlYWQ7IC8vL1xuICB9XG5cbiAgaWYgKHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCkge1xuICAgIGxvY2FsTWV0YUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBzdGFuZGFsb25lIG1ldGF2YXJpYWJsZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBzdGFuZGFsb25lTWV0YXZhcmlhYmxlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3VtZW50KG1ldGF2YXJpYWJsZU5vZGUsIGFyZ3VtZW50Tm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IGFyZ3VtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBpZiAoYXJndW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgYXJndW1lbnRWZXJpZmllZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5vZGUodHlwZU5vZGUpO1xuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBhcmd1bWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHR5cGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcodHlwZU5vZGUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgZmlsZUNvbnRleHQuZGVidWcoYFRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBub3QgcHJlc2VudC5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRWZXJpZmllZDtcbn0iXSwibmFtZXMiOlsidmVyaWZ5TWV0YXZhcmlhYmxlIiwidmVyaWZ5U3RhbmRhbG9uZU1ldGF2YXJpYWJsZSIsInR5cGVOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJhcmd1bWVudE5vZGVRdWVyeSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhVHlwZU5vZGUiLCJmaWxlQ29udGV4dCIsIm1ldGF2YXJpYWJsZVZlcmlmaWVkIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHJhY2UiLCJtZXRhdmFyaWFibGVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVidWciLCJhcmd1bWVudE5vZGUiLCJhcmd1bWVudFZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnQiLCJtZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiTWV0YXZhcmlhYmxlIiwiZnJvbU1ldGF2YXJpYWJsZU5vZGVBbmRNZXRhVHlwZSIsIm1ldGF2YXJpYWJsZUFzc2lnbm1lbnQiLCJNZXRhdmFyaWFibGVBc3NpZ25tZW50IiwiZnJvbU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUFzc2lnbmVkIiwiYXNzaWduIiwibG9jYWxNZXRhQ29udGV4dCIsInZlcmlmeUFoZWFkIiwic3RhbmRhbG9uZU1ldGF2YXJpYWJsZVZlcmlmaWVkIiwidmVyaWZpZWRBaGVhZCIsInR5cGVOb2RlIiwidHlwZSIsImZpbmRUeXBlQnlUeXBlTm9kZSIsInR5cGVTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQVVBLE9BZ0NDO2VBaEN1QkE7O0lBa0NSQyw0QkFBNEI7ZUFBNUJBOzs7bUVBMUNTO29FQUNVO3FCQUVUOzs7Ozs7QUFFMUIsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG1CQUMxQkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLFNBQVNILG1CQUFtQkssZ0JBQWdCLEVBQUVDLFlBQVksRUFBRUMsV0FBVztJQUNwRixJQUFJQyx1QkFBdUI7SUFFM0IsSUFBTUMscUJBQXFCRixZQUFZRyxZQUFZLENBQUNMO0lBRXBERSxZQUFZSSxLQUFLLENBQUMsQUFBQyxrQkFBb0MsT0FBbkJGLG9CQUFtQixzQkFBb0JKO0lBRTNFLElBQU1PLHNCQUFzQkwsWUFBWU0sdUNBQXVDLENBQUNSO0lBRWhGLElBQUlPLHFCQUFxQjtRQUN2QkwsWUFBWU8sS0FBSyxDQUFDLEFBQUMscUJBQXVDLE9BQW5CTCxvQkFBbUIsMEJBQXdCSjtJQUNwRixPQUFPO1FBQ0wsSUFBTVUsZUFBZVgsa0JBQWtCQyxtQkFDakNXLG1CQUFtQkMsZUFBZVosa0JBQWtCVSxjQUFjUjtRQUV4RSxJQUFJUyxrQkFBa0I7WUFDcEIsSUFBTUUsV0FBV1gsWUFBWVksMEJBQTBCLENBQUNiLGVBQ2xEYyxlQUFlQyxxQkFBWSxDQUFDQywrQkFBK0IsQ0FBQ2pCLGtCQUFrQmEsV0FDOUVLLHlCQUF5QkMsc0JBQXNCLENBQUNDLGdCQUFnQixDQUFDTCxlQUNqRU0sdUJBQXVCSCx1QkFBdUJJLE1BQU0sQ0FBQ3BCO1lBRTNELElBQUltQixzQkFBc0I7Z0JBQ3hCbEIsdUJBQXVCO1lBQ3pCO1FBQ0Y7SUFDRjtJQUVBLElBQUlBLHNCQUFzQjtRQUN4QkQsWUFBWU8sS0FBSyxDQUFDLEFBQUMsb0JBQXNDLE9BQW5CTCxvQkFBbUIsb0JBQWtCSjtJQUM3RTtJQUVBLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTUCw2QkFBNkJJLGdCQUFnQixFQUFFdUIsZ0JBQWdCLEVBQUVDLFdBQVc7SUFDMUYsSUFBSUMsaUNBQWlDO0lBRXJDLElBQU1yQixxQkFBcUJtQixpQkFBaUJsQixZQUFZLENBQUNMO0lBRXpEdUIsaUJBQWlCakIsS0FBSyxDQUFDLEFBQUMsa0JBQW9DLE9BQW5CRixvQkFBbUIsaUNBQStCSjtJQUUzRixJQUFNTyxzQkFBc0JnQixpQkFBaUJmLHVDQUF1QyxDQUFDUjtJQUVyRixJQUFJTyxxQkFBcUI7UUFDdkIsSUFBTW1CLGdCQUFnQkY7UUFFdEJDLGlDQUFpQ0MsZUFBZSxHQUFHO0lBQ3JEO0lBRUEsSUFBSUQsZ0NBQWdDO1FBQ2xDRixpQkFBaUJkLEtBQUssQ0FBQyxBQUFDLG9CQUFzQyxPQUFuQkwsb0JBQW1CLCtCQUE2Qko7SUFDN0Y7SUFFQSxPQUFPeUI7QUFDVDtBQUVBLFNBQVNiLGVBQWVaLGdCQUFnQixFQUFFVSxZQUFZLEVBQUVSLFdBQVc7SUFDakUsSUFBSVMsbUJBQW1CO0lBRXZCLElBQUlELGlCQUFpQixNQUFNO1FBQ3pCQyxtQkFBbUI7SUFDckIsT0FBTztRQUNMLElBQU1nQixXQUFXOUIsY0FBY2E7UUFFL0IsSUFBSWlCLGFBQWEsTUFBTTtZQUNyQixJQUFNQyxPQUFPMUIsWUFBWTJCLGtCQUFrQixDQUFDRjtZQUU1QyxJQUFJQyxTQUFTLE1BQU07Z0JBQ2pCakIsbUJBQW1CO1lBQ3JCLE9BQU87Z0JBQ0wsSUFBTW1CLGFBQWE1QixZQUFZRyxZQUFZLENBQUNzQixXQUN0Q3ZCLHFCQUFxQkYsWUFBWUcsWUFBWSxDQUFDTDtnQkFFcERFLFlBQVlPLEtBQUssQ0FBQyxBQUFDLFFBQThDcUIsT0FBdkMxQixvQkFBbUIsc0JBQStCLE9BQVgwQixZQUFXLDJCQUF5QjlCO1lBQ3ZHO1FBQ0Y7SUFDRjtJQUVBLE9BQU9XO0FBQ1QifQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YXZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWV0YXZhcmlhYmxlIGZyb20gXCIuLi9tZXRhdmFyaWFibGVcIjtcbmltcG9ydCBNZXRhdmFyaWFibGVBc3NpZ25tZW50IGZyb20gXCIuLi9hc3NpZ25tZW50L21ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2FyZ3VtZW50L3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2FyZ3VtZW50L3R5cGVcIiksXG4gICAgICBhcmd1bWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhdmFyaWFibGUvYXJndW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlTm9kZSwgbWV0YVR5cGVOb2RlLCBmaWxlQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCwgbWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgY29uc3QgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGZpbGVDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TmFtZShuYW1lKTtcblxuICBpZiAobWV0YXZhcmlhYmxlUHJlc2VudCkge1xuICAgIGZpbGVDb250ZXh0LmRlYnVnKGBUaGUgbWV0YXZhcmlhYmxlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGlzIGFscmVhZHkgcHJlc2VudC5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0ZXJtVHlwZXMgPSBbXSxcbiAgICAgICAgICBtZXRhVHlwZXMgPSBbXSxcbiAgICAgICAgICBhcmd1bWVudE5vZGUgPSBhcmd1bWVudE5vZGVRdWVyeShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBhcmd1bWVudFZlcmlmaWVkID0gdmVyaWZ5QXJndW1lbnQoYXJndW1lbnROb2RlLCB0ZXJtVHlwZXMsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBtZXRhVHlwZVZlcmlmaWVkID0gdmVyaWZ5TWV0YVR5cGUobWV0YVR5cGVOb2RlLCBtZXRhVHlwZXMsIGZpbGVDb250ZXh0KTtcblxuICAgIGlmIChhcmd1bWVudFZlcmlmaWVkICYmIG1ldGFUeXBlVmVyaWZpZWQpIHtcbiAgICAgIGxldCB0ZXJtVHlwZSxcbiAgICAgICAgICBtZXRhVHlwZTtcblxuICAgICAgY29uc3QgZmlyc3RNZXRhVHlwZSA9IGZpcnN0KG1ldGFUeXBlcyk7XG5cbiAgICAgIG1ldGFUeXBlID0gZmlyc3RNZXRhVHlwZTsgLy8vXG5cbiAgICAgIGNvbnN0IHRlcm1UeXBlc0xlbmd0aCA9IHRlcm1UeXBlcy5sZW5ndGg7XG5cbiAgICAgIGlmICh0ZXJtVHlwZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGVybVR5cGUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlyc3RUZXJtVHlwZSA9IGZpcnN0KHRlcm1UeXBlcyk7XG5cbiAgICAgICAgdGVybVR5cGUgPSBmaXJzdFRlcm1UeXBlOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tTm9kZU5hbWVUZXJtVHlwZUFuZE1ldGFUeXBlKG5vZGUsIG5hbWUsIHRlcm1UeXBlLCBtZXRhVHlwZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBc3NpZ25tZW50ID0gTWV0YXZhcmlhYmxlQXNzaWdubWVudC5mcm9tTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBc3NpZ25lZCA9IG1ldGF2YXJpYWJsZUFzc2lnbm1lbnQuYXNzaWduKGZpbGVDb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFzc2lnbmVkKSB7XG4gICAgICAgIG1ldGF2YXJpYWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobWV0YXZhcmlhYmxlVmVyaWZpZWQpIHtcbiAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVWZXJpZmllZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVN0YW5kYWxvbmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxNZXRhQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsTWV0YUNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGxvY2FsTWV0YUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgc3RhbmRhbG9uZSBtZXRhdmFyaWFibGUuLi5gLCBtZXRhdmFyaWFibGVOb2RlKTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVQcmVzZW50ID0gbG9jYWxNZXRhQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcblxuICAgIHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCA9IHZlcmlmaWVkQWhlYWQ7IC8vL1xuICB9XG5cbiAgaWYgKHN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCkge1xuICAgIGxvY2FsTWV0YUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBzdGFuZGFsb25lIG1ldGF2YXJpYWJsZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBzdGFuZGFsb25lTWV0YXZhcmlhYmxlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3VtZW50KGFyZ3VtZW50Tm9kZSwgdGVybVR5cGVzLCBmaWxlQ29udGV4dCkge1xuICBsZXQgYXJndW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChhcmd1bWVudE5vZGUgPT09IG51bGwpIHtcbiAgICBhcmd1bWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkoYXJndW1lbnROb2RlKTtcblxuICAgIGlmICh0ZXJtTm9kZSA9PT0gbnVsbCkge1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcodGVybU5vZGUpO1xuXG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdhcyBmb3VuZCB3aGVuIGEgdHlwZSBzaG91bGQgaGF2ZSBiZWVuIHByZXNlbnQuYCwgdGVybU5vZGUpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoYXJndW1lbnROb2RlKTtcblxuICAgIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IGZpbGVDb250ZXh0LmZpbmRUeXBlQnlUeXBlTm9kZSh0eXBlTm9kZSk7XG5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm1UeXBlID0gdHlwZTsgIC8vL1xuXG4gICAgICAgIHRlcm1UeXBlcy5wdXNoKHRlcm1UeXBlKTtcblxuICAgICAgICBhcmd1bWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHR5cGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcodHlwZU5vZGUpO1xuXG4gICAgICAgIGZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgbm90IHByZXNlbnQuYCwgdHlwZU5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlNZXRhVHlwZShtZXRhVHlwZU5vZGUsIG1ldGFUeXBlcywgZmlsZUNvbnRleHQpIHtcbiAgbGV0IG1ldGFUeXBlVmVyaWZpZWQ7XG5cbiAgY29uc3QgbWV0YVR5cGUgPSBmaWxlQ29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUpO1xuXG4gIG1ldGFUeXBlcy5wdXNoKG1ldGFUeXBlKTtcblxuICBtZXRhVHlwZVZlcmlmaWVkID0gdHJ1ZTtcblxuICByZXR1cm4gbWV0YVR5cGVWZXJpZmllZDtcbn0iXSwibmFtZXMiOlsidmVyaWZ5TWV0YXZhcmlhYmxlIiwidmVyaWZ5U3RhbmRhbG9uZU1ldGF2YXJpYWJsZSIsInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwiYXJndW1lbnROb2RlUXVlcnkiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YVR5cGVOb2RlIiwiZmlsZUNvbnRleHQiLCJtZXRhdmFyaWFibGVWZXJpZmllZCIsIm1ldGF2YXJpYWJsZVN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwibmFtZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU5hbWUiLCJkZWJ1ZyIsInRlcm1UeXBlcyIsIm1ldGFUeXBlcyIsImFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50VmVyaWZpZWQiLCJ2ZXJpZnlBcmd1bWVudCIsIm1ldGFUeXBlVmVyaWZpZWQiLCJ2ZXJpZnlNZXRhVHlwZSIsInRlcm1UeXBlIiwibWV0YVR5cGUiLCJmaXJzdE1ldGFUeXBlIiwiZmlyc3QiLCJ0ZXJtVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFRlcm1UeXBlIiwibm9kZSIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsImZyb21Ob2RlTmFtZVRlcm1UeXBlQW5kTWV0YVR5cGUiLCJtZXRhdmFyaWFibGVBc3NpZ25tZW50IiwiTWV0YXZhcmlhYmxlQXNzaWdubWVudCIsImZyb21NZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVBc3NpZ25lZCIsImFzc2lnbiIsImxvY2FsTWV0YUNvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInN0YW5kYWxvbmVNZXRhdmFyaWFibGVWZXJpZmllZCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsInZlcmlmaWVkQWhlYWQiLCJ0ZXJtTm9kZSIsInRlcm1TdHJpbmciLCJ0eXBlTm9kZSIsInR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5vZGUiLCJwdXNoIiwidHlwZVN0cmluZyIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVO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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.871",
4
+ "version": "0.0.873",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -314,6 +314,19 @@ export default class FileContext {
314
314
  return type;
315
315
  }
316
316
 
317
+ findMetavariableByName(name) {
318
+ const metavariables = this.getMetavariables(),
319
+ metavariable = metavariables.find((metavariable) => {
320
+ const matches = metavariable.matchName(name);
321
+
322
+ if (matches) {
323
+ return true;
324
+ }
325
+ }) || null;
326
+
327
+ return metavariable;
328
+ }
329
+
317
330
  findVariableByVariableNode(variableNode) {
318
331
  const node = variableNode, ///
319
332
  variables = this.getVariables(),
@@ -474,6 +487,13 @@ export default class FileContext {
474
487
  return typePresent;
475
488
  }
476
489
 
490
+ isMetavariablePresentByName(name) {
491
+ const metavariable = this.findMetavariableByName(name),
492
+ metavariablePresent = (metavariable !== null);
493
+
494
+ return metavariablePresent;
495
+ }
496
+
477
497
  isVariablePresentByVariableNode(variableNode) {
478
498
  const variable = this.findVariableByVariableNode(variableNode),
479
499
  variablePresent = (variable !== null);
@@ -589,9 +609,9 @@ export default class FileContext {
589
609
  addMetavariable(metavariable) {
590
610
  let metavariableAdded = false;
591
611
 
592
- const node = metavariable.getNode(),
612
+ const name = metavariable.getName(),
593
613
  metavariablePresent = this.metavariables.some((metavariable) => {
594
- const nodeMatches = metavariable.matchNode(node);
614
+ const nodeMatches = metavariable.matchName(name);
595
615
 
596
616
  if (nodeMatches) {
597
617
  return true;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { CONTEXT_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class ContextMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = CONTEXT_META_TYPE_NAME,
10
+ contextMetaType = new ContextMetaType(name);
11
+
12
+ return contextMetaType;
13
+ }
14
+ }
15
+
16
+ const contextMetaType = ContextMetaType.fromNothing();
17
+
18
+ export default contextMetaType;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { LABEL_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class LabelMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = LABEL_META_TYPE_NAME,
10
+ labelMetaType = new LabelMetaType(name);
11
+
12
+ return labelMetaType;
13
+ }
14
+ }
15
+
16
+ const labelMetaType = LabelMetaType.fromNothing();
17
+
18
+ export default labelMetaType;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class StatementMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = STATEMENT_META_TYPE_NAME,
10
+ statementMetaType = new StatementMetaType(name);
11
+
12
+ return statementMetaType;
13
+ }
14
+ }
15
+
16
+ const statementMetaType = StatementMetaType.fromNothing();
17
+
18
+ export default statementMetaType;
package/src/metaType.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  import { metaTypeNameFromMetaTypeNode } from "./utilities/name";
4
- import { CONTEXT_META_TYPE_NAME, STATEMENT_META_TYPE_NAME } from "./metaTypeNames";
5
4
 
6
5
  export default class MetaType {
7
6
  constructor(name) {
@@ -68,28 +67,6 @@ export default class MetaType {
68
67
  }
69
68
  }
70
69
 
71
- class ContextMetaType extends MetaType {
72
- static fromNothing() {
73
- const name = CONTEXT_META_TYPE_NAME,
74
- contextMetaType = new ContextMetaType(name);
75
-
76
- return contextMetaType;
77
- }
78
- }
79
-
80
- class StatementMetaType extends MetaType {
81
- static fromNothing() {
82
- const name = STATEMENT_META_TYPE_NAME,
83
- statementMetaType = new StatementMetaType(name);
84
-
85
- return statementMetaType;
86
- }
87
- }
88
-
89
- export const contextMetaType = ContextMetaType.fromNothing();
90
-
91
- export const statementMetaType = StatementMetaType.fromNothing();
92
-
93
70
  export function metaTypeFromJSONAndFileContext(json, fileContext) {
94
71
  let metaType;
95
72
 
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export const CONTEXT_META_TYPE_NAME = "Context";
4
3
  export const STATEMENT_META_TYPE_NAME = "Statement";
4
+ export const CONTEXT_META_TYPE_NAME = "Context";
5
+ export const LABEL_META_TYPE_NAME = "Label";
package/src/metaTypes.js CHANGED
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import { contextMetaType, statementMetaType } from "./metaType";
3
+ import labelMetaType from "./metaType/label";
4
+ import contextMetaType from "./metaType/context";
5
+ import statementMetaType from "./metaType/statement";
4
6
 
5
7
  const metaTypes = [
8
+ labelMetaType,
6
9
  contextMetaType,
7
10
  statementMetaType
8
11
  ];
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ import { nodeQuery } from "./utilities/query";
3
4
  import { nodeAsString } from "./utilities/string";
5
+ import { nameFromMetavariableNode } from "./utilities/name";
4
6
  import { metaTypeFromJSONAndFileContext } from "./metaType";
7
+ import { metavariableNodeFromMetavariableString } from "./utilities/node";
8
+
9
+ const typeNodeQuery = nodeQuery("/metavariable/argument!/type!");
5
10
 
6
11
  export default class Metavariable {
7
- constructor(node, metaType) {
12
+ constructor(node, name, termType, metaType) {
8
13
  this.node = node;
14
+ this.name = name;
15
+ this.termType = termType;
9
16
  this.metaType = metaType;
10
17
  }
11
18
 
@@ -13,21 +20,42 @@ export default class Metavariable {
13
20
  return this.node;
14
21
  }
15
22
 
23
+ getName() {
24
+ return this.name;
25
+ }
26
+
27
+ getTermType() {
28
+ return this.termType;
29
+ }
30
+
16
31
  getMetaType() {
17
32
  return this.metaType;
18
33
  }
19
34
 
35
+ matchName(name) {
36
+ const nameMatches = (this.name === name);
37
+
38
+ return nameMatches;
39
+ }
40
+
20
41
  matchNode(node) {
21
- const nodeMatches = this.node.match(node);
42
+ let nodeMatches;
43
+
44
+ const metavariableNode = node, ///
45
+ name = nameFromMetavariableNode(metavariableNode);
46
+
47
+ if (this.name === name) {
48
+ nodeMatches = true;
49
+ }
22
50
 
23
51
  return nodeMatches;
24
52
  }
25
53
 
26
54
  toJSON(tokens) {
27
55
  const metaTypeJSON = this.metaType.toJSON(tokens),
28
- metaType = metaTypeJSON, ///
29
56
  string = nodeAsString(this.node, tokens),
30
- node = string, ///
57
+ node = string, //
58
+ metaType = metaTypeJSON, ///
31
59
  json = {
32
60
  node,
33
61
  metaType
@@ -41,13 +69,20 @@ export default class Metavariable {
41
69
 
42
70
  let string = nodeAsString(this.node, tokens);
43
71
 
44
- string = `${string}:${metaTypeName}`;
72
+ string = `${string}:${metaTypeName}`; ///
45
73
 
46
74
  return string;
47
75
  }
48
76
 
49
77
  static fromJSONAndFileContext(json, fileContext) {
50
- const { node } = json;
78
+ let { node } = json;
79
+
80
+ const lexer = fileContext.getLexer(),
81
+ parser = fileContext.getParser(),
82
+ variableString = node, ///
83
+ metavariableNode = metavariableNodeFromMetavariableString(variableString, lexer, parser);
84
+
85
+ node = metavariableNode; ///
51
86
 
52
87
  let { metaType } = json;
53
88
 
@@ -55,15 +90,30 @@ export default class Metavariable {
55
90
 
56
91
  metaType = metaTypeFromJSONAndFileContext(json, fileContext);
57
92
 
58
- const metavariable = new Metavariable(node, metaType);
93
+ const name = nameFromMetavariableNode(metavariableNode),
94
+ termType = termTypeFromMetavariableNode(metavariableNode, fileContext),
95
+ metavariable = new Metavariable(node, name, termType, metaType);
59
96
 
60
97
  return metavariable;
61
98
  }
62
99
 
63
- static fromMetavariableNodeAndMetaType(metavariableNode, metaType) {
64
- const node = metavariableNode, ///
65
- metavariable = new Metavariable(node, metaType);
100
+ static fromNodeNameTermTypeAndMetaType(node, name, termType, metaType) {
101
+ const metavariable = new Metavariable(node, name, termType, metaType);
66
102
 
67
103
  return metavariable;
68
104
  }
69
105
  }
106
+
107
+ function termTypeFromMetavariableNode(metavariableNode, fileContext) {
108
+ let termType = null;
109
+
110
+ const typeNode = typeNodeQuery(metavariableNode);
111
+
112
+ if (typeNode !== null) {
113
+ const type = fileContext.findTypeByTypeNode(typeNode);
114
+
115
+ termType = type; ///
116
+ }
117
+
118
+ return termType;
119
+ }
@@ -28,10 +28,14 @@ function findTypeByTypeName(typeName) { return this.context.findTypeByTypeName(t
28
28
 
29
29
  function findTypeByTypeNode(labelMetavariableNode) { return this.context.findTypeByTypeNode(labelMetavariableNode); }
30
30
 
31
+ function findMetavariableByName(name) { return this.context.findMetavariableByName(name); }
32
+
31
33
  function isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
32
34
 
33
35
  function isTypePresentByTypeNode(typeNode) { return this.context.isTypePresentByTypeNode(typeNode); }
34
36
 
37
+ function isMetavariablePresentByName(name) { return this.context.isMetavariablePresentByName(name); }
38
+
35
39
  function findLabelByLabelMetavariableNode(labelMetavariableNode) { return this.context.findLabelByLabelMetavariableNode(labelMetavariableNode); }
36
40
 
37
41
  function findRuleByLabelMetavariableNode(labelMetavariableNode) { return this.context.findRuleByLabelMetavariableNode(labelMetavariableNode); }
@@ -65,8 +69,10 @@ const contextMixins = {
65
69
  getConstructors,
66
70
  findTypeByTypeName,
67
71
  findTypeByTypeNode,
72
+ findMetavariableByName,
68
73
  isTypePresentByTypeName,
69
74
  isTypePresentByTypeNode,
75
+ isMetavariablePresentByName,
70
76
  findLabelByLabelMetavariableNode,
71
77
  findRuleByLabelMetavariableNode,
72
78
  findAxiomByLabelMetavariableNode,
@@ -79,7 +79,7 @@ function checkReleaseContextCreated(releaseContext, dependency, context) {
79
79
  dependencyName = dependency.getName(),
80
80
  releaseName = dependencyName; ///
81
81
 
82
- log.error(`The '${releaseName}' context could not be created. Most likely the 'meta.json' file is missing or invalid.`);
82
+ log.error(`The '${releaseName}' context could not be created. Perhaps the 'meta.json' file is missing or invalid or most likely one of the dependencies is missing or mis-versioned.`);
83
83
  }
84
84
 
85
85
  return releaseContextCreated;
@@ -3,9 +3,12 @@
3
3
  import Metavariable from "../metavariable";
4
4
  import MetavariableAssignment from "../assignment/metavariable";
5
5
 
6
+ import { first } from "../utilities/array";
6
7
  import { nodeQuery } from "../utilities/query";
8
+ import { nameFromMetavariableNode } from "../utilities/name";
7
9
 
8
- const typeNodeQuery = nodeQuery("/argument/type"),
10
+ const termNodeQuery = nodeQuery("/argument/term"),
11
+ typeNodeQuery = nodeQuery("/argument/type"),
9
12
  argumentNodeQuery = nodeQuery("/metavariable/argument!");
10
13
 
11
14
  export default function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
@@ -15,17 +18,38 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
15
18
 
16
19
  fileContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
17
20
 
18
- const metavariablePresent = fileContext.isMetavariablePresentByMetavariableNode(metavariableNode);
21
+ const name = nameFromMetavariableNode(metavariableNode),
22
+ metavariablePresent = fileContext.isMetavariablePresentByName(name);
19
23
 
20
24
  if (metavariablePresent) {
21
25
  fileContext.debug(`The metavariable '${metavariableString}' is already present.`, metavariableNode);
22
26
  } else {
23
- const argumentNode = argumentNodeQuery(metavariableNode),
24
- argumentVerified = verifyArgument(metavariableNode, argumentNode, fileContext);
27
+ const termTypes = [],
28
+ metaTypes = [],
29
+ argumentNode = argumentNodeQuery(metavariableNode),
30
+ argumentVerified = verifyArgument(argumentNode, termTypes, fileContext),
31
+ metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
25
32
 
26
- if (argumentVerified) {
27
- const metaType = fileContext.findMetaTypeByMetaTypeNode(metaTypeNode),
28
- metavariable = Metavariable.fromMetavariableNodeAndMetaType(metavariableNode, metaType),
33
+ if (argumentVerified && metaTypeVerified) {
34
+ let termType,
35
+ metaType;
36
+
37
+ const firstMetaType = first(metaTypes);
38
+
39
+ metaType = firstMetaType; ///
40
+
41
+ const termTypesLength = termTypes.length;
42
+
43
+ if (termTypesLength === 0) {
44
+ termType = null;
45
+ } else {
46
+ const firstTermType = first(termTypes);
47
+
48
+ termType = firstTermType; ///
49
+ }
50
+
51
+ const node = metavariableNode, ///
52
+ metavariable = Metavariable.fromNodeNameTermTypeAndMetaType(node, name, termType, metaType),
29
53
  metavariableAssignment = MetavariableAssignment.fromMetavariable(metavariable),
30
54
  metavariableAssigned = metavariableAssignment.assign(fileContext);
31
55
 
@@ -64,27 +88,51 @@ export function verifyStandaloneMetavariable(metavariableNode, localMetaContext,
64
88
  return standaloneMetavariableVerified;
65
89
  }
66
90
 
67
- function verifyArgument(metavariableNode, argumentNode, fileContext) {
91
+ function verifyArgument(argumentNode, termTypes, fileContext) {
68
92
  let argumentVerified = false;
69
93
 
70
94
  if (argumentNode === null) {
71
95
  argumentVerified = true;
72
96
  } else {
97
+ const termNode = termNodeQuery(argumentNode);
98
+
99
+ if (termNode === null) {
100
+
101
+ } else {
102
+ const termString = fileContext.nodeAsString(termNode);
103
+
104
+ fileContext.debug(`The '${termString}' term was found when a type should have been present.`, termNode);
105
+ }
73
106
  const typeNode = typeNodeQuery(argumentNode);
74
107
 
75
108
  if (typeNode !== null) {
76
109
  const type = fileContext.findTypeByTypeNode(typeNode);
77
110
 
78
111
  if (type !== null) {
112
+ const termType = type; ///
113
+
114
+ termTypes.push(termType);
115
+
79
116
  argumentVerified = true;
80
117
  } else {
81
- const typeString = fileContext.nodeAsString(typeNode),
82
- metavariableString = fileContext.nodeAsString(metavariableNode);
118
+ const typeString = fileContext.nodeAsString(typeNode);
83
119
 
84
- fileContext.debug(`The '${metavariableString}' metavariable's '${typeString}' type is not present.`, metavariableNode);
120
+ fileContext.debug(`The '${typeString}' type is not present.`, typeNode);
85
121
  }
86
122
  }
87
123
  }
88
124
 
89
125
  return argumentVerified;
126
+ }
127
+
128
+ function verifyMetaType(metaTypeNode, metaTypes, fileContext) {
129
+ let metaTypeVerified;
130
+
131
+ const metaType = fileContext.findMetaTypeByMetaTypeNode(metaTypeNode);
132
+
133
+ metaTypes.push(metaType);
134
+
135
+ metaTypeVerified = true;
136
+
137
+ return metaTypeVerified;
90
138
  }