mirror of https://github.com/encounter/objdiff.git
Merge branch 'main' into hotkeys
This commit is contained in:
commit
01a85248eb
File diff suppressed because it is too large
Load Diff
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -152,16 +152,14 @@ 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() {
|
w.error = Some(e);
|
||||||
w.error = Some(e);
|
|
||||||
}
|
|
||||||
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);
|
||||||
|
|
|
@ -218,8 +218,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()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,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);
|
||||||
|
@ -114,7 +114,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);
|
||||||
|
@ -127,8 +127,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()));
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,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)")
|
||||||
|
|
|
@ -640,7 +640,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);
|
||||||
|
@ -650,7 +650,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);
|
||||||
|
@ -663,8 +663,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()));
|
||||||
}
|
}
|
||||||
|
@ -683,7 +683,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)")
|
||||||
|
@ -707,7 +707,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")
|
||||||
|
@ -778,7 +778,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")
|
||||||
|
|
Loading…
Reference in New Issue