private static bool AcceptArguments(string[] args, ref ParsedArguments parsedArgs, out string errorMessage, out IList <string> warningMessages) { errorMessage = string.Empty; warningMessages = new List <string>(); var converterOptions = new CmdConverterOptions(); using (var parser = new CmdParser(parsingSettings => { parsingSettings.IgnoreUnknownArguments = false; })) { if (!parser.ParseArgumentsStrict(args, converterOptions, () => { if (!IsHelpArgumentOnly(args)) { Logger.LogError(NewLine + "Incorrect command line arguments." + NewLine); } })) { errorMessage = converterOptions.GetUsage(); return(IsHelpArgumentOnly(args)); } } if (converterOptions.PlogPaths.Count == 0) { errorMessage = string.Format("No input target was specified.{0}{1}{2}", NewLine, NewLine, converterOptions.GetUsage()); return(false); } foreach (var plogPath in converterOptions.PlogPaths) { if (!File.Exists(plogPath)) { errorMessage = string.Format("File '{0}' does not exist.{1}", plogPath, NewLine); return(false); } parsedArgs.RenderInfo.Logs.Add(plogPath); } parsedArgs.RenderInfo.OutputDir = converterOptions.OutputPath ?? DefaultOutputFolder; if (!Directory.Exists(parsedArgs.RenderInfo.OutputDir)) { errorMessage = string.Format("Output directory '{0}' does not exist.{1}", converterOptions.OutputPath, NewLine); return(false); } // Output directory represents a root drive string outputDirRoot = Path.GetPathRoot(parsedArgs.RenderInfo.OutputDir); if (outputDirRoot.Equals(parsedArgs.RenderInfo.OutputDir, StringComparison.InvariantCultureIgnoreCase) && !outputDirRoot.EndsWith(Path.DirectorySeparatorChar.ToString())) { parsedArgs.RenderInfo.OutputDir += Path.DirectorySeparatorChar; } parsedArgs.RenderInfo.SrcRoot = converterOptions.SrcRoot; // Getting a map for levels by the analyzer type IDictionary <AnalyzerType, ISet <uint> > analyzerLevelFilterMap = new Dictionary <AnalyzerType, ISet <uint> >(); if (converterOptions.AnalyzerLevelFilter != null && converterOptions.AnalyzerLevelFilter.Count > 0 && !Utils.TryParseLevelFilters(converterOptions.AnalyzerLevelFilter, analyzerLevelFilterMap, out errorMessage)) { return(false); } parsedArgs.LevelMap = analyzerLevelFilterMap; // Getting render types ISet <LogRenderType> renderTypes = new HashSet <LogRenderType>(); if (converterOptions.PlogRenderTypes != null && converterOptions.PlogRenderTypes.Count > 0 && !Utils.TryParseEnumValues <LogRenderType>(converterOptions.PlogRenderTypes, renderTypes, out errorMessage)) { return(false); } // Gettings error code mappings ISet <ErrorCodeMapping> errorCodeMappings = new HashSet <ErrorCodeMapping>(); if (converterOptions.ErrorCodeMapping != null && converterOptions.ErrorCodeMapping.Count > 0 && !Utils.TryParseEnumValues <ErrorCodeMapping>(converterOptions.ErrorCodeMapping, errorCodeMappings, out errorMessage)) { return(false); } if (parsedArgs.LevelMap.Any()) { if (errorCodeMappings.Contains(ErrorCodeMapping.MISRA) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.MISRA)) { warningMessages.Add(string.Format("MISRA mapping is specified, but MISRA rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName)); } if (errorCodeMappings.Contains(ErrorCodeMapping.OWASP) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.OWASP)) { warningMessages.Add(string.Format("OWASP mapping is specified, but OWASP rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName)); } if (errorCodeMappings.Contains(ErrorCodeMapping.AUTOSAR) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.AUTOSAR)) { warningMessages.Add(string.Format("AUTOSAR mapping is specified, but AUTOSAR rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName)); } } // Check if provided outputNameTemplate is a valid file name if (!string.IsNullOrWhiteSpace(converterOptions.OutputNameTemplate) && !Utils.IsValidFilename(converterOptions.OutputNameTemplate)) { errorMessage = String.Format("Template \"{0}\" is not a valid file name.{1}", converterOptions.OutputNameTemplate, NewLine); return(false); } // Check if settings path is exists if (!String.IsNullOrWhiteSpace(converterOptions.SettingsPath) && !File.Exists(converterOptions.SettingsPath)) { errorMessage = string.Format("Settings file '{0}' does not exist.", converterOptions.SettingsPath); return(false); } parsedArgs.RenderTypes = renderTypes; parsedArgs.ErrorCodeMappings = errorCodeMappings; parsedArgs.DisabledErrorCodes = converterOptions.DisabledErrorCodes; parsedArgs.SettingsPath = converterOptions.SettingsPath; parsedArgs.OutputNameTemplate = converterOptions.OutputNameTemplate; parsedArgs.IndicateWarnings = converterOptions.IndicateWarnings; errorMessage = string.Empty; return(true); }
private static bool AcceptArguments(string[] args, ref ParsedArguments parsedArgs, out string errorMessage) { var converterOptions = new CmdConverterOptions(); var parser = new CmdParser(parsingSettings => { parsingSettings.HelpWriter = Console.Error; parsingSettings.IgnoreUnknownArguments = false; }); if (!parser.ParseArgumentsStrict(args, converterOptions)) { errorMessage = converterOptions.GetUsage(); return(false); } if (!File.Exists(converterOptions.PlogPath)) { errorMessage = string.Format("File '{0}' does not exist{1}{2}", converterOptions.PlogPath, NewLine, converterOptions.GetUsage()); return(false); } Reporter.Instance.Header = converterOptions.Header; Reporter.Instance.Server = converterOptions.Server; Reporter.Instance.Port = converterOptions.Port; Reporter.Instance.SmtpUser = converterOptions.SmtpUser; Reporter.Instance.SmtpPassword = converterOptions.SmtpPassword; Reporter.Instance.FromAddress = converterOptions.FromAddress; Reporter.Instance.SendEmail = converterOptions.SendEmail; SvnInfo.Instance.AutoEmail = converterOptions.AutoEmail; SvnInfo.Instance.EmailList = converterOptions.EmailList; parsedArgs.RenderInfo.Plog = converterOptions.PlogPath; parsedArgs.RenderInfo.OutputDir = converterOptions.OutputPath ?? DefaultOutputFolder; if (!Directory.Exists(parsedArgs.RenderInfo.OutputDir)) { errorMessage = string.Format("Output directory '{0}' does not exist{1}{2}", converterOptions.OutputPath, NewLine, converterOptions.GetUsage()); return(false); } parsedArgs.RenderInfo.SrcRoot = converterOptions.SrcRoot; // Getting a map for levels by the analyzer type IDictionary <AnalyzerType, ISet <uint> > analyzerLevelFilterMap = new Dictionary <AnalyzerType, ISet <uint> >(); if (converterOptions.AnalyzerLevelFilter != null && converterOptions.AnalyzerLevelFilter.Count > 0 && !Utils.TryParseLevelFilters(converterOptions.AnalyzerLevelFilter, analyzerLevelFilterMap, out errorMessage)) { return(false); } parsedArgs.LevelMap = analyzerLevelFilterMap; // Getting render types ISet <RenderType> renderTypes = new HashSet <RenderType>(); if (converterOptions.PlogRenderTypes != null && converterOptions.PlogRenderTypes.Count > 0 && !Utils.TryParseRenderFilter(converterOptions.PlogRenderTypes, renderTypes, out errorMessage)) { return(false); } parsedArgs.RenderTypes = renderTypes; parsedArgs.DisabledErrorCodes = converterOptions.DisabledErrorCodes; errorMessage = string.Empty; return(true); }