parseDirective method
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;
}
}