示例#1
0
        protected override ClassificationRefresh ProcessText(
            ITextSnapshot snapshot,
            Parser parseResult,
            SharedTagList tagList,
            bool writeAccess)
        {
            bool parsedCorrectly = parseResult.ParsedCorrectly;

            if (writeAccess)
            {
                foreach (var token in parseResult.Tokens)
                {
                    tagList.AddRange(this, QmlSyntaxTag.GetClassification(snapshot, token));
                }
                foreach (var node in parseResult.AstNodes)
                {
                    tagList.AddRange(this, QmlSyntaxTag.GetClassification(snapshot, node));
                }
            }

            if (parsedCorrectly)
            {
                return(ClassificationRefresh.FullText);
            }
            else
            {
                return(ClassificationRefresh.TagsOnly);
            }
        }
 protected override ClassificationRefresh ProcessText(
     ITextSnapshot snapshot,
     Parser parseResult,
     SharedTagList tagList,
     bool writeAccess)
 {
     if (writeAccess)
     {
         var expressions = parseResult.AstNodes
                           .Where(x => x.Kind == AstNodeKind.FieldMemberExpression ||
                                  x.Kind == AstNodeKind.IdentifierExpression)
                           .GroupBy(x => x.FirstSourceLocation.Offset)
                           .Select(x => new
         {
             Offset = x.Key,
             Length = x.Max(y =>
                            y.LastSourceLocation.Offset + y.LastSourceLocation.Length) - x.Key,
             List = x.OrderBy(y =>
                              y.LastSourceLocation.Offset + y.LastSourceLocation.Length)
         });
         tagList.AddRange(this, expressions
                          .Select(x => new ExprTrackingTag(snapshot, x.Offset, x.Length, x.List)));
     }
     return(ClassificationRefresh.FullText);
 }