【发布时间】:2016-04-07 22:13:10
【问题描述】:
正如您可能已经猜到的那样,我正在学习有关 roslyn 的所有知识,尤其是作为代码分析器。
语法突出显示效果很好。但是,以下 - 这是我的代码操作 - 在删除节点时会静默失败:
private async Task<Document> RemoveNode(Document document, LocalDeclarationStatementSyntax typeDecl, CancellationToken cancellationToken)
{
IEnumerable<SyntaxNode> oldNode = typeDecl.DescendantNodes().OfType<VariableDeclarationSyntax>();
SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken);
SyntaxNode newRoot = oldRoot.RemoveNode(oldNode.Single(), SyntaxRemoveOptions.KeepNoTrivia); //Analyzer fails here
return document.WithSyntaxRoot(newRoot);
}
主题:
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
FruitMix fm = new FruitMix(); //This is the matched node
}
}
}
我觉得我错过了如何与 Roslyn 合作的“更大”图景,所以虽然这里的帮助会很棒,但我也喜欢一些对我有帮助的链接/资源。
我已经上传了这个project here 虽然不是一个“最小”的例子,但它很容易重现问题。上面的代码在CodeFixProvider.cs。
谢谢
【问题讨论】:
-
你是如何调用代码的?你能发个minimal reproducible example吗?
-
我可以去one better。我开始尝试标记 IDisposables,但将问题简化为仅尝试删除节点。
标签: c# code-analysis roslyn roslyn-code-analysis