Пример #1
0
        public static RoomieCommandArgument[] FindMistypedArguments(this HierarchicalVariableScope scope, IEnumerable <RoomieCommandArgument> arguments)
        {
            var result = new List <RoomieCommandArgument>();

            foreach (var argument in arguments)
            {
                var variable = scope.GetVariable(argument.Name);
                var value    = variable.Interpolate(scope);
                var type     = argument.Type;
                var isValid  = type.Validate(value);

                if (!isValid)
                {
                    result.Add(argument);
                }
            }

            return(result.ToArray());
        }
Пример #2
0
        public static ReadOnlyParameter Interpolate(this VariableParameter givenVariable, HierarchicalVariableScope scope)
        {
            var builder = new StringBuilder(givenVariable.Value);

            List <string> variables;

            do
            {
                variables = VariablesInString(builder.ToString()).ToList();
                foreach (string variable in variables)
                {
                    var    variableName = variable.Replace("${", "").Replace("}", "");
                    string replacement;
                    if (variableName != givenVariable.Name)
                    {
                        var matchedVariable = scope.GetVariable(variableName);

                        replacement = matchedVariable.Interpolate(scope).Value;
                    }
                    else if (scope.Parent != null)
                    {
                        var parentScope     = scope.Parent;
                        var matchedVariable = parentScope.GetVariable(variableName);

                        replacement = matchedVariable.Interpolate(parentScope).Value;
                    }
                    else
                    {
                        replacement = null;
                    }

                    if (replacement == null)
                    {
                        //TODO: make this an explicit exception type
                        throw new VariableException("Variable \"" + variable + "\" not defined");
                    }
                    builder.Replace(variable, replacement);//TODO
                }
            } while (variables.Count != 0);

            return(new ReadOnlyParameter(givenVariable.Name, builder.ToString()));
        }
Пример #3
0
        public static ReadOnlyParameter Interpolate(this VariableParameter givenVariable, HierarchicalVariableScope scope)
        {
            var builder = new StringBuilder(givenVariable.Value);

            List<string> variables;
            do
            {
                variables = VariablesInString(builder.ToString()).ToList();
                foreach (string variable in variables)
                {
                    var variableName = variable.Replace("${", "").Replace("}", "");
                    string replacement;
                    if (variableName != givenVariable.Name)
                    {
                        var matchedVariable = scope.GetVariable(variableName);

                        replacement = matchedVariable.Interpolate(scope).Value;
                    }
                    else if (scope.Parent != null)
                    {
                        var parentScope = scope.Parent;
                        var matchedVariable = parentScope.GetVariable(variableName);

                        replacement = matchedVariable.Interpolate(parentScope).Value;
                    }
                    else
                    {
                        replacement = null;
                    }

                    if (replacement == null)
                    {
                        //TODO: make this an explicit exception type
                        throw new VariableException("Variable \"" + variable + "\" not defined");
                    }
                    builder.Replace(variable, replacement);//TODO
                }
            } while (variables.Count != 0);

            return new ReadOnlyParameter(givenVariable.Name, builder.ToString());
        }