Compare commits

..

7 Commits

Author SHA1 Message Date
LagoLunatic 6f05b6b964 Also update variable name in rlwinm.rs 2024-12-02 01:15:30 -05:00
LagoLunatic d773b8c14f Change variable name
Co-authored-by: Luke Street <luke@street.dev>
2024-12-02 01:15:30 -05:00
LagoLunatic c0e9af54a5 Remove trailing newline when displaying decoded rlwinm info 2024-12-02 01:15:30 -05:00
LagoLunatic 1f6b4ac8c4 Display decoded rlwinm info to hover tooltip 2024-12-02 01:15:30 -05:00
LagoLunatic 8150f9832c Update .gitignore 2024-12-02 01:15:30 -05:00
LagoLunatic bd6dc5988a Fix missing dependency feature for objdiff-gui 2024-12-02 01:15:30 -05:00
Luke Street 7aa878b48e Update all dependencies & clippy fixes 2024-12-01 22:22:35 -07:00
12 changed files with 732 additions and 442 deletions

1099
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -73,6 +73,7 @@ ignore = [
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" }, #{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
#"a-crate-that-is-yanked@0.1.1", # you can also ignore yanked crate versions if you wish #"a-crate-that-is-yanked@0.1.1", # you can also ignore yanked crate versions if you wish
#{ crate = "a-crate-that-is-yanked@0.1.1", reason = "you can specify why you are ignoring the yanked crate" }, #{ crate = "a-crate-that-is-yanked@0.1.1", reason = "you can specify why you are ignoring the yanked crate" },
{ id = "RUSTSEC-2024-0384", reason = "Unmaintained indirect dependency" },
] ]
# If this is true, then cargo deny will use the git executable to fetch advisory database. # If this is true, then cargo deny will use the git executable to fetch advisory database.
# If this is false, then it uses a built-in git library. # If this is false, then it uses a built-in git library.
@ -97,7 +98,7 @@ allow = [
"BSL-1.0", "BSL-1.0",
"CC0-1.0", "CC0-1.0",
"MPL-2.0", "MPL-2.0",
"Unicode-DFS-2016", "Unicode-3.0",
"Zlib", "Zlib",
"0BSD", "0BSD",
"OFL-1.1", "OFL-1.1",

View File

@ -20,7 +20,7 @@ enable-ansi-support = "0.2"
memmap2 = "0.9" memmap2 = "0.9"
objdiff-core = { path = "../objdiff-core", features = ["all"] } objdiff-core = { path = "../objdiff-core", features = ["all"] }
prost = "0.13" prost = "0.13"
ratatui = "0.28" ratatui = "0.29"
rayon = "1.10" rayon = "1.10"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"

View File

@ -1,3 +1,4 @@
#![allow(clippy::needless_lifetimes)] // Generated serde code
use crate::{ use crate::{
diff::{ diff::{
ObjDataDiff, ObjDataDiffKind, ObjDiff, ObjInsArgDiff, ObjInsBranchFrom, ObjInsBranchTo, ObjDataDiff, ObjDataDiffKind, ObjDiff, ObjInsArgDiff, ObjInsBranchFrom, ObjInsBranchTo,

View File

@ -1,3 +1,4 @@
#![allow(clippy::needless_lifetimes)] // Generated serde code
use std::ops::AddAssign; use std::ops::AddAssign;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
@ -173,8 +174,7 @@ impl Report {
continue; continue;
} }
fn is_sub_category(id: &str, parent: &str, sep: char) -> bool { fn is_sub_category(id: &str, parent: &str, sep: char) -> bool {
id.starts_with(parent) id.starts_with(parent) && id.get(parent.len()..).is_some_and(|s| s.starts_with(sep))
&& id.get(parent.len()..).map_or(false, |s| s.starts_with(sep))
} }
let mut sub_categories = self let mut sub_categories = self
.categories .categories

View File

@ -65,10 +65,7 @@ fn to_obj_symbol(
flags = ObjSymbolFlagSet(flags.0 | ObjSymbolFlags::Hidden); flags = ObjSymbolFlagSet(flags.0 | ObjSymbolFlags::Hidden);
} }
#[cfg(feature = "ppc")] #[cfg(feature = "ppc")]
if arch if arch.ppc().and_then(|a| a.extab.as_ref()).is_some_and(|e| e.contains_key(&symbol.index().0))
.ppc()
.and_then(|a| a.extab.as_ref())
.map_or(false, |e| e.contains_key(&symbol.index().0))
{ {
flags = ObjSymbolFlagSet(flags.0 | ObjSymbolFlags::HasExtra); flags = ObjSymbolFlagSet(flags.0 | ObjSymbolFlags::HasExtra);
} }

View File

@ -25,7 +25,7 @@ wsl = []
[dependencies] [dependencies]
anyhow = "1.0" anyhow = "1.0"
bytes = "1.7" bytes = "1.9"
cfg-if = "1.0" cfg-if = "1.0"
const_format = "0.2" const_format = "0.2"
cwdemangle = "1.0" cwdemangle = "1.0"
@ -42,7 +42,7 @@ notify = { git = "https://github.com/notify-rs/notify", rev = "128bf6230c03d39db
objdiff-core = { path = "../objdiff-core", features = ["all"] } objdiff-core = { path = "../objdiff-core", features = ["all"] }
open = "5.3" open = "5.3"
png = "0.17" png = "0.17"
pollster = "0.3" pollster = "0.4"
regex = "1.11" regex = "1.11"
rfd = { version = "0.15" } #, default-features = false, features = ['xdg-portal'] rfd = { version = "0.15" } #, default-features = false, features = ['xdg-portal']
rlwinmdec = "1.0" rlwinmdec = "1.0"
@ -51,7 +51,7 @@ serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"
shell-escape = "0.1" shell-escape = "0.1"
strum = { version = "0.26", features = ["derive"] } strum = { version = "0.26", features = ["derive"] }
tempfile = "3.13" tempfile = "3.14"
time = { version = "0.3", features = ["formatting", "local-offset"] } time = { version = "0.3", features = ["formatting", "local-offset"] }
# Keep version in sync with egui # Keep version in sync with egui

View File

@ -152,8 +152,7 @@ fn start_job(
let context = JobContext { status: status.clone(), egui: ctx.clone() }; let context = JobContext { status: status.clone(), egui: ctx.clone() };
let context_inner = JobContext { status: status.clone(), egui: ctx.clone() }; let context_inner = JobContext { status: status.clone(), egui: ctx.clone() };
let (tx, rx) = std::sync::mpsc::channel(); let (tx, rx) = std::sync::mpsc::channel();
let handle = std::thread::spawn(move || { let handle = std::thread::spawn(move || match run(context_inner, rx) {
return match run(context_inner, rx) {
Ok(state) => state, Ok(state) => state,
Err(e) => { Err(e) => {
if let Ok(mut w) = status.write() { if let Ok(mut w) = status.write() {
@ -161,7 +160,6 @@ fn start_job(
} }
JobResult::None JobResult::None
} }
};
}); });
let id = JOB_ID.fetch_add(1, Ordering::Relaxed); let id = JOB_ID.fetch_add(1, Ordering::Relaxed);
log::info!("Started job {}", id); log::info!("Started job {}", id);

View File

@ -213,8 +213,8 @@ pub fn data_diff_ui(
let right_ctx = SectionDiffContext::new(result.second_obj.as_ref(), section_name); let right_ctx = SectionDiffContext::new(result.second_obj.as_ref(), section_name);
// If both sides are missing a symbol, switch to symbol diff view // If both sides are missing a symbol, switch to symbol diff view
if !right_ctx.map_or(false, |ctx| ctx.has_section()) if !right_ctx.is_some_and(|ctx| ctx.has_section())
&& !left_ctx.map_or(false, |ctx| ctx.has_section()) && !left_ctx.is_some_and(|ctx| ctx.has_section())
{ {
return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff())); return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff()));
} }

View File

@ -101,7 +101,7 @@ pub fn extab_diff_ui(
let right_diff_symbol = right_ctx.and_then(|ctx| { let right_diff_symbol = right_ctx.and_then(|ctx| {
ctx.symbol_ref.and_then(|symbol_ref| ctx.diff.symbol_diff(symbol_ref).target_symbol) ctx.symbol_ref.and_then(|symbol_ref| ctx.diff.symbol_diff(symbol_ref).target_symbol)
}); });
if left_diff_symbol.is_some() && right_ctx.map_or(false, |ctx| !ctx.has_symbol()) { if left_diff_symbol.is_some() && right_ctx.is_some_and(|ctx| !ctx.has_symbol()) {
let (right_section, right_symbol) = let (right_section, right_symbol) =
right_ctx.unwrap().obj.section_symbol(left_diff_symbol.unwrap()); right_ctx.unwrap().obj.section_symbol(left_diff_symbol.unwrap());
let symbol_ref = SymbolRefByName::new(right_symbol, right_section); let symbol_ref = SymbolRefByName::new(right_symbol, right_section);
@ -111,7 +111,7 @@ pub fn extab_diff_ui(
left_symbol: state.symbol_state.left_symbol.clone(), left_symbol: state.symbol_state.left_symbol.clone(),
right_symbol: Some(symbol_ref), right_symbol: Some(symbol_ref),
})); }));
} else if right_diff_symbol.is_some() && left_ctx.map_or(false, |ctx| !ctx.has_symbol()) { } else if right_diff_symbol.is_some() && left_ctx.is_some_and(|ctx| !ctx.has_symbol()) {
let (left_section, left_symbol) = let (left_section, left_symbol) =
left_ctx.unwrap().obj.section_symbol(right_diff_symbol.unwrap()); left_ctx.unwrap().obj.section_symbol(right_diff_symbol.unwrap());
let symbol_ref = SymbolRefByName::new(left_symbol, left_section); let symbol_ref = SymbolRefByName::new(left_symbol, left_section);
@ -124,8 +124,8 @@ pub fn extab_diff_ui(
} }
// If both sides are missing a symbol, switch to symbol diff view // If both sides are missing a symbol, switch to symbol diff view
if right_ctx.map_or(false, |ctx| !ctx.has_symbol()) if right_ctx.is_some_and(|ctx| !ctx.has_symbol())
&& left_ctx.map_or(false, |ctx| !ctx.has_symbol()) && left_ctx.is_some_and(|ctx| !ctx.has_symbol())
{ {
return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff())); return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff()));
} }
@ -144,7 +144,7 @@ pub fn extab_diff_ui(
.add_enabled( .add_enabled(
!state.scratch_running !state.scratch_running
&& state.scratch_available && state.scratch_available
&& left_ctx.map_or(false, |ctx| ctx.has_symbol()), && left_ctx.is_some_and(|ctx| ctx.has_symbol()),
egui::Button::new("📲 decomp.me"), egui::Button::new("📲 decomp.me"),
) )
.on_hover_text_at_pointer("Create a new scratch on decomp.me (beta)") .on_hover_text_at_pointer("Create a new scratch on decomp.me (beta)")

View File

@ -150,8 +150,8 @@ fn ins_hover_ui(
} }
} }
if let Some(demangled) = rlwinmdec::decode(&ins.formatted) { if let Some(decoded) = rlwinmdec::decode(&ins.formatted) {
ui.colored_label(appearance.highlight_color, demangled.trim()); ui.colored_label(appearance.highlight_color, decoded.trim());
} }
}); });
} }
@ -644,7 +644,7 @@ pub fn function_diff_ui(
let right_diff_symbol = right_ctx.and_then(|ctx| { let right_diff_symbol = right_ctx.and_then(|ctx| {
ctx.symbol_ref.and_then(|symbol_ref| ctx.diff.symbol_diff(symbol_ref).target_symbol) ctx.symbol_ref.and_then(|symbol_ref| ctx.diff.symbol_diff(symbol_ref).target_symbol)
}); });
if left_diff_symbol.is_some() && right_ctx.map_or(false, |ctx| !ctx.has_symbol()) { if left_diff_symbol.is_some() && right_ctx.is_some_and(|ctx| !ctx.has_symbol()) {
let (right_section, right_symbol) = let (right_section, right_symbol) =
right_ctx.unwrap().obj.section_symbol(left_diff_symbol.unwrap()); right_ctx.unwrap().obj.section_symbol(left_diff_symbol.unwrap());
let symbol_ref = SymbolRefByName::new(right_symbol, right_section); let symbol_ref = SymbolRefByName::new(right_symbol, right_section);
@ -654,7 +654,7 @@ pub fn function_diff_ui(
left_symbol: state.symbol_state.left_symbol.clone(), left_symbol: state.symbol_state.left_symbol.clone(),
right_symbol: Some(symbol_ref), right_symbol: Some(symbol_ref),
})); }));
} else if right_diff_symbol.is_some() && left_ctx.map_or(false, |ctx| !ctx.has_symbol()) { } else if right_diff_symbol.is_some() && left_ctx.is_some_and(|ctx| !ctx.has_symbol()) {
let (left_section, left_symbol) = let (left_section, left_symbol) =
left_ctx.unwrap().obj.section_symbol(right_diff_symbol.unwrap()); left_ctx.unwrap().obj.section_symbol(right_diff_symbol.unwrap());
let symbol_ref = SymbolRefByName::new(left_symbol, left_section); let symbol_ref = SymbolRefByName::new(left_symbol, left_section);
@ -667,8 +667,8 @@ pub fn function_diff_ui(
} }
// If both sides are missing a symbol, switch to symbol diff view // If both sides are missing a symbol, switch to symbol diff view
if right_ctx.map_or(false, |ctx| !ctx.has_symbol()) if right_ctx.is_some_and(|ctx| !ctx.has_symbol())
&& left_ctx.map_or(false, |ctx| !ctx.has_symbol()) && left_ctx.is_some_and(|ctx| !ctx.has_symbol())
{ {
return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff())); return Some(DiffViewAction::Navigate(DiffViewNavigation::symbol_diff()));
} }
@ -687,7 +687,7 @@ pub fn function_diff_ui(
.add_enabled( .add_enabled(
!state.scratch_running !state.scratch_running
&& state.scratch_available && state.scratch_available
&& left_ctx.map_or(false, |ctx| ctx.has_symbol()), && left_ctx.is_some_and(|ctx| ctx.has_symbol()),
egui::Button::new("📲 decomp.me"), egui::Button::new("📲 decomp.me"),
) )
.on_hover_text_at_pointer("Create a new scratch on decomp.me (beta)") .on_hover_text_at_pointer("Create a new scratch on decomp.me (beta)")
@ -711,7 +711,7 @@ pub fn function_diff_ui(
.font(appearance.code_font.clone()) .font(appearance.code_font.clone())
.color(appearance.highlight_color), .color(appearance.highlight_color),
); );
if right_ctx.map_or(false, |m| m.has_symbol()) if right_ctx.is_some_and(|m| m.has_symbol())
&& ui && ui
.button("Change target") .button("Change target")
.on_hover_text_at_pointer("Choose a different symbol to use as the target") .on_hover_text_at_pointer("Choose a different symbol to use as the target")
@ -781,7 +781,7 @@ pub fn function_diff_ui(
.color(match_color_for_symbol(match_percent, appearance)), .color(match_color_for_symbol(match_percent, appearance)),
); );
} }
if left_ctx.map_or(false, |m| m.has_symbol()) { if left_ctx.is_some_and(|m| m.has_symbol()) {
ui.separator(); ui.separator();
if ui if ui
.button("Change base") .button("Change base")

View File

@ -16,13 +16,13 @@ pub fn rlwinm_decode_window(
egui::Window::new("Rlwinm Decoder").open(show).show(ctx, |ui| { egui::Window::new("Rlwinm Decoder").open(show).show(ctx, |ui| {
ui.text_edit_singleline(&mut state.text); ui.text_edit_singleline(&mut state.text);
ui.add_space(10.0); ui.add_space(10.0);
if let Some(demangled) = rlwinmdec::decode(&state.text) { if let Some(decoded) = rlwinmdec::decode(&state.text) {
ui.scope(|ui| { ui.scope(|ui| {
ui.style_mut().override_text_style = Some(TextStyle::Monospace); ui.style_mut().override_text_style = Some(TextStyle::Monospace);
ui.colored_label(appearance.replace_color, demangled.trim()); ui.colored_label(appearance.replace_color, decoded.trim());
}); });
if ui.button("Copy").clicked() { if ui.button("Copy").clicked() {
ui.output_mut(|output| output.copied_text = demangled); ui.output_mut(|output| output.copied_text = decoded);
} }
} else { } else {
ui.scope(|ui| { ui.scope(|ui| {