Skip to content

Commit

Permalink
add lint for bitwise parity check
Browse files Browse the repository at this point in the history
  • Loading branch information
manlikeHB committed Sep 18, 2024
1 parent 391a5da commit 4069c2a
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 2 deletions.
21 changes: 21 additions & 0 deletions crates/cairo-lint-core/src/lints/bitwise_for_parity_check.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
use cairo_lang_defs::plugin::PluginDiagnostic;
use cairo_lang_diagnostics::Severity;
use cairo_lang_syntax::node::ast::StatementLet;
use cairo_lang_syntax::node::db::SyntaxGroup;
use cairo_lang_syntax::node::kind::SyntaxKind;
use cairo_lang_syntax::node::TypedSyntaxNode;

pub const BITWISE_FOR_PARITY: &str =
"you seem to be trying to use `&` for parity check. Consider using `DivRem::div_rem()` instead.";

pub fn check_bitwise_for_parity(db: &dyn SyntaxGroup, node: StatementLet, diagnostics: &mut Vec<PluginDiagnostic>) {
let is_bitwise_for_parity_check = node.rhs(db);

// if is_bitwise_for_parity_check {
// diagnostics.push(PluginDiagnostic {
// stable_ptr: node.as_syntax_node().stable_ptr(),
// message: BITWISE_FOR_PARITY.to_string(),
// severity: Severity::Warning,
// });
// }
}
1 change: 1 addition & 0 deletions crates/cairo-lint-core/src/lints/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub mod bitwise_for_parity_check;
pub mod bool_comparison;
pub mod breaks;
pub mod double_parens;
Expand Down
9 changes: 7 additions & 2 deletions crates/cairo-lint-core/src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use cairo_lang_defs::plugin::PluginDiagnostic;
use cairo_lang_semantic::db::SemanticGroup;
use cairo_lang_semantic::plugin::{AnalyzerPlugin, PluginSuite};
use cairo_lang_semantic::Expr;
use cairo_lang_syntax::node::ast::{Expr as AstExpr, ExprBinary};
use cairo_lang_syntax::node::ast::{Expr as AstExpr, ExprBinary, StatementLet};
use cairo_lang_syntax::node::kind::SyntaxKind;
use cairo_lang_syntax::node::{TypedStablePtr, TypedSyntaxNode};

use crate::lints::{bool_comparison, breaks, double_parens, loops, single_match};
use crate::lints::{bitwise_for_parity_check, bool_comparison, breaks, double_parens, loops, single_match};

pub fn cairo_lint_plugin_suite() -> PluginSuite {
let mut suite = PluginSuite::default();
Expand Down Expand Up @@ -88,6 +88,11 @@ impl AnalyzerPlugin for CairoLint {
let expr_binary = ExprBinary::from_syntax_node(db.upcast(), node);
bool_comparison::check_bool_comparison(db.upcast(), expr_binary, &mut diags);
}
SyntaxKind::StatementLet => bitwise_for_parity_check::check_bitwise_for_parity(
db.upcast(),
StatementLet::from_syntax_node(db.upcast(), node),
&mut diags,
),
_ => continue,
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//! > Test name

//! > cairo_code
fn main() {
let a: Option<felt252> = Option::Some(1);
}
2 changes: 2 additions & 0 deletions crates/cairo-lint-core/tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,5 @@ test_file!(
"Negated comparison with false",
"Negated comparison with false on LHS"
);

test_file!(bitwise_for_parity_check, bitwise_for_parity_check, "Test name");

0 comments on commit 4069c2a

Please sign in to comment.