繁体   English   中英

如何修改语法树的语法节点/琐事,然后从语法树创建一个 new.cs 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM