code: def build_additional_match(self, ident, node_set):
          
          source_ident = ident
  
          for key, value in node_set.must_match.items():
              if isinstance(value, dict):
                  label = ':' + value['node_class'].__label__
                  stmt = _rel_helper(lhs=source_ident, rhs=label, ident='', **value)
                  self._ast['where'].append(stmt)
              else:
                  raise ValueError("Expecting dict got: " + repr(value))
  
          for key, val in node_set.dont_match.items():
              if isinstance(val, dict):
                  label = ':' + val['node_class'].__label__
                  stmt = _rel_helper(lhs=source_ident, rhs=label, ident='', **val)
                  self._ast['where'].append('NOT ' + stmt)
              else:
                  raise ValueError("Expecting dict got: " + repr(val))
docs: handle additional matches supplied by 'has()' calls