Strip leading spaces after line continuation (#635)

Make line continuations strip leading spaces on the next line.

This changes what is passed to the shell, so this is a breaking change.
However, I don't think that this will break any recipes.
This commit is contained in:
Casey Rodarmor 2020-06-08 22:37:12 -07:00 committed by GitHub
parent 4fdb771731
commit 2a9c29c18f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 9 deletions

View File

@ -145,11 +145,20 @@ impl<'src, 'run> Evaluator<'src, 'run> {
})
}
pub(crate) fn evaluate_line(&mut self, line: &Line<'src>) -> RunResult<'src, String> {
pub(crate) fn evaluate_line(
&mut self,
line: &Line<'src>,
continued: bool,
) -> RunResult<'src, String> {
let mut evaluated = String::new();
for fragment in &line.fragments {
for (i, fragment) in line.fragments.iter().enumerate() {
match fragment {
Fragment::Text { token } => evaluated += token.lexeme(),
Fragment::Text { token } =>
if i == 0 && continued {
evaluated += token.lexeme().trim_start();
} else {
evaluated += token.lexeme();
},
Fragment::Interpolation { expression } => {
evaluated += &self.evaluate_expression(expression)?;
},

View File

@ -89,7 +89,7 @@ impl<'src, D> Recipe<'src, D> {
if self.shebang {
let mut evaluated_lines = vec![];
for line in &self.body {
evaluated_lines.push(evaluator.evaluate_line(line)?);
evaluated_lines.push(evaluator.evaluate_line(line, false)?);
}
if config.dry_run || self.quiet {
@ -205,14 +205,16 @@ impl<'src, D> Recipe<'src, D> {
break;
}
let mut evaluated = String::new();
let mut continued = false;
loop {
if lines.peek().is_none() {
break;
}
let line = lines.next().unwrap();
line_number += 1;
evaluated += &evaluator.evaluate_line(line)?;
evaluated += &evaluator.evaluate_line(line, continued)?;
if line.is_continuation() {
continued = true;
evaluated.pop();
} else {
break;