public IEnumerable <ITagSpan <IClassificationTag> > GetTags(NormalizedSnapshotSpanCollection spans)
        {
            var syntaxTreeAndSnapshot = ParserService.SyntaxTreeAndSnapshot;

            if (syntaxTreeAndSnapshot == null)
            {
                yield break;
            }

            foreach (var span in spans)
            {
                var extent = TextExtent.FromBounds(span.Start.Position, span.End.Position);
                var result = SyntaxClassifier.Classify(syntaxTreeAndSnapshot.SyntaxTree.Root, extent);

                foreach (var classifiedExtent in result)
                {
                    _classificationMap.TryGetValue(classifiedExtent.Classification, out var ct);
                    if (ct == null)
                    {
                        continue;
                    }

                    var tokenSpan = new SnapshotSpan(syntaxTreeAndSnapshot.Snapshot, new Span(classifiedExtent.Extent.Start, classifiedExtent.Extent.Length));
                    var tagSpan   = tokenSpan.TranslateTo(span.Snapshot, SpanTrackingMode.EdgeExclusive);
                    var tag       = new ClassificationTag(ct);

                    yield return(new TagSpan <IClassificationTag>(tagSpan, tag));
                }
            }
        }
Exemple #2
0
        public void SimpleSyntaxTest()
        {
            var source = SourceText.From(TestGd);
            var tree   = SyntaxTree.Parse(source);

            Assert.That(tree.Diagnostics.Length, Is.EqualTo(0));

            var classification = SyntaxClassifier.Classify(tree.Root);

            Assert.That(classification.Length, Is.EqualTo(50));

            var parts = tree.Root.ToSimplifiedText();

            var txt      = parts.JoinText();
            var expected =
                @"NAMESPACE ns
    DIALOG DemoDialog
        PROPERTIES
            Title = ""DemoDialog""
        END PROPERTIES
        CONTROLS
        END CONTROLS
    END DIALOG DemoDialog
END NAMESPACE
";

            Assert.That(txt, Is.EqualTo(expected));

            var editorSettings = TextEditorSettings.Default.With(tabSize: 2);

            parts    = tree.Root.ToSimplifiedText(editorSettings);
            txt      = parts.JoinText();
            expected =
                @"NAMESPACE ns
  DIALOG DemoDialog
    PROPERTIES
      Title = ""DemoDialog""
    END PROPERTIES
    CONTROLS
    END CONTROLS
  END DIALOG DemoDialog
END NAMESPACE
";
            Assert.That(txt, Is.EqualTo(expected));
        }