public void RunHandlers(StyleCopContext context) { var doc = context.Doc; //var availableHandlers = XmlTraverser.DSTXmlNode(doc, n => { Handlers.FindAll(h => h.FilterNames.Contains(n.Name)) .ForEach(h => { h.StyleCopContext = context; h.Node = n; h.HandleNode(); }); }); }
public static XmlDocument ParseAndGetAST(string scriptContent) { // Parse and generate the AST var rst = Parser.Parse(scriptContent); var fieldInfo = rst.GetType().GetField("sqlScript", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField); var script = fieldInfo.GetValue(rst); var stream = new MemoryStream(); var writer = XmlWriter.Create(stream); script.GetType().InvokeMember("WriteXml", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod , null, script, new object[] { writer }); writer.Flush(); writer.Close(); stream.Position = 0; var doc = new XmlDocument(); doc.Load(stream); // For debugging purpose #if DEBUG if (Directory.Exists("c:\\doc")) { doc.Save("c:\\doc\\1.xml"); } #endif // Removes the comment sections var removeList = new List <XmlNode>(); XmlTraverser.DSTXmlNode(doc.ChildNodes[1], n => { if (n.Name == "#comment") { removeList.Add(n); } }); removeList.ForEach(n => n.ParentNode.RemoveChild(n)); return(doc); }