chore: documentation added and adapted to RuDS

This commit is contained in:
2026-07-20 13:02:34 +02:00
parent c82b790b82
commit 7887d02e0b
15 changed files with 507 additions and 20 deletions

View File

@@ -969,6 +969,8 @@ pub struct BdsApp {
duplicates_state: DuplicatesState,
guide_documentation: DocumentationState,
api_documentation: DocumentationState,
cli_documentation: DocumentationState,
mcp_documentation: DocumentationState,
metadata_diff_state: MetadataDiffState,
menu_editor_state: MenuEditorState,
translation_validation_state: crate::views::translation_validation::TranslationValidationState,
@@ -1144,6 +1146,8 @@ impl BdsApp {
duplicates_state: DuplicatesState::default(),
guide_documentation: DocumentationState::new(DocumentationKind::Guide),
api_documentation: DocumentationState::new(DocumentationKind::Api),
cli_documentation: DocumentationState::new(DocumentationKind::Cli),
mcp_documentation: DocumentationState::new(DocumentationKind::Mcp),
metadata_diff_state: MetadataDiffState::default(),
menu_editor_state: MenuEditorState::default(),
translation_validation_state: Default::default(),
@@ -1232,6 +1236,8 @@ impl BdsApp {
duplicates_state: DuplicatesState::default(),
guide_documentation: DocumentationState::new(DocumentationKind::Guide),
api_documentation: DocumentationState::new(DocumentationKind::Api),
cli_documentation: DocumentationState::new(DocumentationKind::Cli),
mcp_documentation: DocumentationState::new(DocumentationKind::Mcp),
metadata_diff_state: MetadataDiffState::default(),
menu_editor_state: MenuEditorState::default(),
translation_validation_state: Default::default(),
@@ -3127,6 +3133,8 @@ impl BdsApp {
match kind {
DocumentationKind::Guide => &self.guide_documentation,
DocumentationKind::Api => &self.api_documentation,
DocumentationKind::Cli => &self.cli_documentation,
DocumentationKind::Mcp => &self.mcp_documentation,
}
}
@@ -3134,6 +3142,8 @@ impl BdsApp {
match kind {
DocumentationKind::Guide => &mut self.guide_documentation,
DocumentationKind::Api => &mut self.api_documentation,
DocumentationKind::Cli => &mut self.cli_documentation,
DocumentationKind::Mcp => &mut self.mcp_documentation,
}
}
@@ -3144,6 +3154,8 @@ impl BdsApp {
tokio::task::spawn_blocking(move || match kind {
DocumentationKind::Guide => crate::views::documentation::load_user_guide(),
DocumentationKind::Api => crate::views::documentation::load_api_document(),
DocumentationKind::Cli => crate::views::documentation::load_cli_guide(),
DocumentationKind::Mcp => crate::views::documentation::load_mcp_guide(),
})
.await
.unwrap_or_else(|error| DocumentLoad::Malformed {
@@ -3160,6 +3172,8 @@ impl BdsApp {
for (tab_type, kind) in [
(TabType::Documentation, DocumentationKind::Guide),
(TabType::ApiDocumentation, DocumentationKind::Api),
(TabType::CliDocumentation, DocumentationKind::Cli),
(TabType::McpDocumentation, DocumentationKind::Mcp),
] {
if !self.tabs.iter().any(|tab| tab.tab_type == tab_type) {
continue;
@@ -3413,6 +3427,8 @@ impl BdsApp {
&self.duplicates_state,
&self.guide_documentation,
&self.api_documentation,
&self.cli_documentation,
&self.mcp_documentation,
&self.metadata_diff_state,
&self.menu_editor_state,
&self.translation_validation_state,
@@ -4349,6 +4365,14 @@ impl BdsApp {
self.open_singleton_tab(TabType::ApiDocumentation, "tabBar.apiDocumentation");
self.start_documentation_load(DocumentationKind::Api)
}
MenuAction::OpenCliDocumentation => {
self.open_singleton_tab(TabType::CliDocumentation, "tabBar.cliDocumentation");
self.start_documentation_load(DocumentationKind::Cli)
}
MenuAction::OpenMcpDocumentation => {
self.open_singleton_tab(TabType::McpDocumentation, "tabBar.mcpDocumentation");
self.start_documentation_load(DocumentationKind::Mcp)
}
MenuAction::ViewOnGitHub => {
let _ = open::that("https://github.com/nickarumern/bds");
Task::none()
@@ -9164,6 +9188,34 @@ mod tests {
);
}
#[test]
fn help_menu_opens_cli_and_mcp_documentation_tabs() {
let (db, project, temp) = setup();
let mut app = BdsApp::new_for_tests(db, project, temp.path().to_path_buf());
let _ = app.dispatch_menu_action(MenuAction::OpenCliDocumentation);
assert!(
app.tabs
.iter()
.any(|tab| tab.tab_type == TabType::CliDocumentation)
);
assert_eq!(
app.cli_documentation.status,
crate::views::documentation::DocumentStatus::Loading
);
let _ = app.dispatch_menu_action(MenuAction::OpenMcpDocumentation);
assert!(
app.tabs
.iter()
.any(|tab| tab.tab_type == TabType::McpDocumentation)
);
assert_eq!(
app.mcp_documentation.status,
crate::views::documentation::DocumentStatus::Loading
);
}
#[test]
fn project_switch_keeps_global_documentation_loaded() {
let (db, project, temp) = setup();