Exemplo n.º 1
0
        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
                       ));
        }
Exemplo n.º 2
0
 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));
 }
Exemplo n.º 3
0
 protected InvokePipelineBuilderBase(Source[] source)
     : base(source)
 {
     Outcome             = RuleOutcome.Processed;
     _InputPath          = null;
     _VisitTargetObject  = PipelineReceiverActions.PassThru;
     _BindTargetNameHook = PipelineHookActions.BindTargetName;
     _BindTargetTypeHook = PipelineHookActions.BindTargetType;
     _BindFieldHook      = PipelineHookActions.BindField;
 }
Exemplo n.º 4
0
 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);
     }
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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));
 }