Ejemplo n.º 1
0
        /// <summary>
        /// A parser that consumes the next next <see cref="LexicalToken"/> if it has the specified <see cref="SyntaxKind"/>, producing a corresponding <see cref="SyntaxToken"/>.
        /// </summary>
        public static Parser <LexicalToken, SyntaxToken> Token(SyntaxKind kind, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal, string ctext = null)
        {
            var rule = Match(t => t.Kind == kind, lt => SyntaxToken.From(lt)).WithTag(GetDefaultTag(kind));

            var item = GetDefaultCompletionItem(kind, ckind, priority, ctext);

            if (item != null)
            {
                rule = rule.WithAnnotations(new[] { item });
            }

            return(rule);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// A parser that consumes the next <see cref="LexicalToken"/> (or series of adjacent tokens) if it has the specified text, producing a single <see cref="SyntaxToken"/>.
        /// </summary>
        public static Parser <LexicalToken, SyntaxToken> Token(string text, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal, string ctext = null)
        {
            var rule = MatchText(text).WithTag(GetDefaultTag(text));

            var item = GetDefaultCompletionItem(text, ckind, priority, ctext);

            if (item != null)
            {
                rule = rule.WithAnnotations(new[] { item });
            }

            return(rule);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets the default <see cref="CompletionItem"/> for a token with the specified <see cref="SyntaxKind"/>.
        /// </summary>
        private static CompletionItem GetDefaultCompletionItem(SyntaxKind kind, CompletionKind?ckind, CompletionPriority priority, string ctext = null)
        {
            var text = SyntaxFacts.GetText(kind);

            if (string.IsNullOrWhiteSpace(text))
            {
                return(null);
            }

            switch (kind.GetCategory())
            {
            case SyntaxCategory.Keyword:
                return(GetDefaultCompletionItem(text, ckind ?? CompletionKind.Keyword, priority, ctext));

            case SyntaxCategory.Operator:
                return(GetDefaultCompletionItem(text, ckind ?? CompletionKind.ScalarInfix, priority, ctext));

            case SyntaxCategory.Punctuation:
                return(GetDefaultCompletionItem(text, ckind ?? CompletionKind.Punctuation, priority, ctext));

            default:
                return(null);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Gets the default <see cref="CompletionItem"/> for tokens with any of the specified texts.
 /// </summary>
 private static IEnumerable <CompletionItem> GetCompletionItems(IEnumerable <string> texts, CompletionKind?ckind, CompletionPriority priority) =>
 texts.Select(t => GetDefaultCompletionItem(t, ckind, priority)).Where(i => i != null);
Ejemplo n.º 5
0
 /// <summary>
 /// Gets the default <see cref="CompletionItem"/> for tokens with any of the specified <see cref="SyntaxKind"/>.
 /// </summary>
 private static IEnumerable <CompletionItem> GetCompletionItems(IEnumerable <SyntaxKind> kinds, CompletionKind?ckind, CompletionPriority priority) =>
 kinds.Select(k => GetDefaultCompletionItem(k, ckind, priority)).Where(i => i != null);
Ejemplo n.º 6
0
 /// <summary>
 /// Gets the default <see cref="CompletionItem"/> for a token with the specified text.
 /// </summary>
 private static CompletionItem GetDefaultCompletionItem(string text, CompletionKind?ckind, CompletionPriority priority, string ctext = null)
 {
     return(GetDefaultCompletionItem(text, ckind ?? CompletionKind.Syntax, priority, ctext));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// A parser that consumes the next <see cref="LexicalToken"/> (or series of adjacent tokens) if it has one of the specified texts, producing a corresponding <see cref="SyntaxToken"/> or an equivalent missing token otherwise.
 /// </summary>
 public static Parser <LexicalToken, SyntaxToken> RequiredToken(IReadOnlyList <string> texts, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal) =>
 Required(Token(texts, ckind, priority), () => CreateMissingToken(texts));
Ejemplo n.º 8
0
 /// <summary>
 /// A parser that consumes the next <see cref="LexicalToken"/> (or series of adjacent tokens) if it has the specified text, producing a corresponding <see cref="SyntaxToken"/> or an equivalent missing token otherwise.
 /// </summary>
 public static Parser <LexicalToken, SyntaxToken> RequiredToken(string text, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal, string ctext = null) =>
 Required(Token(text, ckind, priority, ctext), () => CreateMissingToken(text));
Ejemplo n.º 9
0
        /// <summary>
        /// A parser that consumes the next <see cref="LexicalToken"/> (or series of adjacent tokens) if it has one of the specified texts, producing a single <see cref="SyntaxToken"/>.
        /// </summary>
        public static Parser <LexicalToken, SyntaxToken> Token(IReadOnlyList <string> texts, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal)
        {
            Ensure.ArgumentNotNull(texts, nameof(texts));
            var set = new HashSet <string>(texts);

            var rule = Match(t => set.Contains(t.Text), lt => SyntaxToken.From(lt)).WithTag(string.Join(" | ", texts.Select(t => GetDefaultTag(t))));

            var items = GetCompletionItems(texts, ckind, priority).ToList();

            if (items.Count > 0)
            {
                rule = rule.WithAnnotations(items);
            }

            return(rule);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// A parser that consumes the next <see cref="LexicalToken"/> (or series of adjacent tokens) if it has the specified text, producing a single <see cref="SyntaxToken"/>.
        /// </summary>
        public static Parser <LexicalToken, SyntaxToken> Token(string text, CompletionKind?ckind = null, CompletionPriority priority = CompletionPriority.Normal, string ctext = null)
        {
            var item = GetDefaultCompletionItem(text, ckind, priority, ctext);

            return(Token(text, item));
        }