Skip to content

Commit

Permalink
More WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
bd82 committed Aug 4, 2018
1 parent 566b2bb commit 64cd9bc
Showing 1 changed file with 106 additions and 17 deletions.
123 changes: 106 additions & 17 deletions lib/ast.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class AstBuilderVisitor extends BaseVisitor {
operation: this.visit(ctx.OperationType),
name: visitName(ctx.Name),
variableDefinitions: this.visit(ctx.VariableDefinitions),
directives: this.visit(ctx.Directives),
directives: this.visit(ctx.Directives) || [],
selectionSet: this.visit(ctx.SelectionSet),
loc: "TBD"
}
Expand Down Expand Up @@ -158,7 +158,7 @@ class AstBuilderVisitor extends BaseVisitor {
return {
kind: "FragmentSpread",
name: this.visit(ctx.FragmentName),
directives: this.visit(ctx.Directives),
directives: this.visit(ctx.Directives) || [],
loc: "TBD"
}
}
Expand All @@ -167,7 +167,7 @@ class AstBuilderVisitor extends BaseVisitor {
return {
kind: "InlineFragment",
typeCondition: this.visit(ctx.TypeCondition),
directives: this.visit(ctx.Directives),
directives: this.visit(ctx.Directives) || [],
selectionSet: this.visit(ctx.SelectionSet),
loc: "TBD"
}
Expand All @@ -178,7 +178,7 @@ class AstBuilderVisitor extends BaseVisitor {
kind: "FragmentDefinition",
name: this.visit(ctx.FragmentName),
typeCondition: this.visit(ctx.TypeCondition),
directives: this.visit(ctx.Directives),
directives: this.visit(ctx.Directives) || [],
selectionSet: this.visit(ctx.SelectionSet),
loc: "TBD"
}
Expand All @@ -198,9 +198,9 @@ class AstBuilderVisitor extends BaseVisitor {
} else if (ctx.IntValue) {
return visitToken(ctx.IntValue, "IntValue")
} else if (ctx.FloatValue) {
return visitToken(ctx.IntValue, "FloatValue")
return visitToken(ctx.FloatValue, "FloatValue")
} else if (ctx.StringValue) {
return visitToken(ctx.IntValue, "StringValue")
return visitStringLiteral(ctx.StringValue)
} else if (ctx.BooleanValue) {
return this.visit(ctx.BooleanValue)
} else if (ctx.NullValue) {
Expand Down Expand Up @@ -391,7 +391,7 @@ class AstBuilderVisitor extends BaseVisitor {
SchemaDefinition(ctx) {
return {
kind: "SchemaDefinition",
directives: this.visit(ctx.Directives),
directives: this.visit(ctx.Directives) || [],
operationTypes: this.visit(ctx.OperationTypeDefinition),
loc: "TBD"
}
Expand All @@ -400,27 +400,99 @@ class AstBuilderVisitor extends BaseVisitor {
SchemaExtension(ctx) {
return {
kind: "SchemaExtension",
directives: this.visit(ctx.Directives),
operationTypes: this.visit(ctx.OperationTypeDefinition),
directives: this.visit(ctx.Directives) || [],
operationTypes: this.visit(ctx.OperationTypeDefinitionList) || [],
loc: "TBD"
}
}

OperationTypeDefinitionList(ctx) {}
OperationTypeDefinitionList(ctx) {
let definitions = []
if (ctx.OperationTypeDefinition) {
definitions = ctx.OperationTypeDefinition.map(this.visit, this)
}
return definitions
}

OperationTypeDefinition(ctx) {}
OperationTypeDefinition(ctx) {
return {
kind: "OperationTypeDefinition",
operation: this.visit(ctx.OperationType),
type: type,
loc: "TBD"
}
}

Description(ctx) {}
Description(ctx) {
return visitStringLiteral(ctx.StringValue)
}

TypeDefinition(ctx) {}
TypeDefinition(ctx) {
if (ctx.ScalarTypeDefinition) {
return this.visit(ctx.ScalarTypeDefinition)
} else if (ctx.ObjectTypeDefinition) {
return this.visit(ctx.ObjectTypeDefinition)
} else if (ctx.InterfaceTypeDefinition) {
return this.visit(ctx.InterfaceTypeDefinition)
} else if (ctx.UnionTypeDefinition) {
return this.visit(ctx.UnionTypeDefinition)
} else if (ctx.EnumTypeDefinition) {
return this.visit(ctx.EnumTypeDefinition)
} else if (ctx.InputObjectTypeDefinition) {
return this.visit(ctx.InputObjectTypeDefinition)
} else {
throw "None Exhaustive Match"
}
}

TypeExtension(ctx) {}
TypeExtension(ctx) {
if (ctx.ScalarTypeExtension) {
return this.visit(ctx.ScalarTypeExtension)
} else if (ctx.ObjectTypeExtension) {
return this.visit(ctx.ObjectTypeExtension)
} else if (ctx.InterfaceTypeExtension) {
return this.visit(ctx.InterfaceTypeExtension)
} else if (ctx.UnionTypeExtension) {
return this.visit(ctx.UnionTypeExtension)
} else if (ctx.EnumTypeExtension) {
return this.visit(ctx.EnumTypeExtension)
} else if (ctx.InputObjectTypeExtension) {
return this.visit(ctx.InputObjectTypeExtension)
} else {
throw "None Exhaustive Match"
}
}

ScalarTypeDefinition(ctx) {}
ScalarTypeDefinition(ctx) {
return {
kind: "ScalarTypeDefinition",
description: this.visit(ctx.Description),
name: visitName(ctx.Name),
directives: this.visit(ctx.Directives) || [],
loc: "TBD"
}
}

ScalarTypeExtension(ctx) {}
ScalarTypeExtension(ctx) {
return {
kind: "ScalarTypeExtension",
name: visitName(ctx.Name),
directives: this.visit(ctx.Directives) || [],
loc: "TBD"
}
}

ObjectTypeDefinition(ctx) {}
ObjectTypeDefinition(ctx) {
return {
kind: "ObjectTypeDefinition",
description: this.visit(ctx.Description),
name: visitName(ctx.Name),
interfaces: this.visit(ctx.ImplementsInterfaces) || [],
directives: this.visit(ctx.Directives) || [],
fields: this.visit(ctx.FieldsDefinition) || [],
loc: "TBD"
}
}

ObjectTypeExtension(ctx) {}

Expand Down Expand Up @@ -498,3 +570,20 @@ function visitToken(tokCst, kind) {
loc: "TBD"
}
}

function visitStringLiteral(tokCst) {
if (tokCst === undefined) {
return undefined
}

const image = tokCst[0].image
// TODO: Token Categories for different string literal types
const isBlock = image[0] === '"' && image.image[1] === '"' && image === '"'

return {
kind: "StringValue",
value: tokCst[0].image,
block: isBlock,
loc: "TBD"
}
}

0 comments on commit 64cd9bc

Please sign in to comment.