Skip to content

Commit ab2f5bb

Browse files
KonghaYaodeepseek-v4-pro
andcommitted
fix: box large PanelState variants to resolve clippy::large_enum_variant
Box LoginPanel, ConfigPanel, ThreadBrowser, McpPanel to reduce enum size from 3792 bytes to 720 bytes (largest variant now). Update as_any_ref/as_any_mut to use .as_ref()/.as_mut() for all boxed variants, matching existing Plugin pattern. Fix all construction sites across 8 files. Co-Authored-By: deepseek-v4-pro <deepseek-ai@claude-code-best.win>
1 parent 793b0f3 commit ab2f5bb

9 files changed

Lines changed: 37 additions & 37 deletions

File tree

peri-tui/src/app/mcp_panel/mcp_panel_test.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939
make_server_info("c", ClientStatus::Connected),
4040
];
4141
app.global_panels
42-
.open(crate::app::panel_manager::PanelState::Mcp(McpPanel::new(
42+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(McpPanel::new(
4343
servers,
44-
)));
44+
))));
4545

4646
for _ in 0..5 {
4747
app.mcp_panel_move_up();
@@ -58,9 +58,9 @@
5858
async fn test_mcp_panel_close() {
5959
let (mut app, _handle) = crate::app::App::new_headless(80, 24).await;
6060
app.global_panels
61-
.open(crate::app::panel_manager::PanelState::Mcp(McpPanel::new(
61+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(McpPanel::new(
6262
vec![],
63-
)));
63+
))));
6464
assert!(app.global_panels.is_active(crate::app::PanelKind::Mcp));
6565
app.mcp_panel_close();
6666
assert!(!app.global_panels.is_active(crate::app::PanelKind::Mcp));
@@ -71,9 +71,9 @@
7171
let (mut app, _handle) = crate::app::App::new_headless(80, 24).await;
7272
let servers = vec![make_server_info("test-srv", ClientStatus::Connected)];
7373
app.global_panels
74-
.open(crate::app::panel_manager::PanelState::Mcp(McpPanel::new(
74+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(McpPanel::new(
7575
servers,
76-
)));
76+
))));
7777

7878
app.mcp_panel_request_delete();
7979
assert_eq!(
@@ -96,9 +96,9 @@
9696
let mut srv = make_server_info("http-srv", ClientStatus::Connected);
9797
srv.transport_type = "http".to_string();
9898
app.global_panels
99-
.open(crate::app::panel_manager::PanelState::Mcp(McpPanel::new(
99+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(McpPanel::new(
100100
vec![srv],
101-
)));
101+
))));
102102

103103
app.mcp_panel_enter();
104104
match &app.global_panels.get::<McpPanel>().unwrap().view {
@@ -120,9 +120,9 @@
120120
make_server_info("b", ClientStatus::Connected),
121121
];
122122
app.global_panels
123-
.open(crate::app::panel_manager::PanelState::Mcp(McpPanel::new(
123+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(McpPanel::new(
124124
servers,
125-
)));
125+
))));
126126
app.global_panels
127127
.get_mut::<McpPanel>()
128128
.unwrap()

peri-tui/src/app/panel_config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ impl App {
88
.peri_config
99
.get_or_insert_with(PeriConfig::default);
1010
let panel = config_panel::ConfigPanel::from_config(cfg);
11-
self.open_panel(PanelState::Config(panel));
11+
self.open_panel(PanelState::Config(Box::new(panel)));
1212
}
1313

1414
/// 关闭 /config 面板

peri-tui/src/app/panel_login.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ impl App {
88
.peri_config
99
.get_or_insert_with(PeriConfig::default);
1010
let panel = login_panel::LoginPanel::from_config(cfg);
11-
self.open_panel(PanelState::Login(panel));
11+
self.open_panel(PanelState::Login(Box::new(panel)));
1212
}
1313

1414
/// 关闭 /login 面板(不保存)

