@Nullable
  private Node parseScopeSelector() {
    TextMateWeigh.Priority priority = TextMateWeigh.Priority.NORMAL;
    TextMateSelectorToken token = getToken();
    if (token instanceof TextMateSelectorLexer.PriorityToken) {
      advance();
      priority = ((TextMateSelectorLexer.PriorityToken)token).getPriority();
    }
    boolean startMatch = false;
    if (getToken() == TextMateSelectorToken.HAT) {
      advance();
      startMatch = true;
    }
    List<Node> children = new ArrayList<>();
    List<Node> exclusions = new ArrayList<>();
    Node next = parseSelector();
    while (next != null) {
      children.add(next);
      next = parseSelector();
    }

    while (getToken() == TextMateSelectorToken.MINUS) {
      advance();
      Node exclusion = parseScopeSelector();
      if (exclusion != null) {
        exclusions.add(exclusion);
      }
    }
    if (children.isEmpty() && exclusions.isEmpty()) {
      return null;
    }
    return new ScopeSelector(children, exclusions, startMatch, priority);
  }
@Nullable
  private Node parseScopeSelector()