platform/graphql_parser/lib/src/language/ast/operation_definition.dart
2018-08-02 11:17:14 -04:00

33 lines
1,001 B
Dart

import 'package:source_span/source_span.dart';
import '../token.dart';
import 'definition.dart';
import 'directive.dart';
import 'selection_set.dart';
import 'variable_definitions.dart';
class OperationDefinitionContext extends DefinitionContext {
final Token TYPE, NAME;
final VariableDefinitionsContext variableDefinitions;
final List<DirectiveContext> directives = [];
final SelectionSetContext selectionSet;
bool get isMutation => TYPE?.text == 'mutation';
bool get isQuery => TYPE?.text == 'query' || TYPE == null;
String get name => NAME?.text;
OperationDefinitionContext(
this.TYPE, this.NAME, this.variableDefinitions, this.selectionSet) {
assert(TYPE == null || TYPE.text == 'query' || TYPE.text == 'mutation');
}
@override
FileSpan get span {
if (TYPE == null) return selectionSet.span;
var out = TYPE.span.expand(NAME.span);
out = directives.fold<FileSpan>(out, (o, d) => o.expand(d.span));
return out.expand(selectionSet.span);
}
}