refactor(desktop): isolate settings page imports

This commit is contained in:
Kang
2026-07-28 17:36:19 +08:00
parent 1218ae1abe
commit bdb6cd9317
14 changed files with 113 additions and 40 deletions
@@ -1,5 +1,3 @@
use super::*;
mod models;
mod rules;
mod section;
@@ -1,4 +1,11 @@
use super::*;
use gpui::{
Context, FontWeight, IntoElement, KeyDownEvent, SharedString, div, prelude::*, px, rgb,
};
use crate::features::{NyaTermApp, TextInputSetup};
use crate::widgets::small_button;
use super::super::super::settings_switch;
impl NyaTermApp {
pub(super) fn ai_credential_rows(
@@ -1,5 +1,10 @@
use super::*;
use gpui::MouseButton;
use gpui::{Context, IntoElement, KeyDownEvent, MouseButton, div, prelude::*, px, rgb};
use crate::features::{NyaTermApp, TextInputSetup};
use crate::theme::ThemePalette;
use crate::widgets::small_button;
use super::super::settings_form_section;
mod credential_rows;
mod model_groups;
@@ -1,4 +1,13 @@
use super::*;
use gpui::{
AnyElement, Context, FontWeight, IntoElement, KeyDownEvent, SharedString, div, prelude::*, px,
rgb,
};
use nyaterm_core::truncate_preview;
use crate::features::{NyaTermApp, TextInputSetup};
use crate::widgets::small_button;
use super::super::super::settings_switch;
impl NyaTermApp {
pub(super) fn ai_model_groups(
@@ -1,6 +1,14 @@
use super::*;
use gpui::{
AnyElement, App, ClickEvent, Context, FontWeight, IntoElement, KeyDownEvent, SharedString,
Window, div, prelude::*, px, rgb,
};
use crate::features::{NyaTermApp, TextInputSetup};
use crate::models::{AiActionEditorField, AiActionListKind};
use crate::theme::ThemePalette;
use crate::widgets::small_button;
use super::super::{settings_form_row, settings_form_section, settings_switch};
impl NyaTermApp {
pub(in crate::features) fn ai_rules_settings_section(
@@ -1,6 +1,15 @@
use super::*;
use gpui::{
AnyElement, App, ClickEvent, Context, IntoElement, SharedString, Window, div, prelude::*, px,
rgb,
};
use nyaterm_core::RiskLevel;
use crate::features::{NyaTermApp, TextInputSetup};
use crate::models::AiInputField;
use crate::theme::ThemePalette;
use crate::widgets::small_button;
use super::super::{settings_form_row, settings_form_section, settings_switch};
impl NyaTermApp {
pub(in crate::features) fn ai_input(
@@ -1,20 +1,12 @@
use gpui::{
AnyElement, App, ClickEvent, Context, FontWeight, IntoElement, KeyDownEvent, SharedString,
Window, div, prelude::*, px, rgb, rgba, svg,
AnyElement, App, ClickEvent, Context, FontWeight, IntoElement, SharedString, Window, div,
prelude::*, px, rgb, rgba, svg,
};
use nyaterm_core::{CloudSyncSettings, RiskLevel};
use crate::models::{
CloudSyncConflictState, CloudSyncInputField, SettingsTab, SnapshotPasswordPromptKind,
SnapshotPasswordPromptState, TranslateInputField,
};
use crate::models::{SettingsTab, SnapshotPasswordPromptKind, SnapshotPasswordPromptState};
use crate::theme::ThemePalette;
use crate::widgets::{small_button, status_pill};
use super::super::{
ChromeTooltip, NyaTermApp, TextInputSetup, compact_id, configured_cloud_sync_provider,
format_history_timestamp_ms, secret_input_setup, truncate_preview,
};
use super::super::{ChromeTooltip, NyaTermApp};
mod ai;
mod security;
@@ -1,4 +1,12 @@
use super::*;
use gpui::{Context, FontWeight, IntoElement, SharedString, div, prelude::*, px, rgb};
use crate::features::{ChromeTooltip, NyaTermApp, TextInputSetup};
use crate::widgets::small_button;
use super::{
settings_choice_chip, settings_form_row, settings_form_section, settings_switch,
settings_switch_with_enabled,
};
impl NyaTermApp {
pub(in crate::features) fn security_settings_section(
@@ -1,7 +1,20 @@
use super::*;
use gpui::{
AnyElement, App, ClickEvent, Context, FontWeight, IntoElement, SharedString, Window, div,
prelude::*, px, rgb, rgba, svg,
};
use nyaterm_core::CloudSyncSettings;
use crate::features::{dialog_action_button, format_cloud_provider};
use crate::models::{SettingsTab, SnapshotPasswordPromptKind};
use crate::features::{
NyaTermApp, compact_id, configured_cloud_sync_provider, dialog_action_button,
format_cloud_provider, format_history_timestamp_ms, secret_input_setup,
};
use crate::models::{
CloudSyncConflictState, CloudSyncInputField, SettingsTab, SnapshotPasswordPromptKind,
};
use crate::theme::ThemePalette;
use crate::widgets::small_button;
use super::super::{settings_form_row, settings_form_section, settings_switch_with_enabled};
mod providers;
impl NyaTermApp {
@@ -1,4 +1,11 @@
use super::*;
use gpui::{AnyElement, Context, FontWeight, IntoElement, SharedString, div, prelude::*, px, rgb};
use nyaterm_core::truncate_preview;
use crate::features::NyaTermApp;
use crate::models::CloudSyncInputField;
use super::super::super::{settings_form_row, settings_switch_with_enabled};
use super::cloud_sync_action_button;
impl NyaTermApp {
pub(super) fn cloud_sync_webdav_provider_fields(
@@ -1,3 +1 @@
use super::*;
mod cloud_sync;
@@ -1,4 +1,10 @@
use super::*;
use gpui::{AnyElement, Context, FontWeight, IntoElement, div, prelude::*, px, rgb};
use crate::features::{NyaTermApp, TextInputSetup, secret_input_setup};
use crate::models::TranslateInputField;
use crate::widgets::{small_button, status_pill};
use super::{settings_choice_chip, settings_form_section};
impl NyaTermApp {
fn translation_input(
+11 -9
View File
@@ -12,7 +12,7 @@ Last updated from the working tree on 2026-07-28.
| `NyaTermApp` fields | 261 | Counted from `features/app_state/mod.rs`; down from 585, still transitional. |
| `impl NyaTermApp` blocks | 240 | Spread across 235 files under `crates/nyaterm-desktop/src`. |
| `#[path = "..."]` declarations in desktop | 0 | Cleared. Every directory is a real module; the boundary script fails on any new occurrence. |
| `use super::*` imports in desktop | 255 | Includes indented test-module imports; historical migration debt, do not add new occurrences. |
| `use super::*` imports in desktop | 244 | Includes indented test-module imports; historical migration debt, do not add new occurrences. |
| `features/prelude.rs` rough exported-token count | 221 | Still a broad shared prelude; two hundred twenty-four low-frequency transport/core/http/model/helper exports are now explicit imports. |
| Entity Store structs | 4 | `Runtime`, `WindowRuntime`, `StartupRestore`, `Overlay`. Each owns state the app does not. |
| Snapshot structs | 0 | Cleared. No store is a projection of `NyaTermApp` any more. |
@@ -418,13 +418,15 @@ these as staged extraction candidates, not as formatting-only refactor targets.
`pages/remote/mod.rs` as a pure module entry point. All 13 wildcard imports
were removed across roughly 3,800 lines, so the boundary script now governs
the complete `pages/remote` tree.
- The settings `transfer`, `terminal` and `workspace` subtrees no longer use
wildcard imports. Fourteen module boundaries across roughly 4,773 lines now
name their GPUI traits, settings form helpers, text-input setup, shortcut,
theme and transport model dependencies directly. Their `mod.rs` files are
module entry points rather than implicit child preludes, and `settings/mod.rs`
no longer carries the SFTP duplicate policy or tab-mouse models used only by
those children. The boundary script governs all three complete subtrees.
- The complete settings page tree no longer uses wildcard imports. Its AI,
security, translation, cloud-sync/backup, transfer, terminal and workspace
modules name their GPUI traits, settings form helpers, text-input setup,
theme, core and model dependencies directly. The nested AI and sync/backup
`mod.rs` files are pure module entry points, and `settings/mod.rs` no longer
carries child-only AI, translation, cloud-sync or widget imports. The
boundary script governs all 27 Rust modules under `pages/settings` at zero
`use super::*` imports. Cloud-sync provider fields, secret masking,
validation and request/storage behavior are unchanged.
- The quick-command import runtime no longer uses wildcard imports or flattened
child-module globs. Its dialog calls the source adapter directly; source
parsing depends directionally on JSON, merge and helper modules; merge names
@@ -1205,7 +1207,7 @@ Items 1, 3 and 4 are done. What follows is the honest remaining list.
cohesive, while still resolving each file's dependency set explicitly with
compiler guidance. Run formatting, boundary checks, compilation and tests
once for the completed batch rather than committing one file at a time.
3. Largely done. `NyaTermApp` is down from 585 fields to 284, across eight
3. Largely done. `NyaTermApp` is down from 585 fields to 261, across eight
feature-state structs. What is left is a long tail — the biggest remaining
domain is eighteen fields, and much of the rest is genuinely app-level
(stores, runtime, services, persisted collections). Group by cohesion where
+14 -3
View File
@@ -565,12 +565,25 @@ declare -A SUPER_BASELINE=(
[crates/nyaterm-desktop/src/features/pages/remote/docker_view.rs]=0
[crates/nyaterm-desktop/src/features/pages/remote/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/remote/stats_view.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/models/credential_rows.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/models/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/models/model_groups.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/rules.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/ai/section.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/security.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/sync_backup/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/sync_backup/cloud_sync/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/sync_backup/cloud_sync/providers.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/translation.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/transfer/advanced.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/transfer/editor.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/transfer/files.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/transfer/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/transfer/recording.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/terminal/general.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/terminal/helpers.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/terminal/keywords.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/terminal/mod.rs]=0
[crates/nyaterm-desktop/src/features/pages/settings/terminal/search.rs]=0
@@ -650,9 +663,7 @@ done < <(rg -n --path-separator / '^[[:space:]]*use super::\*;' \
crates/nyaterm-desktop/src/features/pages/tunnels \
crates/nyaterm-desktop/src/features/pages/transfers \
crates/nyaterm-desktop/src/features/pages/remote \
crates/nyaterm-desktop/src/features/pages/settings/transfer \
crates/nyaterm-desktop/src/features/pages/settings/terminal \
crates/nyaterm-desktop/src/features/pages/settings/workspace \
crates/nyaterm-desktop/src/features/pages/settings \
crates/nyaterm-desktop/src/features/shell/mod.rs \
crates/nyaterm-desktop/src/features/shell/activity_bar_runtime.rs \
crates/nyaterm-desktop/src/features/shell/appearance.rs \