Example #1
0
        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();
                });
            });
        }
Example #2
0
        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);
        }