Ejemplo n.º 1
0
        public static Argument Evaluate(CompilerState state, SyntaxNode node)
        {
            if (state is null)
            {
                throw new ArgumentNullException(nameof(state));
            }
            if (node is null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            var result = node switch
            {
                TextSyntax text => textInstruction.Evaluate(state, text),
                QuoteSyntax quote => quoteInstruction.Evaluate(state, quote),
                StringLiteralSyntax stringLiteral => stringInstruction.Evaluate(state, stringLiteral),
                ArgumentSyntax argumentSyntax => argumentInstruction.Evaluate(state, argumentSyntax),
                CommandSyntax command => commandInstruction.Evaluate(state, command),
                ObjectSyntax objectSyntax => objectCreationInstruction.Evaluate(state, objectSyntax),
                FieldSyntax fieldSyntax => fieldInstruction.Evaluate(state, fieldSyntax),
                ArraySyntax arraySyntax => arrayInstruction.Evaluate(state, arraySyntax),
                PercentSyntax percentSyntax => percentInstruction.Evaluate(state, percentSyntax),
                ListSyntax list => blockInstruction.Evaluate(state, list),
                CommentSyntax _ => null,
                _ => throw new ArgumentException($"Evaluation of node type {node.GetType().Name} not implemented.", nameof(node)),
            };

            return(new Argument(node, result));
        }
Ejemplo n.º 2
0
        private static CommandSyntax ParseCommand(ParserContext context)
        {
            var token = context.Tokens.Dequeue();
            var span  = token.Span;

            var command = new CommandSyntax
            {
                Name = ParseName(context)
            };

            var nextTokenParentheses = context.Tokens.Peek().Type == TokenType.ParenthesesOpen;

            if (nextTokenParentheses)
            {
                command.Arguments = ParseArguments(context);
            }
            else
            {
                command.Arguments = new ListSyntax <ArgumentSyntax>();
            }

            if (context.Tokens.SkipSearchFor(e => e.Type == TokenType.Whitespace || e.Type == TokenType.Newline, e => e.Type == TokenType.CurlyOpen))
            {
                command.Environment = ParseExplicitBlock(context);
            }

            token        = context.Tokens.Peek();
            command.Span = span.WithEnd(token.Span.End);

            return(command);
        }
Ejemplo n.º 3
0
        public string GetCommandSyntax(CommandInfo command)
        {
            CommandSyntax syntax = new CommandSyntax(command);
            string        space  = string.IsNullOrWhiteSpace(command.GetName()) ? "" : " ";
            string        group  = command.Module.Group.Exists() ? $"{command.Module.Group}{space}" : "";

            return($"{group}{Format.Bold(command.GetName())}({syntax.GetArgs()})");
        }
Ejemplo n.º 4
0
        public async Task <CommandSyntax> StoreCommand(CommandSyntax commandSyntax)
        {
            if (!_initialized)
            {
                await Initialize();
            }

            commandSyntax.Key = Guid.NewGuid();
            _commands.Add(Guid.NewGuid(), commandSyntax);

            await using var sr = new StreamWriter(_storageFilePath);
            await sr.WriteAsync(JsonConvert.SerializeObject(_commands.Select(x => x.Value)));

            return(commandSyntax);
        }
Ejemplo n.º 5
0
        public void Setup()
        {
            Syntax      = new CommandSyntax();
            Parser      = new CommandParser(Syntax);
            Validator   = new CommandValidator(Parser, new MockLocalizer());
            MockMethods = new MockCommand();
            Generator   = new CandidatesGenerator(Syntax);

            Switch      = new ArgumentRule("switch", MockMethods.Switch);
            Click       = new ArgumentRule("click", MockMethods.Click);
            RightClick  = new ArgumentRule("rightclick", MockMethods.RightClick);
            DoubleClick = new ArgumentRule("doubleclick", MockMethods.DoubleClick);

            ArgApplication   = new ArgumentRule("application", MockMethods.Application, ArgsFactory(Switch));
            ArgWindow        = new ArgumentRule("window", MockMethods.Window, ArgsFactory(Click, RightClick, DoubleClick));
            ArgTaskbar       = new ArgumentRule("taskbar", MockMethods.Taskbar, ArgsFactory(Click, RightClick));
            ArgDividedscreen = new ArgumentRule("windowdividedscreen", MockMethods.WindowDividedScreen, ArgsFactory(Click, DoubleClick));

            ArgText           = new ArgumentRule("Text", MockMethods.Text);
            ArgCommand        = new ArgumentRule("Command", MockMethods.Command);
            ArgInItemsControl = new ArgumentRule("TextInItemsControl", MockMethods.TextInItemsControl);

            OptButton   = new ArgumentRule("Button", MockMethods.Button);
            OptCheckBox = new ArgumentRule("CheckBox", MockMethods.CheckBox);

            OptGenerator = new ArgumentRule("-hintGenerator", MockMethods.HintGenerator);
            OptTarget    = new ArgumentRule("-searchTarget", MockMethods.SearchTarget, null, ArgsFactory(OptButton, OptCheckBox));

            Hah            = new CommandRule("hah", MockMethods.HitaHint, ArgsFactory(ArgWindow, ArgApplication, ArgTaskbar, ArgDividedscreen), ArgsFactory(OptGenerator, OptTarget));
            SearchByText   = new CommandRule("/", MockMethods.SearchByText, ArgsFactory(ArgText, ArgCommand, ArgInItemsControl), ArgsFactory(OptTarget));
            Hah2           = new CommandRule("hah2", MockMethods.HitaHint2, ArgsFactory(ArgWindow, ArgDividedscreen));
            MouseEmulation = new CommandRule("me", MockMethods.MouseEmulation);

            Syntax.Add(Hah);
            Syntax.Add(SearchByText);
            Syntax.Add(Hah2);
            Syntax.Add(MouseEmulation);
        }