public GenerateRules ( IEnumerable |
||
analyzers | IEnumerable |
|
return | Rules |
/// <summary> /// Attempts to generate a rules file for assemblies in the specified package. /// </summary> /// <param name="additionalSearchFolder">Root directory to search when looking for analyzer dependencies</param> /// <param name="baseTempDir">Base temporary working directory for this generation run</param> /// <param name="rulesFilePath">Full name of the file to create</param> private bool TryGenerateRulesFile(IPackage package, string additionalSearchFolder, string baseTempDir, string rulesFilePath, string language) { bool success = false; this.logger.LogInfo(UIResources.APG_GeneratingRules); this.logger.LogInfo(UIResources.APG_LocatingAnalyzers); string[] files = GetFilesFromPackage(package, baseTempDir).ToArray(); string roslynLanguageName = SupportedLanguages.GetRoslynLanguageName(language); this.logger.LogDebug(UIResources.APG_LogAnalyzerLanguage, roslynLanguageName); DiagnosticAssemblyScanner diagnosticAssemblyScanner = new DiagnosticAssemblyScanner(this.logger, additionalSearchFolder); IEnumerable <DiagnosticAnalyzer> analyzers = diagnosticAssemblyScanner.InstantiateDiagnostics(roslynLanguageName, files.ToArray()); this.logger.LogInfo(UIResources.APG_AnalyzersLocated, analyzers.Count()); if (analyzers.Any()) { RuleGenerator ruleGen = new RuleGenerator(this.logger); Rules rules = ruleGen.GenerateRules(analyzers); Debug.Assert(rules != null, "Not expecting the generated rules to be null"); if (rules != null) { rules.Save(rulesFilePath, logger); this.logger.LogDebug(UIResources.APG_RulesGeneratedToFile, rules.Count, rulesFilePath); success = true; } } else { this.logger.LogWarning(UIResources.APG_NoAnalyzersFound); } return(success); }
/// <summary> /// Generate a rules file for the specified analyzers /// </summary> /// <returns>The full path to the generated file</returns> private string GenerateRulesFile(IEnumerable <DiagnosticAnalyzer> analyzers, string baseDirectory) { this.logger.LogInfo(UIResources.APG_GeneratingRules); Debug.Assert(analyzers.Any(), "Expecting at least one analyzer"); string rulesFilePath = Path.Combine(baseDirectory, "rules.xml"); RuleGenerator ruleGen = new RuleGenerator(this.logger); Rules rules = ruleGen.GenerateRules(analyzers); if (rules != null) { rules.Save(rulesFilePath, logger); this.logger.LogDebug(UIResources.APG_RulesGeneratedToFile, rules.Count, rulesFilePath); } else { Debug.Fail("Not expecting the generated rules to be null"); } return(rulesFilePath); }
/// <summary> /// Attempts to generate a rules file for assemblies in the specified package. /// </summary> /// <param name="additionalSearchFolder">Root directory to search when looking for analyzer dependencies</param> /// <param name="baseTempDir">Base temporary working directory for this generation run</param> /// <param name="rulesFilePath">Full name of the file to create</param> private bool TryGenerateRulesFile(IPackage package, string additionalSearchFolder, string baseTempDir, string rulesFilePath, string language) { bool success = false; this.logger.LogInfo(UIResources.APG_GeneratingRules); this.logger.LogInfo(UIResources.APG_LocatingAnalyzers); string[] files = GetFilesFromPackage(package, baseTempDir).ToArray(); string roslynLanguageName = SupportedLanguages.GetRoslynLanguageName(language); this.logger.LogDebug(UIResources.APG_LogAnalyzerLanguage, roslynLanguageName); DiagnosticAssemblyScanner diagnosticAssemblyScanner = new DiagnosticAssemblyScanner(this.logger, additionalSearchFolder); IEnumerable<DiagnosticAnalyzer> analyzers = diagnosticAssemblyScanner.InstantiateDiagnostics(roslynLanguageName, files.ToArray()); this.logger.LogInfo(UIResources.APG_AnalyzersLocated, analyzers.Count()); if (analyzers.Any()) { RuleGenerator ruleGen = new RuleGenerator(this.logger); Rules rules = ruleGen.GenerateRules(analyzers); Debug.Assert(rules != null, "Not expecting the generated rules to be null"); if (rules != null) { rules.Save(rulesFilePath, logger); this.logger.LogDebug(UIResources.APG_RulesGeneratedToFile, rules.Count, rulesFilePath); success = true; } } else { this.logger.LogWarning(UIResources.APG_NoAnalyzersFound); } return success; }
/// <summary> /// Generate a rules file for the specified analyzers /// </summary> /// <returns>The full path to the generated file</returns> private string GenerateRulesFile(IEnumerable<DiagnosticAnalyzer> analyzers, string baseDirectory) { this.logger.LogInfo(UIResources.APG_GeneratingRules); Debug.Assert(analyzers.Any(), "Expecting at least one analyzer"); string rulesFilePath = Path.Combine(baseDirectory, "rules.xml"); RuleGenerator ruleGen = new RuleGenerator(this.logger); Rules rules = ruleGen.GenerateRules(analyzers); if (rules != null) { rules.Save(rulesFilePath, logger); this.logger.LogDebug(UIResources.APG_RulesGeneratedToFile, rules.Count, rulesFilePath); } else { Debug.Fail("Not expecting the generated rules to be null"); } return rulesFilePath; }
/// <summary> /// Attempts to generate a rules file for assemblies in the package directory. /// Returns the path to the rules file. /// </summary> /// <param name="packageDirectory">Directory containing the analyzer assembly to generate rules for</param> /// <param name="nuGetDirectory">Directory containing other NuGet packages that might be required i.e. analyzer dependencies</param> private bool TryGenerateRulesFile(string packageDirectory, string nuGetDirectory, string outputFilePath) { bool success = false; this.logger.LogInfo(UIResources.APG_GeneratingRules); this.logger.LogInfo(UIResources.APG_LocatingAnalyzers); DiagnosticAssemblyScanner diagnosticAssemblyScanner = new DiagnosticAssemblyScanner(this.logger, nuGetDirectory); IEnumerable<DiagnosticAnalyzer> analyzers = diagnosticAssemblyScanner.InstantiateDiagnostics(packageDirectory, LanguageNames.CSharp); this.logger.LogInfo(UIResources.APG_AnalyzersLocated, analyzers.Count()); if (analyzers.Any()) { RuleGenerator ruleGen = new RuleGenerator(this.logger); Rules rules = ruleGen.GenerateRules(analyzers); Debug.Assert(rules != null, "Not expecting the generated rules to be null"); if (rules != null) { rules.Save(outputFilePath, logger); this.logger.LogDebug(UIResources.APG_RulesGeneratedToFile, rules.Count, outputFilePath); success = true; } } else { this.logger.LogWarning(UIResources.APG_NoAnalyzersFound); } return success; }