From fcc41037ee82cb5b196931ca2629bff871a325ee Mon Sep 17 00:00:00 2001 From: sxyazi Date: Mon, 2 Mar 2026 09:44:55 +0800 Subject: [PATCH] .. --- Cargo.lock | 16 ++++++---------- Cargo.toml | 2 +- yazi-codegen/src/lib.rs | 26 +++++++++++++++++--------- yazi-config/src/lib.rs | 10 +--------- yazi-plugin/preset/plugins/extract.lua | 10 +++++----- 5 files changed, 30 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d07fc345..940ce5c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2319,11 +2319,10 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ - "bitflags 2.11.0", "libc", ] @@ -3321,12 +3320,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits", -] +checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" [[package]] name = "qoi" @@ -3746,9 +3742,9 @@ dependencies = [ [[package]] name = "russh" -version = "0.57.0" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fe22d10a0e39c1134a971d5b8db8a40357b48ef22d81fa8d6eac22202dd782" +checksum = "afe62631a04a1f4d71a14b99505483b95ff97c503b67d876c042fce659186956" dependencies = [ "aes", "bitflags 2.11.0", diff --git a/Cargo.toml b/Cargo.toml index e66ec0fe..0851f7f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,7 +52,7 @@ percent-encoding = "2.3.2" rand = { version = "0.9.2", default-features = false, features = [ "os_rng", "small_rng", "std" ] } ratatui = { version = "0.30.0", features = [ "serde", "unstable-rendered-line-info", "unstable-widget-ref" ] } regex = "1.12.3" -russh = { version = "0.57.0", default-features = false, features = [ "ring", "rsa" ] } +russh = { version = "0.57.1", default-features = false, features = [ "ring", "rsa" ] } scopeguard = "1.2.0" serde = { version = "1.0.228", features = [ "derive" ] } serde_json = "1.0.149" diff --git a/yazi-codegen/src/lib.rs b/yazi-codegen/src/lib.rs index 86dff6a0..47d9b99d 100644 --- a/yazi-codegen/src/lib.rs +++ b/yazi-codegen/src/lib.rs @@ -9,7 +9,7 @@ pub fn deserialize_over(input: TokenStream) -> TokenStream { quote! { impl #ident { pub(crate) fn deserialize_over(self, input: &str) -> Result { - crate::error_with_input(self.deserialize_over_with(crate::parse_recoverable(input)?), input) + crate::error_with_input(self.deserialize_over_with(toml::de::DeTable::parse(input)?), input) } } } @@ -31,12 +31,15 @@ pub fn deserialize_over1(input: TokenStream) -> TokenStream { assignments.push(quote! { if let Some(value) = table.remove(#field_name) { + if !matches!(value.get_ref(), toml::de::DeValue::Table(_)) { + _ = toml::Table::deserialize(value.into_deserializer())?; + return Err(serde::de::Error::custom(format!("expected top-level `{}` to be a TOML table", #field_name))); + } + let span = value.span(); - let table = match value.into_inner() { - toml::de::DeValue::Table(table) => table, - _ => return Err(serde::de::Error::custom(format!("expected top-level `{}` to be a TOML table", #field_name))), - }; - self.#field_ident = self.#field_ident.deserialize_over_with(toml::Spanned::new(span, table))?; + if let toml::de::DeValue::Table(table) = value.into_inner() { + self.#field_ident = self.#field_ident.deserialize_over_with(toml::Spanned::new(span, table))?; + } } }); } @@ -52,8 +55,11 @@ pub fn deserialize_over1(input: TokenStream) -> TokenStream { impl #ident { #[inline] pub(crate) fn deserialize_over_with<'de>(mut self, table: toml::Spanned>) -> Result { + use serde::{Deserialize, de::IntoDeserializer}; + let mut table = table.into_inner(); #(#assignments)* + Ok(self) } } @@ -71,13 +77,12 @@ pub fn deserialize_over2(input: TokenStream) -> TokenStream { let mut assignments = Vec::with_capacity(fields.named.len()); for field in fields.named { - let (ty, field_ident) = (field.ty, field.ident); + let field_ident = field.ident; let field_name = field_ident.as_ref().unwrap().to_string(); assignments.push(quote! { if let Some(value) = table.remove(#field_name) { - let de = serde::de::IntoDeserializer::into_deserializer(value); - self.#field_ident = <#ty as serde::Deserialize>::deserialize(de)?; + self.#field_ident = <_>::deserialize(value.into_deserializer())?; } }); } @@ -93,8 +98,11 @@ pub fn deserialize_over2(input: TokenStream) -> TokenStream { impl #ident { #[inline] pub(crate) fn deserialize_over_with<'de>(mut self, table: toml::Spanned>) -> Result { + use serde::{Deserialize, de::IntoDeserializer}; + let mut table = table.into_inner(); #(#assignments)* + Ok(self) } } diff --git a/yazi-config/src/lib.rs b/yazi-config/src/lib.rs index 2101d911..572ed851 100644 --- a/yazi-config/src/lib.rs +++ b/yazi-config/src/lib.rs @@ -4,7 +4,6 @@ yazi_macro::mod_flat!(icon layout pattern platform preset priority style utils y use std::io::{Read, Write}; -use toml::{Spanned, de::DeTable}; use yazi_shared::{RoCell, SyncCell}; use yazi_tty::TTY; @@ -48,7 +47,7 @@ fn try_init_flavor(light: bool, merge: bool) -> anyhow::Result<()> { if merge { let theme_str = theme::Theme::read()?; - let theme = parse_recoverable(&theme_str)?; + let theme = toml::de::DeTable::parse(&theme_str)?; let flavor_str = theme::Flavor::from_theme(&theme, &theme_str)?.read(light)?; @@ -82,13 +81,6 @@ fn wait_for_key(e: anyhow::Error) -> anyhow::Result<()> { Ok(()) } -pub(crate) fn parse_recoverable<'a>( - input: &'a str, -) -> Result>, toml::de::Error> { - let (table, errors) = DeTable::parse_recoverable(input); - if let Some(err) = errors.into_iter().next() { Err(err) } else { Ok(table) } -} - pub(crate) fn error_with_input( result: Result, input: &str, diff --git a/yazi-plugin/preset/plugins/extract.lua b/yazi-plugin/preset/plugins/extract.lua index fc03db2b..c7f7b9cd 100644 --- a/yazi-plugin/preset/plugins/extract.lua +++ b/yazi-plugin/preset/plugins/extract.lua @@ -80,9 +80,9 @@ function M:tidy(from, to, tmp) end local only = #outs == 1 and outs[1] - if only and not only.cha.is_dir and require("archive").is_tar(outs[1].url) then - self:entry { args = { tostring(outs[1].url), tostring(to) } } - fs.remove("file", outs[1].url) + if only and not only.cha.is_dir and require("archive").is_tar(only.url) then + self:entry { args = { tostring(only.url), tostring(to) } } + fs.remove("file", only.url) fs.remove("dir", tmp) return end @@ -93,8 +93,8 @@ function M:tidy(from, to, tmp) fail("Failed to determine a target for '%s'", from) end - if only and not fs.rename(outs[1].url, target) then - fail('Failed to move "%s" to "%s"', outs[1].url, target) + if only and not fs.rename(only.url, target) then + fail('Failed to move "%s" to "%s"', only.url, target) elseif not only and not fs.rename(tmp, target) then fail('Failed to move "%s" to "%s"', tmp, target) end