[英]How to Modify a syntax node/Trivia of a SyntaxTree and then Create a new .cs file from the Syntaxtree
我正在尝试用特定 position 的自定义解决方案替换一些代码/注释它。 我没有创建分析器来检测问题并等待用户单击灯泡并修复它。 我正在开发一个普通的控制台应用程序。 目的是我有多个不同的自定义 Codefix,它们将作为批处理运行并在整个项目中修复它。
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, userDetails.Id.ToString()),
new Claim(ClaimTypes.Role, userDetails.Role),
new Claim(ClaimTypes.UserData, userDetails.Password)// Claim contains user's password
}),
// Additional parameters... //
};
当前我想通过替换语法节点内容或在 Span 的开头插入“//”和“/ /" 在逗号之前也是如此。
这就是我卡住的地方,下面是关于我如何决定在哪里应用修复程序的代码片段。
/* 从配置中读取 .cs 文件后,我将得到一个 object 的列表,通过它我会知道在哪里应用修复*/
public class FormattedXML
{
public string? FileName { get; set; }
public string? MethodName { get; set; }
public int? LineNumber { get; set; }
public string? LineCode { get; set; }
}
/使用 CSharpSyntaxTree.ParseText(code) 读取整个.cs 文件后/
public static void JwT001(SyntaxTree st, FormattedXML Issue)
{
var root = (CompilationUnitSyntax)st.GetRoot();
var objectCreations = from r in root.DescendantNodes().OfType<ObjectCreationExpressionSyntax>() select r;
foreach (var objectCrreation in objectCreations.ToList())
{
string Line = objectCrreation.ToFullString();
if (Line.Trim() == Issue.LineCode.Trim())
{
var span = objectCrreation.FullSpan;
var node = st.GetRoot().FindNode(span);// Has the line that needs to be commented
var abc = node.Parent.FindToken(span.Start - 1); //"," needs to be commented
// How do I access this comma which is part of the previous objeccreationExpression node
//var bc = node.WriteTo();
}
}
}
现在我手头有节点,我可以应用修复的范围。
如何应用修复并再次创建整个 SyntaxTree 并从中再次创建 a.cs 文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.