Mii*_*ite 6 .net c# roslyn roslyn-code-analysis
我正在研究一小段roslyn代码,尝试在Visual Studio for MAC扩展项目中进行一些简单的重构.
我想重构这段代码:
public class Test
{
private const object a = null;
public const int c = 0;
}
Run Code Online (Sandbox Code Playgroud)
进入这段代码
public class Test
{
public const int c = 0;
private const object a = null;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我设法得到一个代表我的常量的ISymbol列表,正确地命令它们,然后将它们转换成一个SyntaxNode列表,就像这样
var orderedMembers = orderer.OrderAll(classMembers);
var nodes = orderedMembers.Select(o => o.DeclaringSyntaxReferences.FirstOrDefault().GetSyntax())
.Where(node => node != null)
.ToList();
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.输出是这样的
public class Test
{
public const int c = 0;
private const object a = null;
}
Run Code Online (Sandbox Code Playgroud)
现在我的最后一步是在我的最后一个常量之后添加几行,以定义我的常量和可能的后续内容之间的分离.
我似乎可以通过在我的一个SyntaxNode中添加一个Trailing/Leading琐事来做到这一点.所以我尝试了这个(现在硬编码为简单):
nodes[1] = nodes[1].WithTrailingTrivia(SyntaxFactory.CarriageReturnLineFeed);
Run Code Online (Sandbox Code Playgroud)
然后我将我的新节点插入到我的"Test"类声明节点中,并将其转换为字符串(此处"editor"是Microsoft.CodeAnalysis.Editing.DocumentEditor的一个实例,表示我使用vs为mac IDE打开的文件):
editor.InsertMembers(classNode, 0, nodes);
var newDocument = editor.GetChangedDocument();
(await newDocument.GetTextAsync()).ToString();
Run Code Online (Sandbox Code Playgroud)
这就是它产生的:
public class Test
{
public const int c = 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试添加Trivia的SyntaxNode,在我新编辑的Document上调用GetTextAsync时没有生成.
这是我第一次和Roslyn一起玩,所以我想我错过了使用Trivia的重要内容,但我似乎无法找到它.有关如何在定义的SyntaxNode之后添加一些新行的任何想法?
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |