From 429ea52fc5e65363570d9ab57974602ed8f8c054 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Fri, 22 Dec 2017 13:30:19 -0800 Subject: [PATCH] Added attribute span property for fileMemberElement --- .../v1/MembersTree/FileMemberElement.cs | 4 +++ .../Workers/StructureComputer.cs | 35 ++++++++++--------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/OmniSharp.Abstractions/Models/v1/MembersTree/FileMemberElement.cs b/src/OmniSharp.Abstractions/Models/v1/MembersTree/FileMemberElement.cs index 11d20b9377..ee335dddfc 100644 --- a/src/OmniSharp.Abstractions/Models/v1/MembersTree/FileMemberElement.cs +++ b/src/OmniSharp.Abstractions/Models/v1/MembersTree/FileMemberElement.cs @@ -9,6 +9,10 @@ public class FileMemberElement : IComparable public QuickFix Location { get; set; } + public int AttributeSpanStart { get; set; } + + public int AttributeSpanEnd { get; set; } + public string Kind { get; set; } public ICollection Features { get; } = new List(); diff --git a/src/OmniSharp.Roslyn.CSharp/Workers/StructureComputer.cs b/src/OmniSharp.Roslyn.CSharp/Workers/StructureComputer.cs index 7ea43ecc63..2fbbdd31da 100644 --- a/src/OmniSharp.Roslyn.CSharp/Workers/StructureComputer.cs +++ b/src/OmniSharp.Roslyn.CSharp/Workers/StructureComputer.cs @@ -5,6 +5,7 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Text; using OmniSharp.Abstractions.Services; using OmniSharp.Models; using OmniSharp.Models.MembersTree; @@ -55,13 +56,15 @@ private async Task Process(Document document) (syntaxRoot as CSharpSyntaxNode)?.Accept(this); } - private FileMemberElement AsNode(SyntaxNode node, string text, Location location) + private FileMemberElement AsNode(SyntaxNode node, string text, Location location, TextSpan attributeSpan) { var ret = new FileMemberElement(); var lineSpan = location.GetLineSpan(); ret.Projects = new List(); ret.ChildNodes = new List(); ret.Kind = node.Kind().ToString(); + ret.AttributeSpanStart = attributeSpan.Start; + ret.AttributeSpanEnd = attributeSpan.End; ret.Location = new QuickFix() { Text = text, @@ -83,9 +86,9 @@ private FileMemberElement AsNode(SyntaxNode node, string text, Location location return ret; } - private FileMemberElement AsChild(SyntaxNode node, string text, Location location) + private FileMemberElement AsChild(SyntaxNode node, string text, Location location, TextSpan attributeSpan) { - var child = AsNode(node, text, location); + var child = AsNode(node, text, location, attributeSpan); var childNodes = ((List)_roots.Peek().ChildNodes); // Prevent inserting the same node multiple times @@ -104,9 +107,9 @@ private FileMemberElement AsChild(SyntaxNode node, string text, Location locatio } } - private FileMemberElement AsParent(SyntaxNode node, string text, Action fn, Location location) + private FileMemberElement AsParent(SyntaxNode node, string text, Action fn, Location location, TextSpan attributeSpan) { - var child = AsChild(node, text, location); + var child = AsChild(node, text, location, attributeSpan); _roots.Push(child); fn(); _roots.Pop(); @@ -115,52 +118,52 @@ private FileMemberElement AsParent(SyntaxNode node, string text, Action fn, Loca public override void VisitClassDeclaration(ClassDeclarationSyntax node) { - AsParent(node, node.Identifier.Text, () => base.VisitClassDeclaration(node), node.Identifier.GetLocation()); + AsParent(node, node.Identifier.Text, () => base.VisitClassDeclaration(node), node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitInterfaceDeclaration(InterfaceDeclarationSyntax node) { - AsParent(node, node.Identifier.Text, () => base.VisitInterfaceDeclaration(node), node.Identifier.GetLocation()); + AsParent(node, node.Identifier.Text, () => base.VisitInterfaceDeclaration(node), node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitEnumDeclaration(EnumDeclarationSyntax node) { - AsParent(node, node.Identifier.Text, () => base.VisitEnumDeclaration(node), node.Identifier.GetLocation()); + AsParent(node, node.Identifier.Text, () => base.VisitEnumDeclaration(node), node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitEnumMemberDeclaration(EnumMemberDeclarationSyntax node) { - AsChild(node, node.Identifier.Text, node.Identifier.GetLocation()); + AsChild(node, node.Identifier.Text, node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node) { - AsChild(node, node.Identifier.Text, node.Identifier.GetLocation()); + AsChild(node, node.Identifier.Text, node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitMethodDeclaration(MethodDeclarationSyntax node) { - AsChild(node, node.Identifier.Text, node.Identifier.GetLocation()); + AsChild(node, node.Identifier.Text, node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitFieldDeclaration(FieldDeclarationSyntax node) { - AsChild(node, node.Declaration.Variables.First().Identifier.Text, node.Declaration.Variables.First().Identifier.GetLocation()); + AsChild(node, node.Declaration.Variables.First().Identifier.Text, node.Declaration.Variables.First().Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitEventFieldDeclaration(EventFieldDeclarationSyntax node) { - AsChild(node, node.Declaration.Variables.First().Identifier.Text, node.Declaration.Variables.First().Identifier.GetLocation()); + AsChild(node, node.Declaration.Variables.First().Identifier.Text, node.Declaration.Variables.First().Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitStructDeclaration(StructDeclarationSyntax node) { - AsParent(node, node.Identifier.Text, () => base.VisitStructDeclaration(node), node.Identifier.GetLocation()); + AsParent(node, node.Identifier.Text, () => base.VisitStructDeclaration(node), node.Identifier.GetLocation(), node.AttributeLists.Span); } public override void VisitConstructorDeclaration(ConstructorDeclarationSyntax node) { - AsChild(node, node.Identifier.Text, node.Identifier.GetLocation()); + AsChild(node, node.Identifier.Text, node.Identifier.GetLocation(), node.AttributeLists.Span); } } -} \ No newline at end of file +}