From af86a471e27e36fc4e9b45067a6a1067241f66f3 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Fri, 21 Jun 2024 13:39:34 -0700 Subject: [PATCH] Don't analyze comments when `ignore-comments` is set (#2180) --- src/analyzer.rs | 2 +- src/recipe_resolver.rs | 7 ++++++- tests/ignore_comments.rs | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/analyzer.rs b/src/analyzer.rs index f2e0b654..96982844 100644 --- a/src/analyzer.rs +++ b/src/analyzer.rs @@ -149,7 +149,7 @@ impl<'src> Analyzer<'src> { } } - let recipes = RecipeResolver::resolve_recipes(recipe_table, &self.assignments)?; + let recipes = RecipeResolver::resolve_recipes(&self.assignments, &settings, recipe_table)?; let mut aliases = Table::new(); while let Some(alias) = self.aliases.pop() { diff --git a/src/recipe_resolver.rs b/src/recipe_resolver.rs index 5a962d88..c56afeaf 100644 --- a/src/recipe_resolver.rs +++ b/src/recipe_resolver.rs @@ -8,8 +8,9 @@ pub(crate) struct RecipeResolver<'src: 'run, 'run> { impl<'src: 'run, 'run> RecipeResolver<'src, 'run> { pub(crate) fn resolve_recipes( - unresolved_recipes: Table<'src, UnresolvedRecipe<'src>>, assignments: &'run Table<'src, Assignment<'src>>, + settings: &Settings, + unresolved_recipes: Table<'src, UnresolvedRecipe<'src>>, ) -> CompileResult<'src, Table<'src, Rc>>> { let mut resolver = Self { resolved_recipes: Table::new(), @@ -39,6 +40,10 @@ impl<'src: 'run, 'run> RecipeResolver<'src, 'run> { } for line in &recipe.body { + if line.is_comment() && settings.ignore_comments { + continue; + } + for fragment in &line.fragments { if let Fragment::Interpolation { expression, .. } = fragment { for variable in expression.variables() { diff --git a/tests/ignore_comments.rs b/tests/ignore_comments.rs index 7cc996e2..c3028a57 100644 --- a/tests/ignore_comments.rs +++ b/tests/ignore_comments.rs @@ -97,3 +97,41 @@ fn dont_evaluate_comments() { ) .run(); } + +#[test] +fn dont_analyze_comments() { + Test::new() + .justfile( + " + set ignore-comments + + some_recipe: + # {{ bar }} + ", + ) + .run(); +} + +#[test] +fn comments_still_must_be_parsable_when_ignored() { + Test::new() + .justfile( + " + set ignore-comments + + some_recipe: + # {{ foo bar }} + ", + ) + .stderr( + " + error: Expected '}}', '(', '+', or '/', but found identifier + ——▶ justfile:4:12 + │ + 4 │ # {{ foo bar }} + │ ^^^ + ", + ) + .status(EXIT_FAILURE) + .run(); +}