diff --git a/src/lib/builtins/source.rs b/src/lib/builtins/source.rs
index f9371066deda365984179aeecae1456221d7269c..650e8c18db0290d8934120b90a56b306b8ff0733 100644
--- a/src/lib/builtins/source.rs
+++ b/src/lib/builtins/source.rs
@@ -15,7 +15,6 @@ pub(crate) fn source(shell: &mut Shell, arguments: &[small::String]) -> Result<(
                         for command in command_list.lines() {
                             shell.on_command(command);
                         }
-                        ()
                     })
             } else {
                 Err(format!("ion: failed to open {}\n", argument))
diff --git a/src/lib/parser/pipelines/collector.rs b/src/lib/parser/pipelines/collector.rs
index 835d6bc2915388269ab99b95fb7c794ec075811f..fe40dee57f7a3709b66fee8baa8cccdf352008d9 100644
--- a/src/lib/parser/pipelines/collector.rs
+++ b/src/lib/parser/pipelines/collector.rs
@@ -82,13 +82,14 @@ impl<'a> Collector<'a> {
         let arg = self.arg(bytes)?;
         match arg {
             Some(file) => {
-                outputs.as_mut().map(|o| {
+                if let Some(o) = outputs.as_mut() {
                     o.push(Redirection {
                         from,
                         file: file.into(),
                         append,
-                    })
-                });
+                    });
+                }
+
                 Ok(())
             }
             None => Err("expected file argument after redirection for output"),
@@ -411,7 +412,7 @@ impl<'a> Collector<'a> {
                 // We return an inclusive range to keep the quote type intact
                 b'"' => {
                     bytes.next();
-                    return Ok(&self.data[start..i + 1]);
+                    return Ok(&self.data[start..=i]);
                 }
                 _ => (),
             }
diff --git a/src/lib/parser/shell_expand/mod.rs b/src/lib/parser/shell_expand/mod.rs
index 05b2b7b52b3823da45230ef633b194b57cdf807f..a130a0f1e15ebf66c037aad78824e8da75b5d08d 100644
--- a/src/lib/parser/shell_expand/mod.rs
+++ b/src/lib/parser/shell_expand/mod.rs
@@ -722,7 +722,7 @@ pub(crate) fn expand_tokens<E: Expander>(
         }
         expanded_words
     } else {
-        array![]
+        Array::new()
     }
 }
 
diff --git a/src/lib/parser/shell_expand/words/methods/arrays.rs b/src/lib/parser/shell_expand/words/methods/arrays.rs
index f590fde6f7a2a33ec8663e1f84f563605c5bab77..ecd1e097e23cb63c432343028319609725420527 100644
--- a/src/lib/parser/shell_expand/words/methods/arrays.rs
+++ b/src/lib/parser/shell_expand/words/methods/arrays.rs
@@ -172,7 +172,7 @@ impl<'a> ArrayMethod<'a> {
         } else if is_expression(self.variable) {
             expand_string(self.variable, expand_func, false)
         } else {
-            array![]
+            Array::new()
         }
     }
 
@@ -203,7 +203,7 @@ impl<'a> ArrayMethod<'a> {
 
         res.unwrap_or_else(|m| {
             eprintln!("ion: {}: {}", self.method, m);
-            array![]
+            Array::new()
         })
     }
 
diff --git a/src/lib/parser/shell_expand/words/mod.rs b/src/lib/parser/shell_expand/words/mod.rs
index e0f2b2bb3a56304346ffe22b3ce8b5e7ee9ccaac..c60650aba3d1e99d608793a23cfd1ad9cf2a761b 100644
--- a/src/lib/parser/shell_expand/words/mod.rs
+++ b/src/lib/parser/shell_expand/words/mod.rs
@@ -169,7 +169,7 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> {
         let mut start = self.read;
         let mut level = 0;
         let mut elements = Vec::new();
-        while let Some(character) = iterator.next() {
+        for character in iterator {
             match character {
                 _ if self.flags.contains(Flags::BACKSL) => self.flags ^= Flags::BACKSL,
                 b'\\' => self.flags ^= Flags::BACKSL,
@@ -480,7 +480,7 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> {
     {
         self.read += 1;
         let start = self.read;
-        while let Some(character) = iterator.next() {
+        for character in iterator {
             if let b']' = character {
                 let value =
                     expand_string(&self.data[start..self.read], self.expanders, false).join(" ");
@@ -630,7 +630,7 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> {
         I: Iterator<Item = u8>,
     {
         let start = self.read;
-        while let Some(character) = iterator.next() {
+        for character in iterator {
             if character == b'}' {
                 let output = &self.data[start..self.read];
                 self.read += 1;
@@ -650,12 +650,11 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> {
     {
         let start = self.read;
         self.read += 1;
-        while let Some(character) = iterator.next() {
-            if character == b' ' {
-                self.read += 1;
-            } else {
-                return WordToken::Whitespace(&self.data[start..self.read]);
+        for character in iterator {
+            if character != b' ' {
+                break;
             }
+            self.read += 1;
         }
 
         WordToken::Whitespace(&self.data[start..self.read])