bool ShouldProvideCompletions(SnapshotPoint triggerLocation, GuiDescriptionSyntax guiDescriptionSyntax, out SnapshotSpan applicableToSpan) { applicableToSpan = default; // TODO FindTokenOrTrivia Methode? var triggerToken = guiDescriptionSyntax.FindToken(triggerLocation); if (triggerToken.IsMissing || triggerToken == default) { return(false); } int start = triggerToken.ExtentStart; // Wir haben ein Token an der Trigger Location if (triggerToken.Extent.IntersectsWith(triggerLocation)) { // Keine Autovervollständigung in Zeichenfolgen if (triggerToken.Kind == SyntaxKind.String) { return(false); } } else { // Die Trigger Location befindet sich in den Trivias var tokenExtent = triggerToken.Extent; var syntaxTrivia = default(SyntaxTrivia); if (triggerLocation < tokenExtent.Start) { syntaxTrivia = triggerToken.LeadingTrivia.FirstOrDefault(t => t.Extent.IntersectsWith(triggerLocation)); } else if (triggerLocation > tokenExtent.End) { syntaxTrivia = triggerToken.TrailingTrivia.FirstOrDefault(t => t.Extent.IntersectsWith(triggerLocation)); } // Kann es das geben? if (syntaxTrivia == default) { return(false); } // Keine Vervollständigung in Kommentaren if (syntaxTrivia.Kind == SyntaxKind.MultiLineCommentTrivia || syntaxTrivia.Kind == SyntaxKind.SingleLineCommentTrivia ) { return(false); } start = syntaxTrivia.ExtentStart; } applicableToSpan = new SnapshotSpan(new SnapshotPoint(triggerLocation.Snapshot, start), triggerLocation); return(true); }
public static ImmutableArray <OutlineElement> GetItems(GuiDescriptionSyntax syntaxRoot) { var outlineElement = OutlineBuilder.Build(syntaxRoot, detailed: true); if (outlineElement == null) { return(ImmutableArray <OutlineElement> .Empty); } return(outlineElement.Flatten()); }
public static OutlineElement Build(GuiDescriptionSyntax syntaxRoot, bool detailed) { if (syntaxRoot == null) { return(null); } var builder = new OutlineBuilder(detailed); // Startpunkt ist bisweilen immer der Container var container = syntaxRoot.DescendantNodes().OfType <ContainerSyntax>().FirstOrDefault(); if (container == null) { return(null); } return(builder.Visit(container)); }