예제 #1
0
 public static IEnumerable <DiagnosticAnalyzer> GetNonTemplateAnalyzers(AnalyzerLanguage language)
 {
     return
         (new RuleFinder().GetAnalyzerTypes(language)
          .Where(type => !RuleFinder.IsRuleTemplate(type))
          .Select(type => (DiagnosticAnalyzer)Activator.CreateInstance(type)));
 }
예제 #2
0
        private void AddMissingEntries(AnalysisOutput output, AnalyzerLanguage language)
        {
            var foundKeys = output.Issues.Select(i => i.RuleId).ToList();

            var notFoundKeys = RuleFinder.GetAnalyzerTypes(language)
                               .Select(t =>
                                       new
            {
                Type          = t,
                RuleAttribute = t.GetCustomAttribute <RuleAttribute>()
            })
                               .Select(rule =>
                                       RuleFinder.IsRuleTemplate(rule.Type)
                        ? string.Format(TemplateRuleIdPattern, rule.RuleAttribute.Key)
                        : rule.RuleAttribute.Key)
                               .Where(s => !foundKeys.Contains(s));

            foreach (var notFoundKey in notFoundKeys)
            {
                output.Issues.Add(new Issue
                {
                    RuleId = notFoundKey
                });
            }
        }
예제 #3
0
        public void VisualStudio_AllParameterlessRulesNotRuleTemplate()
        {
            var analyzers = GetDiagnosticAnalyzerTypes(new[] { RuleFinder.GetExtraRuleAssembly() });

            foreach (var analyzer in analyzers.Where(type => !RuleFinder.IsRuleTemplate(type)))
            {
                var hasParameter = analyzer.GetProperties().Any(p => p.GetCustomAttributes <RuleParameterAttribute>().Any());
                if (!hasParameter)
                {
                    Assert.Fail(
                        "DiagnosticAnalyzer '{0}' should be moved to the assembly that implements Visual Studio rules.",
                        analyzer.Name);
                }
            }
        }
예제 #4
0
 public void IsRuleTemplate()
 {
     Assert.IsTrue(RuleFinder.IsRuleTemplate(typeof(CommentRegularExpression)));
     Assert.IsFalse(RuleFinder.IsRuleTemplate(typeof(AsyncAwaitIdentifier)));
 }