protected PipelineContext PrepareContext(BindTargetMethod bindTargetName, BindTargetMethod bindTargetType, BindTargetMethod bindField) { var unresolved = new Dictionary <string, ResourceRef>(StringComparer.OrdinalIgnoreCase); if (_Baseline is BaselineOption.BaselineRef baselineRef) { unresolved.Add(baselineRef.Name, new BaselineRef(baselineRef.Name, OptionContext.ScopeType.Explicit)); } for (var i = 0; i < Source.Length; i++) { if (Source[i].Module != null && Source[i].Module.Baseline != null && !unresolved.ContainsKey(Source[i].Module.Baseline)) { unresolved.Add(Source[i].Module.Baseline, new BaselineRef(Source[i].Module.Baseline, OptionContext.ScopeType.Module)); } } return(PipelineContext.New( option: Option, hostContext: HostContext, binder: new TargetBinder(bindTargetName, bindTargetType, bindField, Option.Input.TargetType), baseline: GetOptionContext(), unresolved: unresolved )); }
private BindTargetMethod AddBindTargetAction(BindTargetName action, BindTargetMethod previous) { return(AddBindTargetAction((parameterNames, caseSensitive, targetObject, next) => { var targetType = action(targetObject); return string.IsNullOrEmpty(targetType) ? next(parameterNames, caseSensitive, targetObject) : targetType; }, previous)); }
protected InvokePipelineBuilderBase(Source[] source) : base(source) { Outcome = RuleOutcome.Processed; _InputPath = null; _VisitTargetObject = PipelineReceiverActions.PassThru; _BindTargetNameHook = PipelineHookActions.BindTargetName; _BindTargetTypeHook = PipelineHookActions.BindTargetType; _BindFieldHook = PipelineHookActions.BindField; }
internal TargetBinder(BindTargetMethod bindTargetName, BindTargetMethod bindTargetType, BindTargetMethod bindField, string[] typeFilter) { _BindTargetName = bindTargetName; _BindTargetType = bindTargetType; _BindField = bindField; if (typeFilter != null && typeFilter.Length > 0) { _TypeFilter = new HashSet <string>(typeFilter, StringComparer.OrdinalIgnoreCase); } }
public override IPipelineBuilder Configure(PSRuleOption option) { if (option == null) { return(this); } base.Configure(option); Option.Execution.LanguageMode = option.Execution.LanguageMode ?? ExecutionOption.Default.LanguageMode; Option.Execution.InconclusiveWarning = option.Execution.InconclusiveWarning ?? ExecutionOption.Default.InconclusiveWarning; Option.Execution.NotProcessedWarning = option.Execution.NotProcessedWarning ?? ExecutionOption.Default.NotProcessedWarning; Option.Logging.RuleFail = option.Logging.RuleFail ?? LoggingOption.Default.RuleFail; Option.Logging.RulePass = option.Logging.RulePass ?? LoggingOption.Default.RulePass; Option.Logging.LimitVerbose = option.Logging.LimitVerbose; Option.Logging.LimitDebug = option.Logging.LimitDebug; Option.Output.As = option.Output.As ?? OutputOption.Default.As; Option.Output.Culture = option.Output.Culture ?? new string[] { Thread.CurrentThread.CurrentCulture.ToString() }; Option.Output.Encoding = option.Output.Encoding ?? OutputOption.Default.Encoding; Option.Output.Format = option.Output.Format ?? OutputOption.Default.Format; Option.Output.Path = option.Output.Path ?? OutputOption.Default.Path; if (option.Rule != null) { Option.Rule = new RuleOption(option.Rule); } if (option.Configuration != null) { Option.Configuration = new ConfigurationOption(option.Configuration); } if (option.Pipeline.BindTargetName != null && option.Pipeline.BindTargetName.Count > 0) { // Do not allow custom binding functions to be used with constrained language mode if (Option.Execution.LanguageMode == LanguageMode.ConstrainedLanguage) { throw new PipelineConfigurationException(optionName: "BindTargetName", message: PSRuleResources.ConstrainedTargetBinding); } foreach (var action in option.Pipeline.BindTargetName) { _BindTargetNameHook = AddBindTargetAction(action, _BindTargetNameHook); } } if (option.Pipeline.BindTargetType != null && option.Pipeline.BindTargetType.Count > 0) { // Do not allow custom binding functions to be used with constrained language mode if (Option.Execution.LanguageMode == LanguageMode.ConstrainedLanguage) { throw new PipelineConfigurationException(optionName: "BindTargetType", message: PSRuleResources.ConstrainedTargetBinding); } foreach (var action in option.Pipeline.BindTargetType) { _BindTargetTypeHook = AddBindTargetAction(action, _BindTargetTypeHook); } } if (option.Suppression.Count > 0) { Option.Suppression = new SuppressionOption(option.Suppression); } ConfigureLogger(Option); return(this); }
private BindTargetMethod AddBindTargetAction(BindTargetFunc action, BindTargetMethod previous) { // Nest the previous write action in the new supplied action // Execution chain will be: action -> previous -> previous..n return((propertyNames, caseSensitive, targetObject) => action(propertyNames, caseSensitive, targetObject, previous)); }