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); }