From cd09d1e6d444b93195228b81899af01a73b98688 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Tue, 4 Oct 2022 22:33:19 -0700 Subject: [PATCH] Don't evaluate comments (#1358) --- src/line.rs | 46 +++++++++++++++++++--------------------- src/recipe.rs | 13 +++++++----- tests/ignore_comments.rs | 14 ++++++++++++ 3 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/line.rs b/src/line.rs index f0bc6dc..6b0de6c 100644 --- a/src/line.rs +++ b/src/line.rs @@ -13,41 +13,39 @@ impl<'src> Line<'src> { } pub(crate) fn is_comment(&self) -> bool { - match self.fragments.first() { - Some(Fragment::Text { token }) => token.lexeme().starts_with('#'), - _ => false, - } + matches!( + self.fragments.first(), + Some(Fragment::Text { token }) if token.lexeme().starts_with('#'), + ) } pub(crate) fn is_continuation(&self) -> bool { - match self.fragments.last() { - Some(Fragment::Text { token }) => token.lexeme().ends_with('\\'), - _ => false, - } + matches!( + self.fragments.last(), + Some(Fragment::Text { token }) if token.lexeme().ends_with('\\'), + ) } pub(crate) fn is_shebang(&self) -> bool { - match self.fragments.first() { - Some(Fragment::Text { token }) => token.lexeme().starts_with("#!"), - _ => false, - } + matches!( + self.fragments.first(), + Some(Fragment::Text { token }) if token.lexeme().starts_with("#!"), + ) } pub(crate) fn is_quiet(&self) -> bool { - match self.fragments.first() { - Some(Fragment::Text { token }) => { - token.lexeme().starts_with('@') || token.lexeme().starts_with("-@") - } - _ => false, - } + matches!( + self.fragments.first(), + Some(Fragment::Text { token }) + if token.lexeme().starts_with('@') || token.lexeme().starts_with("-@"), + ) } pub(crate) fn is_infallible(&self) -> bool { - match self.fragments.first() { - Some(Fragment::Text { token }) => { - token.lexeme().starts_with('-') || token.lexeme().starts_with("@-") - } - _ => false, - } + matches!( + self.fragments.first(), + Some(Fragment::Text { token }) + if token.lexeme().starts_with('-') || token.lexeme().starts_with("@-"), + ) } } diff --git a/src/recipe.rs b/src/recipe.rs index 80156f2..698a49d 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -124,7 +124,9 @@ impl<'src, D> Recipe<'src, D> { } let line = lines.next().unwrap(); line_number += 1; - evaluated += &evaluator.evaluate_line(line, continued)?; + if !comment_line { + evaluated += &evaluator.evaluate_line(line, continued)?; + } if line.is_continuation() && !comment_line { continued = true; evaluated.pop(); @@ -132,6 +134,11 @@ impl<'src, D> Recipe<'src, D> { break; } } + + if comment_line { + continue; + } + let mut command = evaluated.as_str(); if quiet_command { @@ -142,10 +149,6 @@ impl<'src, D> Recipe<'src, D> { command = &command[1..]; } - if comment_line { - continue; - } - if command.is_empty() { continue; } diff --git a/tests/ignore_comments.rs b/tests/ignore_comments.rs index 1dc04b1..1badd4c 100644 --- a/tests/ignore_comments.rs +++ b/tests/ignore_comments.rs @@ -83,3 +83,17 @@ fn continuations_with_echo_comments_true() { .stderr("# comment lines can be continued echo something-useful\n") .run(); } + +#[test] +fn dont_evalute_comments() { + Test::new() + .justfile( + " + set ignore-comments + + some_recipe: + # {{ error('foo') }} + ", + ) + .run(); +}