コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 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);
     });
 }
コード例 #5
0
        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);
        }
コード例 #6
0
 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>;
     }));
 }
コード例 #7
0
 protected abstract Tuple <ITextSnapshot, List <ITagSpan <TTag> > > GetTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken);
コード例 #8
0
 async Task IBackgroundParserSyntaxTreeHandler.OnSyntaxTreeAvailable(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken)
 {
     await InvalidateTargets(snapshotSyntaxTree, cancellationToken);
 }
コード例 #9
0
        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));
        }
コード例 #10
0
ファイル: SyntaxTagger.cs プロジェクト: davidlee80/HlslTools
        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));
        }
コード例 #11
0
        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
            }));
        }
コード例 #12
0
 public override Task InvalidateTags(SnapshotSyntaxTree snapshotSyntaxTree, CancellationToken cancellationToken)
 {
     _latestSnapshotSyntaxTree = snapshotSyntaxTree;
     return(base.InvalidateTags(snapshotSyntaxTree, cancellationToken));
 }
コード例 #13
0
        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));
        }
コード例 #14
0
        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));
        }