public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
        {
            object newParentObject = this.ConfigurationAction(configurationDefinitionAst.InstanceName.ToString(), configurationDefinitionAst.Extent, this.GetCurrentNestingLevel(), this.GetCurrentParentObject());

            this.VisitChildren(configurationDefinitionAst.Body, newParentObject);
            return(AstVisitAction.SkipChildren);
        }
示例#2
0
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     if (configurationDefinitionAst.ToString().Contains(symbolRef.ScriptRegion.Text))
     {
         ValidateExtend(symbolRef.ScriptRegion.Text, configurationDefinitionAst.InstanceName.ToString(), configurationDefinitionAst);
     }
     return(base.VisitConfigurationDefinition(configurationDefinitionAst));
 }
 public virtual StatementAst VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     return(new ConfigurationDefinitionAst(
                configurationDefinitionAst.Extent,
                configurationDefinitionAst.Body.Rewrite(this, SyntaxKind.ScriptBlockExpression),
                configurationDefinitionAst.ConfigurationType,
                configurationDefinitionAst.InstanceName?.Rewrite(this, SyntaxKind.Expression)));
 }
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     // SKIP
     // configuration MyDscConfig {..} -> throws exception in devcontainer, just works in cloud.
     // Example to test: Configuration cnf { Import-DscResource -Module nx; Node 'lx.a.com' { nxFile ExampleFile { DestinationPath = '/tmp/example'; Contents = "hello world `n"; Ensure = 'Present'; Type = 'File'; } } }; cnf -OutputPath:'C:\temp'
     // #35
     AstExplainer(configurationDefinitionAst);
     return(base.VisitConfigurationDefinition(configurationDefinitionAst));
 }
        public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
        {
            IScriptExtent nameExtent = new ScriptExtent()
            {
                Text              = configurationDefinitionAst.InstanceName.Extent.Text,
                StartLineNumber   = configurationDefinitionAst.Extent.StartLineNumber,
                EndLineNumber     = configurationDefinitionAst.Extent.EndLineNumber,
                StartColumnNumber = configurationDefinitionAst.Extent.StartColumnNumber,
                EndColumnNumber   = configurationDefinitionAst.Extent.EndColumnNumber
            };

            this.SymbolReferences.Add(
                new SymbolReference(
                    SymbolType.Configuration,
                    nameExtent));

            return(AstVisitAction.Continue);
        }
        public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
        {
            IScriptExtent nameExtent = new ScriptExtent()
            {
                Text = configurationDefinitionAst.InstanceName.Extent.Text,
                StartLineNumber = configurationDefinitionAst.Extent.StartLineNumber,
                EndLineNumber = configurationDefinitionAst.Extent.EndLineNumber,
                StartColumnNumber = configurationDefinitionAst.Extent.StartColumnNumber,
                EndColumnNumber = configurationDefinitionAst.Extent.EndColumnNumber
            };

            this.findSymbolsVisitor.SymbolReferences.Add(
                new SymbolReference(
                    SymbolType.Configuration,
                    nameExtent));

            return AstVisitAction.Continue;
        }
示例#7
0
 /// <summary/>
 public virtual AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => DefaultVisit(configurationDefinitionAst);
示例#8
0
 public override StatementAst VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 => VisitStatement(base.VisitConfigurationDefinition(configurationDefinitionAst));
示例#9
0
 /// <summary/>
 public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) { return null; }
示例#10
0
 public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     return(false);
 }
示例#11
0
 /// <summary/>
 public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst)
 {
     return(null);
 }
示例#12
0
 public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     throw new System.NotImplementedException();
 }
