diff --git a/src/main.rs b/src/main.rs
index 1929e14..ae34279 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,7 +7,7 @@ use std::cmp;
use std::convert::TryInto;
use std::path::Path;
use std::process;
-use clap::{Arg, Command, arg};
+use clap::{Command, arg};
use termion::raw::{IntoRawMode, RawTerminal};
use termion::input::TermRead;
use termion::cursor::{DetectCursorPos};
@@ -182,30 +182,21 @@ fn main() {
)
.get_matches();
- match matches.value_of("command") {
- Some(command) => {
- let mut ctx = parser::vars::Context::new();
- parser::exec(&mut command.as_bytes(), &mut ctx).unwrap();
- return;
- },
- None => {}
+ if let Some(command) = matches.value_of("command") {
+ let mut ctx = parser::vars::Context::new();
+ parser::exec(&mut command.as_bytes(), &mut ctx).unwrap();
+ return;
};
- match matches.value_of("file") {
- Some(file) => {
- load_and_run(file).unwrap();
- return;
- },
- None => {}
+ if let Some(file) = matches.value_of("file") {
+ load_and_run(file).unwrap();
+ return;
};
Shell::start();
}
#[cfg(test)]
mod test {
- use std::fs::File;
- use std::io::BufReader;
- use std::path::Path;
- use crate::{load_and_run, parser};
+ use crate::{load_and_run};
use anyhow::Result;
#[test]
fn simple() -> Result<()> {
diff --git a/src/parser/ast.rs b/src/parser/ast.rs
index 4a5ca26..41a9944 100644
--- a/src/parser/ast.rs
+++ b/src/parser/ast.rs
@@ -608,7 +608,7 @@ impl Tree {
Some(_) => bail!("Commands must be ended properly"),
None => {expr = Some(Expression::IfExpression(self.parse_if(end)?)); },
}
- Tokens::Let => return Ok(self.parse_let(end)?),
+ Tokens::Let => return self.parse_let(end),
Tokens::While => return Ok(Expression::WhileExpression(self.parse_while(end)?)),
Tokens::StringVariable(_, _) => if matches!(expr, Some(_)) {
bail!("Unexpected variable. After file redirect, you need to use a semicolon or newline.");
diff --git a/src/parser/exec.rs b/src/parser/exec.rs
index 1059005..0ca7b10 100644
--- a/src/parser/exec.rs
+++ b/src/parser/exec.rs
@@ -1,21 +1,19 @@
use std::fs::File;
-use std::process::{Child, Command, Stdio};
-use std::io;
+use std::process::{Command};
use crate::parser::ast::{AndExpression, BreakExpression, CommandValue, Expression, FileSourceExpression, FileTargetExpression, ForExpression, IfExpression, LetExpression, OrExpression, RedirectTargetExpression, Value, WhileExpression};
-use crate::parser::vars;
use crate::parser::vars::{AnyFunction, Context, Variable};
use anyhow::{Result, bail, Context as AnyhowContext};
trait ExecExpression {
- fn exec(&mut self, ctx: &mut vars::Context) -> Result