コード例 #1
0
        /// <summary>
        /// Parse a variable.
        /// <see cref="VariableNode" />:
        /// $Name
        /// </summary>
        private void ParseVariableName(bool isReference)
        {
            ISyntaxToken             start = _reader.Token;
            SyntaxClassificationKind classificationKind = isReference
                ? SyntaxClassificationKind.VariableReference
                : SyntaxClassificationKind.VariableIdentifier;

            if (_reader.Kind == TokenKind.Dollar)
            {
                MoveNext();
                _classifications.AddClassification(
                    _reader.Kind == TokenKind.Name
                        ? classificationKind
                        : SyntaxClassificationKind.Error,
                    new Location(start, _reader.Token));
            }
            else
            {
                _classifications.AddClassification(
                    SyntaxClassificationKind.Error,
                    _reader.Token);
            }

            MoveNext();
        }
コード例 #2
0
 public SyntaxClassification(SyntaxClassificationKind kind, int start, int length)
 {
     Kind   = kind;
     Start  = start;
     End    = start + length;
     Length = length;
 }
コード例 #3
0
        /// <summary>
        /// Parses the <see cref="OperationType" />.
        /// </summary>
        private void ParseOperationType()
        {
            SyntaxClassificationKind kind = (_reader.Kind == TokenKind.Name ||
                                             _reader.Value.SequenceEqual(GraphQLKeywords.Query) ||
                                             _reader.Value.SequenceEqual(GraphQLKeywords.Mutation) ||
                                             _reader.Value.SequenceEqual(GraphQLKeywords.Subscription))
                ? SyntaxClassificationKind.OperationKind
                : SyntaxClassificationKind.Error;

            _classifications.AddClassification(kind, _reader.Token);
            MoveNext();
        }
コード例 #4
0
 private bool Skip(
     SyntaxClassificationKind classificationKind,
     TokenKind tokenKind)
 {
     if (_reader.Kind == tokenKind)
     {
         _classifications.AddClassification(
             classificationKind,
             _reader.Token);
         MoveNext();
         return(true);
     }
     return(false);
 }
コード例 #5
0
 private bool SkipKeyword(
     SyntaxClassificationKind classificationKind,
     ReadOnlySpan <char> keyword)
 {
     if (_reader.Kind == TokenKind.Name &&
         _reader.Value.SequenceEqual(keyword))
     {
         _classifications.AddClassification(
             classificationKind,
             _reader.Token);
         MoveNext();
         return(true);
     }
     return(false);
 }
コード例 #6
0
        /// <summary>
        /// Parses input value definitions.
        /// <see cref="InputValueDefinitionNode" />:
        /// Description? Name : Type DefaultValue? Directives[isConstant=true]?
        /// </summary>
        private void ParseInputValueDefinition(
            SyntaxClassificationKind classificationKind)
        {
            ParseDescription();
            ParseName(classificationKind);
            ParseColon();
            ParseTypeReference();

            if (SkipEqual())
            {
                ParseValueLiteral(true);
            }

            ParseDirectives(true);
        }
コード例 #7
0
 private void ParseName(SyntaxClassificationKind kind)
 {
     if (_reader.Kind == TokenKind.Name)
     {
         _classifications.AddClassification(
             kind,
             _reader.Token);
     }
     else
     {
         _classifications.AddClassification(
             SyntaxClassificationKind.Error,
             _reader.Token);
     }
     MoveNext();
 }
コード例 #8
0
 private void ParseStringLiteral(
     SyntaxClassificationKind kind = SyntaxClassificationKind.StringLiteral)
 {
     if (_isString[(int)_reader.Kind])
     {
         _classifications.AddClassification(
             kind,
             _reader.Token);
     }
     else
     {
         _classifications.AddClassification(
             SyntaxClassificationKind.Error,
             _reader.Token);
     }
     MoveNext();
 }
コード例 #9
0
 private void Expect(
     SyntaxClassificationKind classificationKind,
     TokenKind tokenKind)
 {
     if (_reader.Skip(tokenKind, out ISyntaxToken? token))
     {
         _classifications.AddClassification(
             classificationKind,
             token);
     }
     else
     {
         _classifications.AddClassification(
             SyntaxClassificationKind.Error,
             _reader.Token);
         MoveNext();
     }
 }
コード例 #10
0
 private void ParseKeyword(
     SyntaxClassificationKind classificationKind,
     ReadOnlySpan <char> keyword)
 {
     if (_reader.Kind == TokenKind.Name &&
         _reader.Value.SequenceEqual(keyword))
     {
         _classifications.AddClassification(
             classificationKind,
             _reader.Token);
     }
     else
     {
         _classifications.AddClassification(
             SyntaxClassificationKind.Error,
             _reader.Token);
     }
     MoveNext();
 }
コード例 #11
0
 public static void AddClassification(
     this ICollection <SyntaxClassification> classifications,
     SyntaxClassificationKind kind,
     ISyntaxToken token) =>
 classifications.Add(new SyntaxClassification(
                         kind, token.Start, token.Length));
コード例 #12
0
 public static void AddClassification(
     this ICollection <SyntaxClassification> classifications,
     SyntaxClassificationKind kind,
     Location location) =>
 classifications.Add(new SyntaxClassification(
                         kind, location.Start, location.Length));