void GetAllProviderStates()
        {
            var language = CodeRefactoringService.MimeTypeToLanguage(mimeType);

            foreach (var node in BuiltInCodeDiagnosticProvider.GetBuiltInCodeRefactoringDescriptorsAsync(CodeRefactoringService.MimeTypeToLanguage(language), true).Result)
            {
                providerStates [node] = node.IsEnabled;
            }
        }
        protected override void Run()
        {
            var lang = "text/x-csharp";

            OpenFileDialog dlg = new OpenFileDialog("Export Rules", MonoDevelop.Components.FileChooserAction.Save);

            dlg.InitialFileName = "rules.html";
            if (!dlg.Run())
            {
                return;
            }

            Dictionary <CodeDiagnosticDescriptor, DiagnosticSeverity?> severities = new Dictionary <CodeDiagnosticDescriptor, DiagnosticSeverity?> ();

            foreach (var node in BuiltInCodeDiagnosticProvider.GetBuiltInCodeDiagnosticDecsriptorsAsync(CodeRefactoringService.MimeTypeToLanguage(lang), true).Result)
            {
                severities [node] = node.DiagnosticSeverity;
//				if (node.GetProvider ().SupportedDiagnostics.Length > 1) {
//					foreach (var subIssue in node.GetProvider ().SupportedDiagnostics) {
//						severities [subIssue] = node.GetSeverity (subIssue);
//					}
//				}
            }

            var grouped = severities.Keys.OfType <CodeDiagnosticDescriptor> ()
                          .GroupBy(node => node.GetProvider().SupportedDiagnostics.First().Category)
                          .OrderBy(g => g.Key, StringComparer.Ordinal);

            using (var sw = new StreamWriter(dlg.SelectedFile)) {
                sw.WriteLine("<h1>Code Rules</h1>");
                foreach (var g in grouped)
                {
                    sw.WriteLine("<h2>" + g.Key + "</h2>");
                    sw.WriteLine("<table border='1'>");

                    foreach (var node in g.OrderBy(n => n.Name, StringComparer.Ordinal))
                    {
                        var title = node.Name;
                        var desc  = node.GetProvider().SupportedDiagnostics.First().Description.ToString() != title?node.GetProvider().SupportedDiagnostics.First().Description : "";

                        sw.WriteLine("<tr><td>" + title + "</td><td>" + desc + "</td><td>" + node.DiagnosticSeverity + "</td></tr>");
                        if (node.GetProvider().SupportedDiagnostics.Length > 1)
                        {
                            foreach (var subIssue in node.GetProvider().SupportedDiagnostics)
                            {
                                title = subIssue.Description.ToString();
                                desc  = subIssue.Description.ToString() != title ? subIssue.Description : "";
                                sw.WriteLine("<tr><td> - " + title + "</td><td>" + desc + "</td><td>" + node.GetSeverity(subIssue) + "</td></tr>");
                            }
                        }
                    }
                    sw.WriteLine("</table>");
                }

                var providerStates = new Dictionary <CodeRefactoringDescriptor, bool> ();
                foreach (var node in BuiltInCodeDiagnosticProvider.GetBuiltInCodeRefactoringDescriptorsAsync(CodeRefactoringService.MimeTypeToLanguage(lang), true).Result)
                {
                    providerStates [node] = node.IsEnabled;
                }

                sw.WriteLine("<h1>Code Actions</h1>");
                sw.WriteLine("<table border='1'>");
                var sortedAndFiltered = providerStates.Keys.OrderBy(n => n.Name, StringComparer.Ordinal);
                foreach (var node in sortedAndFiltered)
                {
                    sw.WriteLine("<tr><td>" + node.IdString + "</td><td>" + node.Name + "</td></tr>");
                }
                sw.WriteLine("</table>");
            }
        }