Skip to content

Commit b8a9f79

Browse files
authored
C#11 pattern matching for Span<char> (#282)
1 parent 94657fe commit b8a9f79

File tree

1 file changed

+23
-48
lines changed

1 file changed

+23
-48
lines changed

src/GraphQLParser/ParserContext.Parse.cs

Lines changed: 23 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -430,9 +430,9 @@ private GraphQLEnumTypeExtension ParseEnumTypeExtension(int start, List<GraphQLC
430430
}
431431

432432
// http://spec.graphql.org/October2021/#EnumValue
433-
private GraphQLEnumValue ParseEnumValue()
433+
private GraphQLEnumValue ParseEnumValue(bool validate)
434434
{
435-
if (_currentToken.Value == "true" || _currentToken.Value == "false" || _currentToken.Value == "null")
435+
if (validate && (_currentToken.Value == "true" || _currentToken.Value == "false" || _currentToken.Value == "null"))
436436
{
437437
Throw_Unexpected_Token("; enum values are represented as unquoted names but not 'true' or 'false' or 'null'.");
438438
}
@@ -462,7 +462,7 @@ private GraphQLEnumValueDefinition ParseEnumValueDefinition()
462462

463463
def.Description = Peek(TokenKind.STRING) ? ParseDescription() : null;
464464
def.Comments = GetComments();
465-
def.EnumValue = ParseEnumValue();
465+
def.EnumValue = ParseEnumValue(true);
466466
def.Name = def.EnumValue.Name; // ATTENTION: should set Name property (inherited from GraphQLTypeDefinition)
467467
def.Directives = Peek(TokenKind.AT) ? ParseDirectives() : null;
468468
def.Location = GetLocation(start);
@@ -893,37 +893,21 @@ private ASTNode ParseNamedDefinitionWithDescription()
893893
}
894894

895895
// verify this is a NAME
896-
if (token.Kind == TokenKind.NAME)
897-
{
898-
// retrieve the value
899-
var value = token.Value;
900-
901-
if (value == "schema")
902-
return ParseSchemaDefinition();
903-
904-
if (value == "scalar")
905-
return ParseScalarTypeDefinition();
906-
907-
if (value == "type")
908-
return ParseObjectTypeDefinition();
909-
910-
if (value == "interface")
911-
return ParseInterfaceTypeDefinition();
912-
913-
if (value == "union")
914-
return ParseUnionTypeDefinition();
915-
916-
if (value == "enum")
917-
return ParseEnumTypeDefinition();
918-
919-
if (value == "input")
920-
return ParseInputObjectTypeDefinition();
896+
if (token.Kind != TokenKind.NAME)
897+
return Throw_Unexpected_Token();
921898

922-
if (value == "directive")
923-
return ParseDirectiveDefinition();
924-
}
925-
926-
return Throw_Unexpected_Token();
899+
return token.Value.Span switch
900+
{
901+
"schema" => ParseSchemaDefinition(),
902+
"scalar" => ParseScalarTypeDefinition(),
903+
"type" => ParseObjectTypeDefinition(),
904+
"interface" => ParseInterfaceTypeDefinition(),
905+
"union" => ParseUnionTypeDefinition(),
906+
"enum" => ParseEnumTypeDefinition(),
907+
"input" => ParseInputObjectTypeDefinition(),
908+
"directive" => ParseDirectiveDefinition(),
909+
_ => Throw_Unexpected_Token()
910+
};
927911
}
928912

929913
// http://spec.graphql.org/October2021/#NamedType
@@ -945,22 +929,13 @@ private GraphQLNamedType ParseNamedType()
945929

946930
private GraphQLValue ParseNameValue(/*bool isConstant*/)
947931
{
948-
var token = _currentToken;
949-
950-
if (token.Value == "true")
932+
return _currentToken.Value.Span switch
951933
{
952-
return ParseBooleanValue(true);
953-
}
954-
else if (token.Value == "false")
955-
{
956-
return ParseBooleanValue(false);
957-
}
958-
else
959-
{
960-
return token.Value == "null"
961-
? ParseNullValue()
962-
: ParseEnumValue();
963-
}
934+
"true" => ParseBooleanValue(true),
935+
"false" => ParseBooleanValue(false),
936+
"null" => ParseNullValue(),
937+
_ => ParseEnumValue(false)
938+
};
964939
}
965940

966941
// http://spec.graphql.org/October2021/#ObjectValue

0 commit comments

Comments
 (0)