fix(plugins): isole les menus plugin et durcit hello-plugin SDK contre la rechute #120
Requalification Architect du 2026-08-01: le crash INTERFACE INTERROMPUE au chargement d'un plugin (menu + item) remonte via ProjectsView -> usePluginMenus -> MenuBar jusqu'à RootErrorBoundary, quel que soit le plugin (ancien ou reconstruit via SDK). - usePluginMenus isole la résolution/conversion des contributions plugin : toute erreur retombe sur [] au lieu de propager. - ProjectsView sépare les menus natifs des menus enrichis par plugin et rend MenuBar derrière une error boundary locale (fallback menus natifs seuls). - hello-plugin (SDK) et les tests d'installation associés durcis en cohérence. Bookkeeping ticket #120 uniquement (issue.md, carnet.md) ; les fichiers counter.json/index.json et le dossier tickets/122/ restent hors commit car une collision de numérotation #122 existe entre cette base et feature/ticket120-hello-plugin-install-path-audit (deux tickets différents revendiquent #122) — à arbitrer avant de committer le bookkeeping global. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@ -123,6 +123,7 @@ async fn installs_sdk_hello_plugin_and_loads_runtime_catalog() {
|
||||
assert_eq!(result.plugin.display_name, "Hello Plugin");
|
||||
assert_eq!(result.review.contribution_summary.top_level_menus, 1);
|
||||
assert_eq!(result.review.contribution_summary.menu_items, 1);
|
||||
assert_eq!(result.review.contribution_summary.layouts, 1);
|
||||
assert!(app_data
|
||||
.join("plugins/installed/com.example.hello-plugin/dist/index.js")
|
||||
.is_file());
|
||||
@ -139,10 +140,16 @@ async fn installs_sdk_hello_plugin_and_loads_runtime_catalog() {
|
||||
.starts_with("idea-plugin://com.example.hello-plugin/0.1.0/"));
|
||||
assert!(plugin.bundle_url.ends_with("/dist/index.js"));
|
||||
assert_eq!(plugin.contributes.menus[0].id, "hello-plugin.menu");
|
||||
assert_eq!(plugin.contributes.menus[0].label.as_str(), "Hello Plugin");
|
||||
assert_eq!(
|
||||
plugin.contributes.menu_items[0].command.as_str(),
|
||||
"hello-plugin.sayHello"
|
||||
"hello-plugin"
|
||||
);
|
||||
assert_eq!(
|
||||
plugin.contributes.layouts[0].layout_type.as_str(),
|
||||
"hello-plugin.hello-world"
|
||||
);
|
||||
assert_eq!(plugin.contributes.layouts[0].label.as_str(), "hello-world");
|
||||
|
||||
let _ = fs::remove_dir_all(app_data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user