peri-tui/src/app/panel_manager.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,12 @@ pub enum EventResult {
136136
/// 穷举存储面板实例(编译时完整性保证)
137137
pub enum PanelState {
138138
Model(ModelPanel),
139-
Login(LoginPanel),
139+
Login(Box<LoginPanel>),
140140
Agent(AgentPanel),
141141
Hooks(HooksPanel),
142-
Config(ConfigPanel),
143-
ThreadBrowser(ThreadBrowser),
144-
Mcp(McpPanel),
142+
Config(Box<ConfigPanel>),
143+
ThreadBrowser(Box<ThreadBrowser>),
144+
Mcp(Box<McpPanel>),
145145
Plugin(Box<PluginPanel>),
146146
Cron(CronPanel),
147147
Status(StatusPanel),
@@ -174,12 +174,12 @@ impl PanelState {
174174
pub fn as_any_ref(&self) -> &dyn Any {
175175
match self {
176176
PanelState::Model(p) => p as &dyn Any,
177-
PanelState::Login(p) => p as &dyn Any,
177+
PanelState::Login(p) => p.as_ref() as &dyn Any,
178178
PanelState::Agent(p) => p as &dyn Any,
179179
PanelState::Hooks(p) => p as &dyn Any,
180-
PanelState::Config(p) => p as &dyn Any,
181-
PanelState::ThreadBrowser(p) => p as &dyn Any,
182-
PanelState::Mcp(p) => p as &dyn Any,
180+
PanelState::Config(p) => p.as_ref() as &dyn Any,
181+
PanelState::ThreadBrowser(p) => p.as_ref() as &dyn Any,
182+
PanelState::Mcp(p) => p.as_ref() as &dyn Any,
183183
PanelState::Plugin(p) => p.as_ref() as &dyn Any,
184184
PanelState::Cron(p) => p as &dyn Any,
185185
PanelState::Status(p) => p as &dyn Any,
@@ -193,12 +193,12 @@ impl PanelState {
193193
pub fn as_any_mut(&mut self) -> &mut dyn Any {
194194
match self {
195195
PanelState::Model(p) => p as &mut dyn Any,
196-
PanelState::Login(p) => p as &mut dyn Any,
196+
PanelState::Login(p) => p.as_mut() as &mut dyn Any,
197197
PanelState::Agent(p) => p as &mut dyn Any,
198198
PanelState::Hooks(p) => p as &mut dyn Any,
199-
PanelState::Config(p) => p as &mut dyn Any,
200-
PanelState::ThreadBrowser(p) => p as &mut dyn Any,
201-
PanelState::Mcp(p) => p as &mut dyn Any,
199+
PanelState::Config(p) => p.as_mut() as &mut dyn Any,
200+
PanelState::ThreadBrowser(p) => p.as_mut() as &mut dyn Any,
201+
PanelState::Mcp(p) => p.as_mut() as &mut dyn Any,
202202
PanelState::Plugin(p) => p.as_mut() as &mut dyn Any,
203203
PanelState::Cron(p) => p as &mut dyn Any,
204204
PanelState::Status(p) => p as &mut dyn Any,

peri-tui/src/app/panel_plugin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl App {
2222
return;
2323
}
2424
let panel = McpPanel::new(infos);
25-
self.open_panel(PanelState::Mcp(panel));
25+
self.open_panel(PanelState::Mcp(Box::new(panel)));
2626
}
2727

2828
/// 打开 Cron 面板

peri-tui/src/app/thread_ops.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ impl App {
330330
.filter(|s| !s.is_empty());
331331

332332
let browser = ThreadBrowser::new(filtered, self.services.thread_store.clone(), branch);
333-
self.open_panel(PanelState::ThreadBrowser(browser));
333+
self.open_panel(PanelState::ThreadBrowser(Box::new(browser)));
334334
}
335335
}
336336

peri-tui/src/ui/headless_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,9 +2021,9 @@ async fn test_login_select_provider_shows_feedback() {
20212021
};
20222022
app.services.peri_config = Some(cfg);
20232023
app.session_mgr.current_mut().session_panels.open(
2024-
crate::app::panel_manager::PanelState::Login(LoginPanel::from_config(
2024+
crate::app::panel_manager::PanelState::Login(Box::new(LoginPanel::from_config(
20252025
app.services.peri_config.as_ref().unwrap(),
2026-
)),
2026+
))),
20272027
);
20282028
// 光标移到第二个 Provider
20292029
app.session_mgr

peri-tui/src/ui/main_ui/panels/login_test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
panel.browse_list.set_items(vec![(); 1]);
2828
app.session_mgr.current_mut()
2929
.session_panels
30-
.open(crate::app::panel_manager::PanelState::Login(panel.clone()));
30+
.open(crate::app::panel_manager::PanelState::Login(Box::new(panel.clone())));
3131
app.session_mgr.current_mut()
3232
.session_panels
33-
.open(crate::app::panel_manager::PanelState::Login(panel));
33+
.open(crate::app::panel_manager::PanelState::Login(Box::new(panel)));
3434
handle
3535
.terminal
3636
.draw(|f| crate::ui::main_ui::render(f, &mut app))
@@ -71,10 +71,10 @@
7171
};
7272
app.session_mgr.current_mut()
7373
.session_panels
74-
.open(crate::app::panel_manager::PanelState::Login(panel.clone()));
74+
.open(crate::app::panel_manager::PanelState::Login(Box::new(panel.clone())));
7575
app.session_mgr.current_mut()
7676
.session_panels
77-
.open(crate::app::panel_manager::PanelState::Login(panel));
77+
.open(crate::app::panel_manager::PanelState::Login(Box::new(panel)));
7878
handle
7979
.terminal
8080
.draw(|f| crate::ui::main_ui::render(f, &mut app))

peri-tui/src/ui/main_ui/panels/mcp_test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
let (mut app, mut handle) = App::new_headless(120, 30).await;
1919
let panel = McpPanel::new(servers);
2020
app.global_panels
21-
.open(crate::app::panel_manager::PanelState::Mcp(panel));
21+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(panel)));
2222
handle
2323
.terminal
2424
.draw(|f| crate::ui::main_ui::render(f, &mut app))
@@ -53,7 +53,7 @@
5353
srv.url = Some("https://example.com/mcp".to_string());
5454
let panel = McpPanel::new(vec![srv]);
5555
app.global_panels
56-
.open(crate::app::panel_manager::PanelState::Mcp(panel));
56+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(panel)));
5757
app.mcp_panel_enter();
5858

5959
match &app.global_panels.get::<McpPanel>().unwrap().view {
@@ -103,7 +103,7 @@
103103

104104
let panel = McpPanel::new(vec![plugin_srv]);
105105
app.global_panels
106-
.open(crate::app::panel_manager::PanelState::Mcp(panel));
106+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(panel)));
107107

108108
// Enter detail view
109109
app.mcp_panel_enter();
@@ -155,7 +155,7 @@
155155

156156
let panel = McpPanel::new(vec![srv_a, srv_b]);
157157
app.global_panels
158-
.open(crate::app::panel_manager::PanelState::Mcp(panel.clone()));
158+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(panel.clone())));
159159

160160
// 选择第二个 server 并进入详情
161161
app.mcp_panel_move_down();
@@ -198,7 +198,7 @@
198198

199199
let panel = McpPanel::new(vec![connected_srv, uninit_srv]);
200200
app.global_panels
201-
.open(crate::app::panel_manager::PanelState::Mcp(panel.clone()));
201+
.open(crate::app::panel_manager::PanelState::Mcp(Box::new(panel.clone())));
202202

203203
// 排序后 "new-server" < "old-server"(字母序),uninit 在位置 0(默认 cursor=0)
204204
app.mcp_panel_enter();

0 commit comments

Comments
 (0)