component: Replace linkme with inventory (#30705)

This PR replaces the use of `linkme` with `inventory` for the component
preview registration.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-05-14 23:29:11 +02:00 committed by GitHub
parent 87cb498a41
commit 607bfd3b1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 28 additions and 27 deletions

View file

@ -14,7 +14,7 @@ path = "src/component.rs"
[dependencies]
collections.workspace = true
gpui.workspace = true
linkme.workspace = true
inventory.workspace = true
parking_lot.workspace = true
strum.workspace = true
theme.workspace = true

View file

@ -9,13 +9,12 @@
mod component_layout;
pub use component_layout::*;
use std::sync::LazyLock;
pub use component_layout::*;
use collections::HashMap;
use gpui::{AnyElement, App, SharedString, Window};
use linkme::distributed_slice;
use parking_lot::RwLock;
use strum::{Display, EnumString};
@ -24,12 +23,27 @@ pub fn components() -> ComponentRegistry {
}
pub fn init() {
let component_fns: Vec<_> = __ALL_COMPONENTS.iter().cloned().collect();
for f in component_fns {
f();
for f in inventory::iter::<ComponentFn>() {
(f.0)();
}
}
pub struct ComponentFn(fn());
impl ComponentFn {
pub const fn new(f: fn()) -> Self {
Self(f)
}
}
inventory::collect!(ComponentFn);
/// Private internals for macros.
#[doc(hidden)]
pub mod __private {
pub use inventory;
}
pub fn register_component<T: Component>() {
let id = T::id();
let metadata = ComponentMetadata {
@ -46,9 +60,6 @@ pub fn register_component<T: Component>() {
data.components.insert(id, metadata);
}
#[distributed_slice]
pub static __ALL_COMPONENTS: [fn()] = [..];
pub static COMPONENT_DATA: LazyLock<RwLock<ComponentRegistry>> =
LazyLock::new(|| RwLock::new(ComponentRegistry::default()));