Skip to content

Commit f9824a7

Browse files
author
FreeSynergy
committed
fix: resolve all clippy lints in fs-settings
- Remove 44 clone_on_copy instances (Copy types: Signal<T>, closures) - Remove redundant let-rebindings introduced by clone fix - Replace StoreClient/Manifest with StoreReader::official() + local LocaleEntry - Add missing ConfigFieldKind arms (Url/LanguageCode/SemVer/Tag) - shortcuts.rs: use contains_key instead of get().is_none()
1 parent 0d30b17 commit f9824a7

7 files changed

Lines changed: 62 additions & 67 deletions

File tree

crates/fs-settings/src/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ pub fn SettingsApp(props: SettingsAppProps) -> Element {
196196
if has_packages {
197197
PackageSettingsView {
198198
packages: props.packages.clone(),
199-
on_save: props.on_package_save.clone()
199+
on_save: props.on_package_save
200200
.unwrap_or_else(|| EventHandler::new(|_| {})),
201201
}
202202
}

crates/fs-settings/src/appearance.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ pub fn AppearanceSettings() -> Element {
130130
"2px solid transparent".to_string()
131131
};
132132
let id_owned = id.to_string();
133-
let mut set_theme = set_theme.clone();
133+
let mut set_theme = set_theme;
134134
rsx! {
135135
button {
136136
key: "{id}",
@@ -222,7 +222,7 @@ pub fn AppearanceSettings() -> Element {
222222
let pkg_name = pkg.name.clone();
223223
// Store themes ship a theme.css — read it on apply.
224224
let css_path = pkg.file_path.clone();
225-
let mut set_theme = set_theme.clone();
225+
let mut set_theme = set_theme;
226226
rsx! {
227227
div {
228228
key: "{pkg_id}",

crates/fs-settings/src/language.rs

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,29 @@ use fs_manager_language::{
1212
DateFormat, FormatVariant, HasFlag, Language, LanguageManager, LocaleSettings, NumberFormat,
1313
TimeFormat,
1414
};
15-
use fs_store::{LocaleEntry, Manifest, StoreClient};
15+
use fs_store::StoreReader;
1616
use serde::Deserialize;
1717

1818
use crate::translation_editor::TranslationEditor;
1919

2020
// ── Store catalog helper ─────────────────────────────────────────────────────
2121

22-
#[derive(Deserialize)]
23-
struct MinPkg {
24-
id: String,
25-
name: String,
26-
version: String,
27-
category: String,
22+
/// A single locale entry from the Store's locale catalog.
23+
#[derive(Debug, Clone, Deserialize)]
24+
pub struct LocaleEntry {
25+
pub code: String,
26+
pub name: String,
27+
pub version: String,
28+
pub completeness: u8,
29+
pub direction: String,
30+
pub path: Option<String>,
2831
}
2932

30-
impl Manifest for MinPkg {
31-
fn id(&self) -> &str {
32-
&self.id
33-
}
34-
fn name(&self) -> &str {
35-
&self.name
36-
}
37-
fn version(&self) -> &str {
38-
&self.version
39-
}
40-
fn category(&self) -> &str {
41-
&self.category
42-
}
33+
/// TOML structure of the locale catalog file in the Store.
34+
#[derive(Deserialize)]
35+
struct LocaleCatalog {
36+
#[serde(default)]
37+
locales: Vec<LocaleEntry>,
4338
}
4439

4540
// ── Public types ─────────────────────────────────────────────────────────────
@@ -167,7 +162,7 @@ async fn install_language_pack(locale: LocaleInfo) -> Result<(), String> {
167162
.unwrap_or_else(|| format!("Node/i18n/{}", locale.code));
168163
let url = format!("{base}/ui.toml");
169164

170-
let file_path = match StoreClient::node_store().fetch_raw(&url).await {
165+
let file_path = match StoreReader::official().fetch_raw(&url).await {
171166
Ok(content) => {
172167
let dest = fs_dir.join("i18n").join(&locale.code).join("ui.toml");
173168
if let Some(p) = dest.parent() {
@@ -266,8 +261,8 @@ pub fn LanguageSettings() -> Element {
266261
},
267262
// Right-click removes a non-builtin language.
268263
on_context_menu: {
269-
let mut installed = installed.clone();
270-
let mut panel_sig = panel.clone();
264+
let mut installed = installed;
265+
let mut panel_sig = panel;
271266
move |id: String| {
272267
let is_builtin = BUILTIN_LANGUAGES.iter().any(|(c, _)| *c == id.as_str());
273268
if !is_builtin {
@@ -297,7 +292,7 @@ pub fn LanguageSettings() -> Element {
297292
LanguageDetailPane {
298293
entry: e,
299294
on_edit: {
300-
let mut el = editor_lang.clone();
295+
let mut el = editor_lang;
301296
move |pair| el.set(Some(pair))
302297
},
303298
}
@@ -312,7 +307,7 @@ pub fn LanguageSettings() -> Element {
312307
InstallPane {
313308
installed_ids: installed.read().iter().map(|e| e.code.clone()).collect(),
314309
on_installed: {
315-
let mut installed = installed.clone();
310+
let mut installed = installed;
316311
move |entry: LangEntry| installed.write().push(entry)
317312
},
318313
}
@@ -391,7 +386,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
391386
color: white; border: none; \
392387
border-radius: var(--fs-radius-md); cursor: pointer;",
393388
onclick: {
394-
let mut inv = inv.clone();
389+
let mut inv = inv;
395390
move |_| {
396391
let code = selected.read().clone();
397392
// Load user-installed pack from disk before switching.
@@ -456,7 +451,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
456451
value: inv.read().fallback_language.clone()
457452
.unwrap_or_else(|| effective.fallback_language.clone()),
458453
onchange: {
459-
let mut inv = inv.clone();
454+
let mut inv = inv;
460455
move |e: Event<FormData>| {
461456
inv.write().fallback_language = Some(e.value());
462457
let _ = inv.read().save_inventory();
@@ -493,7 +488,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
493488
if is_active { "white" } else { "var(--fs-color-text-primary)" },
494489
),
495490
onclick: {
496-
let mut inv = inv.clone();
491+
let mut inv = inv;
497492
let f2 = f.clone();
498493
move |_| {
499494
inv.write().date_format = Some(f2.clone());
@@ -537,7 +532,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
537532
if is_active { "white" } else { "var(--fs-color-text-primary)" },
538533
),
539534
onclick: {
540-
let mut inv = inv.clone();
535+
let mut inv = inv;
541536
let f2 = f.clone();
542537
move |_| {
543538
inv.write().time_format = Some(f2.clone());
@@ -578,7 +573,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
578573
if is_active { "white" } else { "var(--fs-color-text-primary)" },
579574
),
580575
onclick: {
581-
let mut inv = inv.clone();
576+
let mut inv = inv;
582577
let f2 = f.clone();
583578
move |_| {
584579
inv.write().number_format = Some(f2.clone());
@@ -607,7 +602,7 @@ fn DefaultPane(installed: Vec<LangEntry>) -> Element {
607602
checked: inv.read().auto_update_packs
608603
.unwrap_or(effective.auto_update_packs),
609604
onchange: {
610-
let mut inv = inv.clone();
605+
let mut inv = inv;
611606
move |e: Event<FormData>| {
612607
inv.write().auto_update_packs = Some(e.value() == "true");
613608
let _ = inv.read().save_inventory();
@@ -768,7 +763,7 @@ fn LangEditPane(entry: LangEntry, on_edit: EventHandler<(String, String)>) -> El
768763
let contrib =
769764
use_signal(|| GitContributorCheck::cached().unwrap_or(ContributorStatus::Unknown));
770765
{
771-
let mut contrib = contrib.clone();
766+
let mut contrib = contrib;
772767
use_future(move || async move {
773768
if *contrib.read() == ContributorStatus::Unknown {
774769
contrib.set(GitContributorCheck::check_and_cache());
@@ -840,7 +835,7 @@ fn LangEditPane(entry: LangEntry, on_edit: EventHandler<(String, String)>) -> El
840835
border-radius: var(--fs-radius-sm); cursor: pointer; \
841836
color: var(--fs-color-text-muted); white-space: nowrap;",
842837
onclick: {
843-
let mut contrib = contrib.clone();
838+
let mut contrib = contrib;
844839
move |_| {
845840
GitContributorCheck::clear_cache();
846841
contrib.set(ContributorStatus::Unknown);
@@ -1024,12 +1019,11 @@ fn AvailableLanguages(
10241019
let busy: Signal<Option<String>> = use_signal(|| None);
10251020

10261021
{
1027-
let all_locales = all_locales.clone();
10281022
use_future(move || {
1029-
let mut all_locales = all_locales.clone();
1023+
let mut all_locales = all_locales;
10301024
async move {
1031-
match StoreClient::node_store()
1032-
.fetch_catalog::<MinPkg>("Node", false)
1025+
match StoreReader::official()
1026+
.fetch_toml::<LocaleCatalog>("Node/locale-catalog.toml")
10331027
.await
10341028
{
10351029
Ok(catalog) => {
@@ -1090,14 +1084,14 @@ fn AvailableLanguages(
10901084
locale: locale.clone(),
10911085
installing: busy.read().as_deref() == Some(locale.code.as_str()),
10921086
on_install: {
1093-
let mut busy = busy.clone();
1087+
let mut busy = busy;
10941088
move |l: LocaleInfo| {
10951089
let id = l.code.clone();
10961090
let name = l.name.clone();
10971091
busy.set(Some(id.clone()));
1098-
let mut busy = busy.clone();
1092+
let mut busy = busy;
10991093
let entry = LangEntry { code: id.clone(), name, builtin: false };
1100-
let cb = on_installed.clone();
1094+
let cb = on_installed;
11011095
spawn(async move {
11021096
match install_language_pack(l).await {
11031097
Ok(()) => cb.call(entry),

crates/fs-settings/src/package_settings.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ fn field_to_view(f: &ConfigField) -> SettingsFieldView {
9797
ConfigFieldKind::Port => (SettingsKindTag::Port, vec![]),
9898
ConfigFieldKind::Path => (SettingsKindTag::Path, vec![]),
9999
ConfigFieldKind::Textarea => (SettingsKindTag::Textarea, vec![]),
100+
// Typed-value kinds — rendered as text inputs until dedicated UI controls exist.
101+
ConfigFieldKind::Url | ConfigFieldKind::LanguageCode | ConfigFieldKind::SemVer => {
102+
(SettingsKindTag::Text, vec![])
103+
}
104+
ConfigFieldKind::Tag { .. } => (SettingsKindTag::Text, vec![]),
100105
};
101106

102107
let current_value = match &f.value {
@@ -252,7 +257,7 @@ pub fn PackageSettingsView(props: PackageSettingsViewProps) -> Element {
252257
if let Some(pkg) = selected {
253258
PackageSettingsPanel {
254259
pkg: pkg.clone(),
255-
on_save: props.on_save.clone(),
260+
on_save: props.on_save,
256261
}
257262
} else {
258263
div {
@@ -367,7 +372,7 @@ fn PackageSettingsPanel(props: PackageSettingsPanelProps) -> Element {
367372
key: "{field.key}",
368373
field: field.clone(),
369374
pkg_id: pkg.id.clone(),
370-
on_save: props.on_save.clone(),
375+
on_save: props.on_save,
371376
}
372377
}
373378
}

crates/fs-settings/src/service_roles.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ fn walkdir_toml(dir: &std::path::Path) -> Vec<PathBuf> {
250250
let path = e.path();
251251
if path.is_dir() {
252252
result.extend(walkdir_toml(&path));
253-
} else if path.extension().map_or(false, |ext| ext == "toml") {
253+
} else if path.extension().is_some_and(|ext| ext == "toml") {
254254
result.push(path);
255255
}
256256
}

crates/fs-settings/src/shortcuts.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ pub fn ShortcutsSettings() -> Element {
276276
let current = resolve_shortcut(action, &cfg)
277277
.map(|s| s.to_string())
278278
.unwrap_or_else(|| "—".to_string());
279-
let is_default = cfg.custom.get(action.id).is_none();
279+
let is_default = !cfg.custom.contains_key(action.id);
280280
let is_recording = recording_id.as_deref() == Some(action.id);
281281
let action_id = action.id.to_string();
282282
let action_id2 = action.id.to_string();
@@ -337,7 +337,7 @@ pub fn ShortcutsSettings() -> Element {
337337
}
338338
}
339339

340-
if *recording.read() != None {
340+
if (*recording.read()).is_some() {
341341
div {
342342
style: "position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); \
343343
background: var(--fs-bg-elevated); border: 1px solid var(--fs-primary); \

0 commit comments

Comments
 (0)