public async Task CanDoTagging(string testFile) { // Arrange. var sourceCode = File.ReadAllText(testFile); var textBuffer = TextBufferUtility.CreateTextBuffer(Container, sourceCode); var backgroundParser = new BackgroundParser(textBuffer); var snapshot = textBuffer.CurrentSnapshot; var syntaxTree = snapshot.GetSyntaxTree(CancellationToken.None); var snapshotSyntaxTree = new SnapshotSyntaxTree(snapshot, syntaxTree); var tagger = CreateTagger(backgroundParser, snapshot); // Act. await tagger.InvalidateTags(snapshotSyntaxTree, CancellationToken.None); var tagSpans = tagger.GetTags(new NormalizedSnapshotSpanCollection(new[] { new SnapshotSpan(snapshot, 0, snapshot.Length) })).ToList(); // Assert. if (MustCreateTagSpans) { Assert.That(tagSpans.Any()); } backgroundParser.Dispose(); }
public async virtual Task InvalidateTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { await Task.Run(() => { try { var tagsResult = GetTags(snapshotSyntaxTree, cancellationToken); _tags = tagsResult.Item2 .Select(x => new LineBasedTagSpan { EndLine = x.Span.End.GetContainingLine().LineNumber, Span = x.Span, Tag = x.Tag }) .ToList(); var snapshotSpan = new SnapshotSpan(tagsResult.Item1, 0, tagsResult.Item1.Length); OnTagsChanged(new SnapshotSpanEventArgs(snapshotSpan)); } catch (OperationCanceledException) { } catch (Exception ex) { Logger.Log("Tagging failed: " + ex); } }, cancellationToken); }
async Task IBackgroundParserSyntaxTreeHandler.OnSyntaxTreeAvailable(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { // TODO: Only safe to clear error list if each tagger has its own ErrorListHelper. _errorListHelper.Clear(); await InvalidateTags(snapshotSyntaxTree, cancellationToken); }
public async Task Initialize() { await Task.Run(async() => { var snapshot = _textBuffer.CurrentSnapshot; var snapshotSyntaxTree = new SnapshotSyntaxTree(snapshot, snapshot.GetSyntaxTree(CancellationToken.None)); await InvalidateTargets(snapshotSyntaxTree, CancellationToken.None); }); }
private async Task InvalidateTargets(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { var navigationTargets = new List <EditorTypeNavigationTarget>(); var navigationTargetsVisitor = new NavigationTargetsVisitor(snapshotSyntaxTree.Snapshot, _glyphService, cancellationToken); await Task.Run(() => navigationTargets.AddRange(navigationTargetsVisitor.GetTargets((CompilationUnitSyntax)snapshotSyntaxTree.SyntaxTree.Root)), cancellationToken); _navigationTargets = navigationTargets; OnNavigationTargetsChanged(EventArgs.Empty); }
public static ITagger <T> CreateTagger <TTagger, T>(ITextBuffer textBuffer, Func <TTagger> createCallback) where TTagger : IAsyncTagger where T : ITag { return(textBuffer.Properties.GetOrCreateSingletonProperty( typeof(TTagger), () => { var tagger = createCallback(); Task.Run(async() => { var snapshot = textBuffer.CurrentSnapshot; var snapshotSyntaxTree = new SnapshotSyntaxTree(snapshot, snapshot.GetSyntaxTree(CancellationToken.None)); await tagger.InvalidateTags(snapshotSyntaxTree, CancellationToken.None); }); return tagger as ITagger <T>; })); }
protected abstract Tuple <ITextSnapshot, List <ITagSpan <TTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken);
async Task IBackgroundParserSyntaxTreeHandler.OnSyntaxTreeAvailable(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { await InvalidateTargets(snapshotSyntaxTree, cancellationToken); }
protected override Tuple <ITextSnapshot, List <ITagSpan <IClassificationTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { var semanticTags = new List <ITagSpan <IClassificationTag> >(); var semanticTaggerVisitor = new SemanticTaggerVisitor(_classificationService, snapshotSyntaxTree.Snapshot, semanticTags, cancellationToken); semanticTaggerVisitor.VisitCompilationUnit((CompilationUnitSyntax)snapshotSyntaxTree.SyntaxTree.Root); return(Tuple.Create(snapshotSyntaxTree.Snapshot, semanticTags)); }
protected override Tuple <ITextSnapshot, List <ITagSpan <IClassificationTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { var results = new List <ITagSpan <IClassificationTag> >(); var worker = new SyntaxTaggerWorker(_classificationService, results, snapshotSyntaxTree.Snapshot, cancellationToken); worker.ClassifySyntax(snapshotSyntaxTree.SyntaxTree); return(Tuple.Create(snapshotSyntaxTree.Snapshot, results)); }
protected override Tuple <ITextSnapshot, List <ITagSpan <ITextMarkerTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { var snapshot = snapshotSyntaxTree.Snapshot; if (snapshot != _textView.TextSnapshot) { return(Tuple.Create(snapshot, _emptyList)); } var syntaxTree = snapshotSyntaxTree.SyntaxTree; var unmappedPosition = _textView.GetPosition(snapshot); var position = syntaxTree.MapRootFilePosition(unmappedPosition); var result = _braceMatcher.MatchBraces(syntaxTree, position); if (!result.IsValid) { return(Tuple.Create(snapshot, _emptyList)); } var leftTag = new TagSpan <ITextMarkerTag>(new SnapshotSpan(snapshot, result.Left.Start, result.Left.Length), _tag); var rightTag = new TagSpan <ITextMarkerTag>(new SnapshotSpan(snapshot, result.Right.Start, result.Right.Length), _tag); return(Tuple.Create(snapshot, new List <ITagSpan <ITextMarkerTag> > { leftTag, rightTag })); }
public override Task InvalidateTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { _latestSnapshotSyntaxTree = snapshotSyntaxTree; return(base.InvalidateTags(snapshotSyntaxTree, cancellationToken)); }
protected override Tuple <ITextSnapshot, List <ITagSpan <IOutliningRegionTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { if (!_enabled) { return(Tuple.Create(snapshotSyntaxTree.Snapshot, new List <ITagSpan <IOutliningRegionTag> >())); } var outliningRegions = new List <ITagSpan <IOutliningRegionTag> >(); var outliningVisitor = new OutliningVisitor(snapshotSyntaxTree.Snapshot, outliningRegions, cancellationToken); outliningVisitor.VisitCompilationUnit((CompilationUnitSyntax)snapshotSyntaxTree.SyntaxTree.Root); return(Tuple.Create(snapshotSyntaxTree.Snapshot, outliningRegions)); }
protected override Tuple <ITextSnapshot, List <ITagSpan <IErrorTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken) { if (!_errorReportingEnabled) { return(Tuple.Create(snapshotSyntaxTree.Snapshot, new List <ITagSpan <IErrorTag> >())); } var syntaxTree = snapshotSyntaxTree.SyntaxTree; var snapshot = snapshotSyntaxTree.Snapshot; var tagSpans = syntaxTree.GetDiagnostics() .Select(d => CreateTagSpan(snapshot, d, _squigglesEnabled)) .Where(x => x != null) .ToList(); return(Tuple.Create(snapshot, tagSpans)); }