From 288d9c3684570025ed54fb88f1a786c024f3d013 Mon Sep 17 00:00:00 2001 From: Charlie Egan Date: Tue, 9 Jul 2024 17:27:38 +0100 Subject: [PATCH] rule: Fix pointless issue when using with (#907) Fixes #904 I find the times to be comparable for the regal bundle + a simple violating file. ```sh regal $ go build && time ./regal lint . --disable-all --enable=pointless-r eassignment Rule: pointless-reassignment Description: Pointless reassignment of variable Category: style Location: thing.rego:10:6 Text: foo := e with foo as 2 Documentation: https://docs.styra.com/regal/rules/style/pointless-reassignment 201 files linted. 1 violation found in 1 file. real 0m1.906s user 0m6.344s sys 0m0.244s [3]regal $ bran Current: main Switched to branch 'pointless' Your branch is ahead of 'main' by 1 commit. (use "git push" to publish your local commits) regal $ go build && time ./regal lint . --disable-all --enable=pointless-reassignment 201 files linted. No violations found. real 0m1.580s user 0m2.930s sys 0m0.109s ``` Signed-off-by: Charlie Egan --- .../rules/style/pointless_reassignment.rego | 19 +++++++------------ .../style/pointless_reassignment_test.rego | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/bundle/regal/rules/style/pointless_reassignment.rego b/bundle/regal/rules/style/pointless_reassignment.rego index 12006257..8f7e112c 100644 --- a/bundle/regal/rules/style/pointless_reassignment.rego +++ b/bundle/regal/rules/style/pointless_reassignment.rego @@ -21,19 +21,14 @@ report contains violation if { # pointless reassignment in rule body report contains violation if { - some call in ast.all_refs + some rule in input.rules + some expr in rule.body - call[0].value[0].type == "var" - call[0].value[0].value == "assign" + not expr["with"] - call[2].type == "var" + expr.terms[0].value[0].type == "var" + expr.terms[0].value[0].value == "assign" + expr.terms[2].type == "var" - violation := result.fail(rego.metadata.chain(), result.location(call)) -} - -assign_calls contains call if { - some call in ast.all_refs - - call[0].value[0].type == "var" - call[0].value[0].value == "assign" + violation := result.fail(rego.metadata.chain(), result.location(expr.terms)) } diff --git a/bundle/regal/rules/style/pointless_reassignment_test.rego b/bundle/regal/rules/style/pointless_reassignment_test.rego index 16f5dfa3..57469afa 100644 --- a/bundle/regal/rules/style/pointless_reassignment_test.rego +++ b/bundle/regal/rules/style/pointless_reassignment_test.rego @@ -50,3 +50,18 @@ test_pointless_reassignment_in_rule_body if { "title": "pointless-reassignment", }} } + +test_pointless_reassignment_in_rule_body_using_with if { + module := ast.with_rego_v1(` + foo := input + + rule if { + bar := foo with input as "wow" + + bar == true + } + `) + + r := rule.report with input as module + r == set() +}