protected virtual bool NeedsSeparatorBetween(SyntaxTrivia trivia) { var kind = trivia.GetKind(); if (kind == SyntaxKind.None || kind == DefaultWhitespaceKind) { return(false); } else { return(!Language.SyntaxFacts.IsPreprocessorDirective(trivia.GetKind())); } }
private bool ValidateTrivia(SyntaxTrivia trivia, SyntaxTree tree, string filename = "", List <Failure> failures = null) { var retVal = true; if (trivia.HasStructure) { retVal = retVal & ValidateNonTerminal(trivia.GetStructure(), tree, filename, failures); } bool pass = false; foreach (var rule in _triviaRules.Values) { var errorText = string.Empty; pass = rule.Test(trivia, tree, ref errorText); if (!pass) { if (failures != null) { failures.Add(new Failure(filename, rule, trivia.GetKind(), errorText, new FailureLocation(trivia.Span, tree))); } ValidationFailed(errorText, rule); } retVal = retVal & pass; } return(retVal); }
protected virtual bool EndsInLineBreak(SyntaxTrivia trivia) { if (trivia.GetKind() == DefaultEndOfLineKind) { return(true); } return(trivia.UnderlyingNode.IsTriviaWithEndOfLine()); }
public virtual int GetDeclarationDepth(SyntaxTrivia trivia) { if (IsPreprocessorDirective(trivia.GetKind())) { return(0); } return(GetDeclarationDepth((SyntaxToken)trivia.Token)); }
public static XElement ToXml( this SyntaxTrivia trivia, SyntaxTree syntaxTree, XmlOptions options = null ) { if (options == null) { options = new XmlOptions(); } XElement retVal = new XElement( "Node", new XAttribute("IsToken", false), new XAttribute("IsTrivia", true), new XAttribute("Kind", trivia.GetKind()), new XAttribute("IsMissing", false) ); if (options.Spans) { retVal.Add( @"<Span Start=<%= trivia.SpanStart %> End=<%= trivia.Span.End %> Length=<%= trivia.Span.Length %>/>" ); retVal.Add( @"<FullSpan Start=<%= trivia.FullSpan.Start %> End=<%= trivia.FullSpan.End %> Length=<%= trivia.FullSpan.Length %>/>" ); } if (options.Text) { retVal.Add(@"<Text><%= New XCData(trivia.GetText()) %></Text>"); } if (options.ReflectionInfo) { AddInfo(trivia, retVal, options); } if (options.Errors) { if (syntaxTree.GetDiagnostics(trivia).Any()) { AddErrors(retVal, syntaxTree.GetDiagnostics(trivia), options); } } if (trivia.HasStructure) { retVal.Add(trivia.GetStructure().ToXml(syntaxTree, options)); } return(retVal); }
private void AddTrivia(TreeViewItem parentItem, SyntaxTrivia trivia, bool isLeadingTrivia) { var kind = trivia.GetKind(); var tag = new SyntaxTag() { SyntaxTrivia = trivia, Category = SyntaxCategory.SyntaxTrivia, Span = trivia.Span, FullSpan = trivia.FullSpan, Kind = kind, ParentItem = parentItem }; var item = new TreeViewItem() { Tag = tag, IsExpanded = false, Foreground = Brushes.Maroon, Background = trivia.ContainsDiagnostics ? Brushes.Pink : Brushes.White, Header = (isLeadingTrivia ? "Lead: " : "Trail: ") + tag.Kind + " " + trivia.Span.ToString() }; if (SyntaxTree != null && trivia.ContainsDiagnostics) { item.ToolTip = string.Empty; foreach (var diagnostic in SyntaxTree.GetDiagnostics(trivia)) { item.ToolTip += diagnostic.ToString() + "\n"; } item.ToolTip = item.ToolTip.ToString().Trim(); } item.Selected += new RoutedEventHandler((sender, e) => { _isNavigatingFromTreeToSource = true; typeTextLabel.Visibility = Visibility.Visible; kindTextLabel.Visibility = Visibility.Visible; typeValueLabel.Content = trivia.GetType().Name; kindValueLabel.Content = kind; _propertyGrid.SelectedObject = trivia; item.IsExpanded = true; if (!_isNavigatingFromSourceToTree && SyntaxTriviaNavigationToSourceRequested != null) { SyntaxTriviaNavigationToSourceRequested(trivia); } _isNavigatingFromTreeToSource = false; e.Handled = true; }); item.Expanded += new RoutedEventHandler((sender, e) => { if (item.Items.Count == 1 && item.Items[0] == null) { // Remove placeholder child and populate real children. item.Items.RemoveAt(0); AddNode(item, trivia.GetStructure()); } }); if (parentItem == null) { treeView.Items.Clear(); treeView.Items.Add(item); typeTextLabel.Visibility = Visibility.Hidden; kindTextLabel.Visibility = Visibility.Hidden; typeValueLabel.Content = string.Empty; kindValueLabel.Content = string.Empty; } else { parentItem.Items.Add(item); } if (trivia.HasStructure) { if (IsLazy) { // Add placeholder child to indicate that real children need to be populated on expansion. item.Items.Add(null); } else { // Recursively populate all descendants. AddNode(item, trivia.GetStructure()); } } }
public static bool IsDisabledOrSkippedText(this SyntaxTrivia n) { var kind = n.GetKind(); return(kind.Contains("Disabled") || kind.Contains("Skipped")); }
public static bool IsDocumentationComment(this SyntaxTrivia n) { return(n.GetKind().Contains("DocumentationComment")); }
protected virtual bool NeedsIndentAfterLineBreak(SyntaxTrivia trivia) { var kind = trivia.GetKind(); return(Language.SyntaxFacts.IsCommentTrivia(kind)); }
protected virtual bool NeedsLineBreakAfter(SyntaxTrivia trivia, bool isTrailingTrivia) { var kind = trivia.GetKind(); return(Language.SyntaxFacts.IsPreprocessorDirective(kind)); }
private void AddTrivia(TreeViewItem parentItem, SyntaxTrivia trivia, bool isLeadingTrivia) { var kind = trivia.GetKind(); var tag = new SyntaxTag() { SyntaxTrivia = trivia, Category = SyntaxCategory.SyntaxTrivia, Span = trivia.Span, FullSpan = trivia.FullSpan, Kind = kind, ParentItem = parentItem }; var item = CreateTreeViewItem(tag, (isLeadingTrivia ? "Lead: " : "Trail: ") + tag.Kind + " " + trivia.Span.ToString(), trivia.ContainsDiagnostics); item.SetResourceReference(ForegroundProperty, SyntaxTriviaTextBrushKey); if (SyntaxTree != null && trivia.ContainsDiagnostics) { item.ToolTip = string.Empty; foreach (var diagnostic in SyntaxTree.GetDiagnostics(trivia)) { item.ToolTip += diagnostic.ToString() + "\n"; } item.ToolTip = item.ToolTip.ToString().Trim(); } item.Selected += new RoutedEventHandler((sender, e) => { _isNavigatingFromTreeToSource = true; typeTextLabel.Visibility = Visibility.Visible; kindTextLabel.Visibility = Visibility.Visible; typeValueLabel.Content = trivia.GetType().Name; kindValueLabel.Content = kind; _propertyGrid.SelectedObject = trivia; item.IsExpanded = true; if (!_isNavigatingFromSourceToTree && SyntaxTriviaNavigationToSourceRequested != null) { SyntaxTriviaNavigationToSourceRequested(trivia); } _isNavigatingFromTreeToSource = false; e.Handled = true; }); item.Expanded += new RoutedEventHandler((sender, e) => { if (item.Items.Count == 1 && item.Items[0] == null) { // Remove placeholder child and populate real children. item.Items.RemoveAt(0); AddNode(item, trivia.GetStructure()); } }); if (parentItem == null) { treeView.Items.Clear(); treeView.Items.Add(item); typeTextLabel.Visibility = Visibility.Hidden; kindTextLabel.Visibility = Visibility.Hidden; typeValueLabel.Content = string.Empty; kindValueLabel.Content = string.Empty; } else { parentItem.Items.Add(item); } if (trivia.HasStructure) { if (IsLazy) { // Add placeholder child to indicate that real children need to be populated on expansion. item.Items.Add(null); } else { // Recursively populate all descendants. AddNode(item, trivia.GetStructure()); } } }
private bool ValidateTrivia(SyntaxTrivia trivia, SyntaxTree tree, string filename = "", List<Failure> failures = null) { var retVal = true; if (trivia.HasStructure) { retVal = retVal & ValidateNonTerminal(trivia.GetStructure(), tree, filename, failures); } bool pass = false; foreach (var rule in m_TriviaRules.Values) { var errorText = string.Empty; pass = rule.Test(trivia, tree, ref errorText); if (!pass) { if (failures != null) { failures.Add(new Failure(filename, rule, trivia.GetKind(), errorText, new FailureLocation(trivia.Span, tree))); } ValidationFailed(errorText, rule); } retVal = retVal & pass; } return retVal; }