aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/lints/unnecessary_render_result_creation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_cli/src/lints/unnecessary_render_result_creation.rs')
-rw-r--r--mingling_cli/src/lints/unnecessary_render_result_creation.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/mingling_cli/src/lints/unnecessary_render_result_creation.rs b/mingling_cli/src/lints/unnecessary_render_result_creation.rs
index 06c47d9..03f81d2 100644
--- a/mingling_cli/src/lints/unnecessary_render_result_creation.rs
+++ b/mingling_cli/src/lints/unnecessary_render_result_creation.rs
@@ -15,6 +15,7 @@
//! Default: `warn`
use crate::linter::mlint_report::{MlintLevel, MlintReport};
+use quote::ToTokens;
pub fn linter(ast: syn::ItemFn, source: &str) -> Vec<MlintReport> {
if !has_renderer_attr(&ast) {
@@ -169,8 +170,19 @@ fn check_stmt_usage(stmt: &syn::Stmt, r_name: &str, print_count: &mut usize) ->
}
}
- let s = format!("{stmt:#?}");
- !s.contains(&format!("\"{r_name}\""))
+ // Any other reference to r → not allowed
+ // Check the token stream for the variable name
+ let ts_string = stmt.to_token_stream().to_string();
+ if ts_string.contains(&format!("({r_name})"))
+ || ts_string.contains(&format!(" {r_name})"))
+ || ts_string.contains(&format!("(&mut {r_name})"))
+ || ts_string.contains(&format!("&{r_name}"))
+ || ts_string.contains(&format!("move {r_name}"))
+ || ts_string.contains(&format!(",{r_name},"))
+ {
+ return false;
+ }
+ true
}
#[cfg(test)]