martin-olivier/airgorah
A WiFi security auditing software
Rust★ 5,986+270 that day#11 on trending
C64.2/100
Duplication66
5.4% in rust, dockerDead coden/a
no JavaScript, TypeScript, Python or compiler-checked Rust filesComplexity62
37.7% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
5.43%duplicated code · 445 of 8,197 lines
40clones in code
46code files of 53 scanned
5.23%duplicated over all files · 40 clones
Most complex files
- crates/gui/src/frontend/connections/app.rs135 cx
- crates/agent/src/backend/sniffer.rs93 cx
- crates/gui/src/backend/client.rs86 cx
- crates/common/src/handshake.rs70 cx
- crates/agent/src/server.rs50 cx
- crates/gui/src/frontend/connections/scan.rs48 cx
- crates/agent/src/backend/pmkid.rs46 cx
- crates/agent/src/backend/interface.rs44 cx
- crates/gui/src/frontend/connections/decrypt.rs41 cx
- crates/gui/src/frontend/interfaces/app.rs37 cx
Dead code
Not measured: no JavaScript, TypeScript, Python or compiler-checked Rust files.
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 15 lines in 3 placesrust104 tokenscrates/gui/src/frontend/connections/app.rs:1121–1135crates/gui/src/frontend/connections/scan.rs:109–123crates/gui/src/frontend/connections/scan.rs:168–183
1121file_chooser_dialog.set_current_name(&format!("{essid}.cap")); 1122file_chooser_dialog.run_async(clone!( 1123 #[strong] 1124 app_data, 1125 move |this, response| { 1126 this.close(); 1127 1128 if response == ResponseType::Accept { 1129 let gio_file = match this.file() { 1130 Some(file) => file,First 10 of 15 lines.
- 7 lines in 4 placesrust51 tokenscrates/gui/src/frontend/connections/app.rs:577–583crates/gui/src/frontend/connections/app.rs:1014–1020crates/gui/src/frontend/connections/app.rs:1042–1048crates/gui/src/frontend/connections/app.rs:1080–1086
577app_data.app_gui.previous_but.connect_clicked(clone!( 578 #[strong] 579 app_data, 580 move |_| { 581 let iter = match app_data.app_gui.aps_view.selection().selected() { 582 Some((_, iter)) => iter, 583 None => return update_buttons_sensitivity(&app_data),1014app_data.app_gui.deauth_but.connect_clicked(clone!( 1015 #[strong] 1016 app_data, 1017 move |_| { 1018 let iter = match app_data.app_gui.aps_view.selection().selected() { 1019 Some((_, iter)) => iter, 1020 None => return, - 12 lines in 3 placesrust72 tokenscrates/gui/src/frontend/connections/decrypt.rs:9–20crates/gui/src/frontend/connections/interface.rs:7–18crates/gui/src/frontend/connections/settings.rs:8–19
9use std::collections::HashSet; 10use std::rc::Rc; 11 12fn connect_controller(app_data: Rc<AppData>) { 13 let controller = gtk4::EventControllerKey::new(); 14 15 controller.connect_key_pressed(clone!( 16 #[strong] 17 app_data, 18 move |_, key, _, _| {First 10 of 12 lines.
7 more
- 23 lines in 2 placesrust132 tokens
- 9 lines in 3 placesrust60 tokens
- 14 lines in 2 placesrust114 tokens
- 10 lines in 3 placesrust57 tokens
- 10 lines in 3 placesrust57 tokens
- 21 lines in 2 placesrust110 tokens
- 17 lines in 2 placesrust110 tokens
Largest clones over all files, tests and data included
- 15 lines in 3 placesrust104 tokenscrates/gui/src/frontend/connections/app.rs:1121–1135crates/gui/src/frontend/connections/scan.rs:109–123crates/gui/src/frontend/connections/scan.rs:168–183
1121file_chooser_dialog.set_current_name(&format!("{essid}.cap")); 1122file_chooser_dialog.run_async(clone!( 1123 #[strong] 1124 app_data, 1125 move |this, response| { 1126 this.close(); 1127 1128 if response == ResponseType::Accept { 1129 let gio_file = match this.file() { 1130 Some(file) => file,First 10 of 15 lines.
- 7 lines in 4 placesrust51 tokenscrates/gui/src/frontend/connections/app.rs:577–583crates/gui/src/frontend/connections/app.rs:1014–1020crates/gui/src/frontend/connections/app.rs:1042–1048crates/gui/src/frontend/connections/app.rs:1080–1086
577app_data.app_gui.previous_but.connect_clicked(clone!( 578 #[strong] 579 app_data, 580 move |_| { 581 let iter = match app_data.app_gui.aps_view.selection().selected() { 582 Some((_, iter)) => iter, 583 None => return update_buttons_sensitivity(&app_data),1014app_data.app_gui.deauth_but.connect_clicked(clone!( 1015 #[strong] 1016 app_data, 1017 move |_| { 1018 let iter = match app_data.app_gui.aps_view.selection().selected() { 1019 Some((_, iter)) => iter, 1020 None => return, - 12 lines in 3 placesrust72 tokenscrates/gui/src/frontend/connections/decrypt.rs:9–20crates/gui/src/frontend/connections/interface.rs:7–18crates/gui/src/frontend/connections/settings.rs:8–19
9use std::collections::HashSet; 10use std::rc::Rc; 11 12fn connect_controller(app_data: Rc<AppData>) { 13 let controller = gtk4::EventControllerKey::new(); 14 15 controller.connect_key_pressed(clone!( 16 #[strong] 17 app_data, 18 move |_, key, _, _| {First 10 of 12 lines.
- 23 lines in 2 placesrust132 tokens
- 9 lines in 3 placesrust60 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 46 | 8,197 | 40 | 445 | 5.43% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 46 | 8,197 | 40 | 445 | 5.43% |
| yaml | 1 | 127 | 0 | 0 | 0% |
| toml | 4 | 103 | 0 | 0 | 0% |
| markdown | 1 | 58 | 0 | 0 | 0% |
| docker | 1 | 31 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Nov 15, 2026 | #11 | 5,986 (+270) | 53 | 8,516 | 40 | 5.23% | 5.43% | C 64.2 | f5833ff |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.