parseDirective method

DirectiveContext? parseDirective()

Implementation

DirectiveContext? parseDirective() {
  if (next(TokenType.ARROBA) && current != null) {
    var ARROBA = current!;
    if (next(TokenType.NAME)) {
      var NAME = current!;

      if (next(TokenType.COLON)) {
        var COLON = current!;
        var val = parseInputValue();
        if (val != null) {
          return DirectiveContext(ARROBA, NAME, COLON, null, null, null, val);
        } else {
          errors.add(SyntaxError(
              'Missing value or variable in directive after colon.',
              COLON.span));
          return null;
        }
      } else if (next(TokenType.LPAREN)) {
        var LPAREN = current!;
        var arg = parseArgument();
        if (arg != null) {
          if (next(TokenType.RPAREN)) {
            return DirectiveContext(
                ARROBA, NAME, null, LPAREN, current, arg, null);
          } else {
            errors.add(SyntaxError('Missing \')\'', arg.value.span));
            return null;
          }
        } else {
          errors.add(
              SyntaxError('Missing argument in directive.', LPAREN.span));
          return null;
        }
      } else {
        return DirectiveContext(ARROBA, NAME, null, null, null, null, null);
      }
    } else {
      errors.add(SyntaxError('Missing name for directive.', ARROBA.span));
      return null;
    }
  } else {
    return null;
  }
}