public static bool TryParseModifier( IEnumerable <string> values, string optionName, [NotNullWhen(true)] out EnumerableModifier <string>?modifier) { modifier = null; if (!values.Any()) { return(false); } string value = values.First(); if (!TryParseAsEnumFlags( values.Skip(1), optionName, out ModifierOptions options, ModifierOptions.None, OptionValueProviders.ModifierOptionsProvider)) { return(false); } if ((options & ModifierOptions.FromFile) != 0 && !FileSystemHelpers.TryReadAllText(value, out value !, ex => WriteError(ex))) { return(false); } if ((options & ModifierOptions.FromDll) != 0) { return(DelegateFactory.TryCreateFromAssembly( value, typeof(IEnumerable <string>), typeof(IEnumerable <string>), out modifier)); } else if ((options & ModifierOptions.FromFile) != 0) { return(DelegateFactory.TryCreateFromSourceText( value, typeof(IEnumerable <string>), typeof(IEnumerable <string>), out modifier)); } else { return(DelegateFactory.TryCreateFromExpression( value, "ModifierClass", "ModifierMethod", "IEnumerable<string>", typeof(IEnumerable <string>), "IEnumerable<string>", typeof(IEnumerable <string>), "items", out modifier)); } }
public bool TryParse(ReplaceCommandOptions options) { var baseOptions = (CommonReplaceCommandOptions)options; if (!TryParse(baseOptions)) { return(false); } options = (ReplaceCommandOptions)baseOptions; if (!TryParseReplacement(Replacement, out string?replacement, out MatchEvaluator? matchEvaluator)) { return(false); } if (matchEvaluator == null && Evaluator != null) { LogHelpers.WriteObsoleteWarning( $"Option '{OptionNames.GetHelpText(OptionNames.Evaluator)}' is obsolete. " + $"Use option '{OptionNames.GetHelpText(OptionNames.Replacement)}' instead."); if (!DelegateFactory.TryCreateFromAssembly(Evaluator, typeof(string), typeof(Match), out matchEvaluator)) { return(false); } } if (!TryParseReplaceOptions( Modify, OptionNames.Modify, replacement, matchEvaluator, out ReplaceOptions? replaceOptions)) { return(false); } options.Replacer = replaceOptions; #if DEBUG // --find if (Find) { options.Replacer = ReplaceOptions.Empty; options.HighlightOptions = HighlightOptions.Match; options.DryRun = true; } #endif return(true); }
public bool TryParse(RenameCommandOptions options) { var baseOptions = (DeleteOrRenameCommandOptions)options; if (!TryParse(baseOptions)) { return(false); } options = (RenameCommandOptions)baseOptions; if (!TryParseHighlightOptions( Highlight, out HighlightOptions highlightOptions, defaultValue: HighlightOptions.Replacement, provider: OptionValueProviders.RenameHighlightOptionsProvider)) { return(false); } if (!FilterParser.TryParse( Name, OptionNames.Name, OptionValueProviders.PatternOptionsWithoutGroupAndNegativeProvider, out Filter? nameFilter, out FileNamePart namePart, namePartProvider: OptionValueProviders.NamePartKindProvider_WithoutFullName)) { return(false); } if (!FilterParser.TryParse( Content, OptionNames.Content, OptionValueProviders.PatternOptionsWithoutPartProvider, out Filter? contentFilter, allowNull: true)) { return(false); } if (!TryParseReplacement(Replacement, out string?replacement, out MatchEvaluator? matchEvaluator)) { return(false); } if (matchEvaluator == null && Evaluator != null) { LogHelpers.WriteObsoleteWarning( $"Option '{OptionNames.GetHelpText(OptionNames.Evaluator)}' is obsolete. " + $"Use option '{OptionNames.GetHelpText(OptionNames.Replacement)}' instead."); if (!DelegateFactory.TryCreateFromAssembly(Evaluator, typeof(string), typeof(Match), out matchEvaluator)) { return(false); } } if (!TryParseReplaceOptions( Modify, OptionNames.Modify, replacement, matchEvaluator, out ReplaceOptions? replaceOptions)) { return(false); } if (!TryParseAsEnum( Conflict, OptionNames.Conflict, out ConflictResolution conflictResolution, defaultValue: ConflictResolution.Ask, provider: OptionValueProviders.ConflictResolutionProvider_WithoutSuffix)) { return(false); } if (!TryParseDisplay( values: Display, optionName: OptionNames.Display, contentDisplayStyle: out ContentDisplayStyle? contentDisplayStyle, pathDisplayStyle: out PathDisplayStyle? pathDisplayStyle, lineDisplayOptions: out LineDisplayOptions lineDisplayOptions, lineContext: out LineContext lineContext, displayParts: out DisplayParts displayParts, fileProperties: out ImmutableArray <FileProperty> fileProperties, indent: out string?indent, separator: out string?separator, noAlign: out bool noAlign, contentDisplayStyleProvider: OptionValueProviders.ContentDisplayStyleProvider, pathDisplayStyleProvider: OptionValueProviders.PathDisplayStyleProvider_Rename)) { return(false); } if (pathDisplayStyle == PathDisplayStyle.Relative && options.Paths.Length > 1 && options.SortOptions != null) { pathDisplayStyle = PathDisplayStyle.Full; } options.Format = new OutputDisplayFormat( contentDisplayStyle: contentDisplayStyle ?? ContentDisplayStyle.Omit, pathDisplayStyle: pathDisplayStyle ?? PathDisplayStyle.Full, lineOptions: lineDisplayOptions, lineContext: lineContext, displayParts: displayParts, fileProperties: fileProperties, indent: indent, separator: separator, alignColumns: !noAlign); options.HighlightOptions = highlightOptions; options.SearchTarget = GetSearchTarget(); options.ReplaceOptions = replaceOptions; options.AskMode = (Ask) ? AskMode.File : AskMode.None; options.DryRun = DryRun; options.NameFilter = nameFilter; options.NamePart = namePart; options.ContentFilter = contentFilter; options.MaxMatchingFiles = MaxCount; options.ConflictResolution = conflictResolution; options.Interactive = Interactive; return(true); }
public static bool TryParseReplacement( IEnumerable <string> values, out string?replacement, out MatchEvaluator?matchEvaluator) { replacement = null; matchEvaluator = null; if (!values.Any()) { return(true); } string value = values.First(); if (!TryParseAsEnumFlags( values.Skip(1), OptionNames.Replacement, out ReplacementOptions options, ReplacementOptions.None, OptionValueProviders.ReplacementOptionsProvider)) { return(false); } if ((options & ReplacementOptions.FromFile) != 0 && !FileSystemHelpers.TryReadAllText(value, out value !, ex => WriteError(ex))) { return(false); } if ((options & ReplacementOptions.CSharp) != 0) { if ((options & ReplacementOptions.FromFile) != 0) { return(DelegateFactory.TryCreateFromSourceText(value, typeof(string), typeof(Match), out matchEvaluator)); } else { return(DelegateFactory.TryCreateFromExpression( value, "EvaluatorClass", "EvaluatorMethod", "string", typeof(string), "Match", typeof(Match), "match", out matchEvaluator)); } } else if ((options & ReplacementOptions.FromDll) != 0) { return(DelegateFactory.TryCreateFromAssembly(value, typeof(string), typeof(Match), out matchEvaluator)); } else { replacement = value; if ((options & ReplacementOptions.Literal) != 0) { replacement = RegexEscape.EscapeSubstitution(replacement); } if ((options & ReplacementOptions.Escape) != 0) { replacement = RegexEscape.ConvertCharacterEscapes(replacement); } } return(true); }
public bool TryParse(ReplaceCommandOptions options) { if (!TryParseAsEnum( Pipe, OptionNames.Pipe, out PipeMode pipeMode, PipeMode.None, OptionValueProviders.PipeMode)) { return(false); } if (pipeMode == PipeMode.None) { if (Console.IsInputRedirected) { PipeMode = PipeMode.Text; } } else { if (!Console.IsInputRedirected) { WriteError("Redirected/piped input is required " + $"when option '{OptionNames.GetHelpText(OptionNames.Pipe)}' is specified."); return(false); } PipeMode = pipeMode; } if (!TryParseProperties(Ask, Name, options)) { return(false); } var baseOptions = (FileSystemCommandOptions)options; if (!TryParse(baseOptions)) { return(false); } options = (ReplaceCommandOptions)baseOptions; if (!FilterParser.TryParse( Content, OptionNames.Content, OptionValueProviders.PatternOptionsWithoutGroupAndPartAndNegativeProvider, out Filter? contentFilter)) { return(false); } if (!TryParseReplacement(Replacement, out string?replacement, out MatchEvaluator? matchEvaluator)) { return(false); } if (matchEvaluator == null && Evaluator != null) { LogHelpers.WriteObsoleteWarning( $"Option '{OptionNames.GetHelpText(OptionNames.Evaluator)}' is obsolete. " + $"Use option '{OptionNames.GetHelpText(OptionNames.Replacement)}' instead."); if (!DelegateFactory.TryCreateFromAssembly(Evaluator, typeof(string), typeof(Match), out matchEvaluator)) { return(false); } } if (!TryParseReplaceOptions( Modify, OptionNames.Modify, replacement, matchEvaluator, out ReplaceOptions? replaceOptions)) { return(false); } if (!TryParseMaxCount(MaxCount, out int maxMatchingFiles, out int maxMatchesInFile)) { return(false); } string?input = null; if (Input.Any() && !TryParseInput(Input, out input)) { return(false); } if (pipeMode != PipeMode.Paths && Console.IsInputRedirected) { if (input != null) { WriteError("Cannot use both redirected/piped input and " + $"option '{OptionNames.GetHelpText(OptionNames.Input)}'."); return(false); } if (contentFilter == null) { WriteError($"Option '{OptionNames.GetHelpText(OptionNames.Content)}' is required " + "when redirected/piped input is used as a text to be searched."); return(false); } input = ConsoleHelpers.ReadRedirectedInput(); } ContentDisplayStyle contentDisplayStyle; PathDisplayStyle pathDisplayStyle; if (!TryParseDisplay( values: Display, optionName: OptionNames.Display, contentDisplayStyle: out ContentDisplayStyle? contentDisplayStyle2, pathDisplayStyle: out PathDisplayStyle? pathDisplayStyle2, lineDisplayOptions: out LineDisplayOptions lineDisplayOptions, lineContext: out LineContext lineContext, displayParts: out DisplayParts displayParts, fileProperties: out ImmutableArray <FileProperty> fileProperties, indent: out string?indent, separator: out string?separator, noAlign: out bool noAlign, contentDisplayStyleProvider: OptionValueProviders.ContentDisplayStyleProvider_WithoutUnmatchedLines, pathDisplayStyleProvider: OptionValueProviders.PathDisplayStyleProvider)) { return(false); } if (contentDisplayStyle2 != null) { if (options.AskMode == AskMode.Value && contentDisplayStyle2 == ContentDisplayStyle.AllLines) { string helpValue = OptionValueProviders.ContentDisplayStyleProvider .GetValue(nameof(ContentDisplayStyle.AllLines)) .HelpValue; string helpValue2 = OptionValueProviders.AskModeProvider.GetValue(nameof(AskMode.Value)).HelpValue; WriteError($"Option '{OptionNames.GetHelpText(OptionNames.Display)}' cannot have value " + $"'{helpValue}' when option '{OptionNames.GetHelpText(OptionNames.Ask)}' has value '{helpValue2}'."); return(false); } contentDisplayStyle = contentDisplayStyle2.Value; } else if (Input.Any()) { contentDisplayStyle = ContentDisplayStyle.AllLines; } else { contentDisplayStyle = ContentDisplayStyle.Line; } pathDisplayStyle = pathDisplayStyle2 ?? PathDisplayStyle.Full; if (pathDisplayStyle == PathDisplayStyle.Relative && options.Paths.Length > 1 && options.SortOptions != null) { pathDisplayStyle = PathDisplayStyle.Full; } if (!TryParseHighlightOptions( Highlight, out HighlightOptions highlightOptions, defaultValue: HighlightOptions.Replacement, contentDisplayStyle: contentDisplayStyle, provider: OptionValueProviders.ReplaceHighlightOptionsProvider)) { return(false); } options.Format = new OutputDisplayFormat( contentDisplayStyle: contentDisplayStyle, pathDisplayStyle: pathDisplayStyle, lineOptions: lineDisplayOptions, lineContext: lineContext, displayParts: displayParts, fileProperties: fileProperties, indent: indent, separator: separator, alignColumns: !noAlign); options.HighlightOptions = highlightOptions; options.ContentFilter = contentFilter; options.ReplaceOptions = replaceOptions; options.Input = input; options.DryRun = DryRun; options.MaxMatchesInFile = maxMatchesInFile; options.MaxMatchingFiles = maxMatchingFiles; options.MaxTotalMatches = 0; options.Interactive = Interactive; #if DEBUG // --find if (Find) { options.ReplaceOptions = ReplaceOptions.Empty; options.HighlightOptions = HighlightOptions.Match; options.DryRun = true; } #endif return(true); }