示例#13
0
        public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
        {
            //
            // Check if the ScriptBlockAst contains NamedBlockAst other than the End block
            //
            ScriptBlockAst configBody = configurationDefinitionAst.Body.ScriptBlock;
            if (configBody.BeginBlock != null || configBody.ProcessBlock != null || configBody.DynamicParamBlock != null)
            {
                var unsupportedNamedBlocks = new NamedBlockAst[] { configBody.BeginBlock, configBody.ProcessBlock, configBody.DynamicParamBlock };
                foreach (NamedBlockAst namedBlock in unsupportedNamedBlocks)
                {
                    if (namedBlock != null)
                    {
                        _parser.ReportError(namedBlock.OpenCurlyExtent, () => ParserStrings.UnsupportedNamedBlockInConfiguration);
                    }
                }

                // ToRemove: No need to continue the parsing if there is no EndBlock, check if (configBody.EndBlock == null)
            }

            return AstVisitAction.Continue;
        }
 object ICustomAstVisitor2.VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 => ProcessRewriter(VisitConfigurationDefinition, configurationDefinitionAst);
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     object newParentObject = this.ConfigurationAction(configurationDefinitionAst.InstanceName.ToString(), configurationDefinitionAst.Extent, this.GetCurrentNestingLevel(), this.GetCurrentParentObject());
     this.VisitChildren(configurationDefinitionAst.Body, newParentObject);
     return AstVisitAction.SkipChildren;
 }
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     return(Visit(configurationDefinitionAst));
 }
示例#17
0
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => VisitAst(configurationDefinitionAst);
示例#18
0
 public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     throw PSTraceSource.NewArgumentException(nameof(configurationDefinitionAst));
 }
示例#19
0
 /// <summary/>
 public virtual AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) { return AstVisitAction.Continue; }
示例#20
0
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast)
 {
     return(Check(ast));
 }
示例#21
0
 public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst)
 {
     return this.VisitPipeline(configurationAst.GenerateSetItemPipelineAst());
 }
示例#22
0
 /// <summary/>
 public virtual AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     return(AstVisitAction.Continue);
 }
示例#23
0
        /// <summary>
        /// Generate auto complete results for identifier within configuration.
        /// Results are generated based on DynamicKeywords matches given identifier.
        /// For example, following "Fi" matches "File", and "Us" matches "User"
        /// 
        ///     Configuration
        ///     {
        ///         Fi^
        ///         Node("TargetMachine")
        ///         {
        ///             Us^
        ///         }
        ///     }
        /// 
        /// </summary>
        /// <param name="completionContext"></param>
        /// <param name="configureAst"></param>
        /// <param name="keywordAst"></param>
        /// <param name="matched"></param>
        /// <returns></returns>
        private List<CompletionResult> GetResultForIdentifierInConfiguration(
            CompletionContext completionContext,
            ConfigurationDefinitionAst configureAst,
            DynamicKeywordStatementAst keywordAst,
            out bool matched)
        {
            List<CompletionResult> results = null;
            matched = false;

#if CORECLR // Microsoft.PowerShell.DesiredStateConfiguration is not in CORE CLR
            results = new List<CompletionResult>();
#else
            IEnumerable<DynamicKeyword> keywords = configureAst.DefinedKeywords.Where(
                k => // Node is special case, legal in both Resource and Meta configuration
                    String.Compare(k.Keyword, @"Node", StringComparison.OrdinalIgnoreCase) == 0 ||
                    (
                        // Check compatibility between Resource and Configuration Type
                        k.IsCompatibleWithConfigurationType(configureAst.ConfigurationType) &&
                        !DynamicKeyword.IsHiddenKeyword(k.Keyword) &&
                        !k.IsReservedKeyword
                    )
            );

            if (keywordAst != null && completionContext.CursorPosition.Offset < keywordAst.Extent.EndOffset)
                keywords = keywordAst.Keyword.GetAllowedKeywords(keywords);

            if (keywords != null && keywords.Any())
            {
                string commandName = (completionContext.WordToComplete ?? String.Empty) + "*";
                var wildcardPattern = WildcardPattern.Get(commandName, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);

                // Filter by name
                var matchedResults = keywords.Where(k => wildcardPattern.IsMatch(k.Keyword));
                if (matchedResults == null || !matchedResults.Any())
                {
                    // Fallback to all legal keywords in the configuration statement
                    matchedResults = keywords;
                }
                else
                {
                    matched = true;
                }

                foreach (var keyword in matchedResults)
                {
                    string usageString = Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache.GetDSCResourceUsageString(keyword);
                    if (results == null)
                    {
                        results = new List<CompletionResult>();
                    }
                    results.Add(new CompletionResult(
                        keyword.Keyword,
                        keyword.Keyword,
                        CompletionResultType.DynamicKeyword,
                        usageString));
                }
            }
#endif

            return results;
        }
示例#24
0
 public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
 {
     return(AutomationNull.Value);
 }
示例#25
0
 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return Check(ast); }