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