Skip to content

Commit

Permalink
Merge 6c7d57d into 3c07621
Browse files Browse the repository at this point in the history
  • Loading branch information
OlegIlyenko committed Feb 7, 2018
2 parents 3c07621 + 6c7d57d commit 43f15b8
Show file tree
Hide file tree
Showing 24 changed files with 1,614 additions and 431 deletions.
117 changes: 110 additions & 7 deletions src/main/scala/sangria/ast/QueryAst.scala
Original file line number Diff line number Diff line change
Expand Up @@ -381,10 +381,63 @@ case class InputObjectTypeDefinition(
def rename(newName: String) = copy(name = newName)
}

case class TypeExtensionDefinition(
definition: ObjectTypeDefinition,
comments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends TypeSystemDefinition
case class ObjectTypeExtensionDefinition(
name: String,
interfaces: Vector[NamedType],
fields: Vector[FieldDefinition],
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
trailingComments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends ObjectLikeTypeExtensionDefinition with WithTrailingComments {
def rename(newName: String) = copy(name = newName)
}

case class InterfaceTypeExtensionDefinition(
name: String,
fields: Vector[FieldDefinition],
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
trailingComments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends ObjectLikeTypeExtensionDefinition with WithTrailingComments {
def rename(newName: String) = copy(name = newName)
}

case class InputObjectTypeExtensionDefinition(
name: String,
fields: Vector[InputValueDefinition],
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
trailingComments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends TypeExtensionDefinition with WithTrailingComments {
def rename(newName: String) = copy(name = newName)
}

case class EnumTypeExtensionDefinition(
name: String,
values: Vector[EnumValueDefinition],
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
trailingComments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends TypeExtensionDefinition with WithTrailingComments {
def rename(newName: String) = copy(name = newName)
}

case class UnionTypeExtensionDefinition(
name: String,
types: Vector[NamedType],
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends TypeExtensionDefinition {
def rename(newName: String) = copy(name = newName)
}

case class ScalarTypeExtensionDefinition(
name: String,
directives: Vector[Directive] = Vector.empty,
comments: Vector[Comment] = Vector.empty,
position: Option[Position] = None) extends TypeExtensionDefinition {
def rename(newName: String) = copy(name = newName)
}

case class DirectiveDefinition(
name: String,
Expand Down Expand Up @@ -422,11 +475,21 @@ sealed trait AstNode {

sealed trait SchemaAstNode extends AstNode with WithComments
sealed trait TypeSystemDefinition extends SchemaAstNode with Definition

sealed trait TypeDefinition extends TypeSystemDefinition with WithDirectives with WithDescription {
def name: String
def rename(newName: String): TypeDefinition
}

sealed trait TypeExtensionDefinition extends TypeSystemDefinition with WithDirectives {
def name: String
def rename(newName: String): TypeExtensionDefinition
}

sealed trait ObjectLikeTypeExtensionDefinition extends TypeExtensionDefinition {
def fields: Vector[FieldDefinition]
}

object AstNode {
def withoutPosition[T <: AstNode](node: T, stripComments: Boolean = false): T = {
val enterComment = (_: Comment) if (stripComments) VisitorCommand.Delete else VisitorCommand.Skip
Expand Down Expand Up @@ -687,7 +750,7 @@ object AstVisitor {
breakOrSkip(onLeave(n))
}

// IDL schema definition
// SDL schema definition

case n @ ScalarTypeDefinition(_, dirs, description, comment, _)
if (breakOrSkip(onEnter(n))) {
Expand Down Expand Up @@ -765,9 +828,49 @@ object AstVisitor {
trailingComments.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ TypeExtensionDefinition(definition, comment, _)
case n @ ObjectTypeExtensionDefinition(_, ints, fields, dirs, comment, tc, _)
if (breakOrSkip(onEnter(n))) {
ints.foreach(d loop(d))
fields.foreach(d loop(d))
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
tc.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ InterfaceTypeExtensionDefinition(_, fields, dirs, comment, tc, _)
if (breakOrSkip(onEnter(n))) {
fields.foreach(d loop(d))
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
tc.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ InputObjectTypeExtensionDefinition(_, fields, dirs, comment, tc, _)
if (breakOrSkip(onEnter(n))) {
fields.foreach(d loop(d))
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
tc.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ UnionTypeExtensionDefinition(_, types, dirs, comment, _)
if (breakOrSkip(onEnter(n))) {
types.foreach(t loop(t))
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ EnumTypeExtensionDefinition(_, values, dirs, comment, tc, _)
if (breakOrSkip(onEnter(n))) {
values.foreach(t loop(t))
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
tc.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
case n @ ScalarTypeExtensionDefinition(_, dirs, comment, _)
if (breakOrSkip(onEnter(n))) {
loop(definition)
dirs.foreach(d loop(d))
comment.foreach(s loop(s))
breakOrSkip(onLeave(n))
}
Expand Down
15 changes: 13 additions & 2 deletions src/main/scala/sangria/macros/AstLiftable.scala
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,19 @@ trait AstLiftable {
q"_root_.sangria.ast.DirectiveDefinition($n, $a, $l, $desc, $c, $p)"
case SchemaDefinition(o, d, c, tc, p)
q"_root_.sangria.ast.SchemaDefinition($o, $d, $c, $tc, $p)"
case TypeExtensionDefinition(d, c, p)
q"_root_.sangria.ast.TypeExtensionDefinition($d, $c, $p)"

case ObjectTypeExtensionDefinition(n, i, f, d, c, tc, p)
q"_root_.sangria.ast.ObjectTypeExtensionDefinition($n, $i, $f, $d, $c, $tc, $p)"
case InterfaceTypeExtensionDefinition(n, f, d, c, tc, p)
q"_root_.sangria.ast.InterfaceTypeExtensionDefinition($n, $f, $d, $c, $tc, $p)"
case InputObjectTypeExtensionDefinition(n, f, d, c, tc, p)
q"_root_.sangria.ast.InputObjectTypeExtensionDefinition($n, $f, $d, $c, $tc, $p)"
case UnionTypeExtensionDefinition(n, t, d, c, p)
q"_root_.sangria.ast.UnionTypeExtensionDefinition($n, $t, $d, $c, $p)"
case EnumTypeExtensionDefinition(n, v, d, c, tc, p)
q"_root_.sangria.ast.EnumTypeExtensionDefinition($n, $v, $d, $c, $tc, $p)"
case ScalarTypeExtensionDefinition(n, d, c, p)
q"_root_.sangria.ast.ScalarTypeExtensionDefinition($n, $d, $c, $p)"

case EnumTypeDefinition(n, v, d, desc, c, tc, p)
q"_root_.sangria.ast.EnumTypeDefinition($n, $v, $d, $desc, $c, $tc, $p)"
Expand Down
Loading

0 comments on commit 43f15b8

Please sign in to comment.