Skip to main content

DetectorRegistry

Struct DetectorRegistry 

Source
pub struct DetectorRegistry { /* private fields */ }
Expand description

Registry of registered Detectors. Use DetectorRegistry::with_builtins for the default set, or DetectorRegistry::empty to build from scratch.

Implementations§

Source§

impl DetectorRegistry

Source

pub fn empty() -> Self

New registry with no detectors. Use add to populate.

Source

pub fn with_builtins() -> Self

New registry preloaded with every detector this crate ships.

Source

pub fn add(&mut self, d: impl Detector + 'static) -> &mut Self

Append a detector.

Source

pub fn remove(&mut self, name: &str) -> usize

Remove every detector whose name() equals name. Returns the number of detectors removed.

Source

pub fn names(&self) -> Vec<&str>

List the names of registered detectors, in registration order.

Source

pub fn project_kinds(&self) -> Vec<KindId>

Collect the project KindIds advertised by registered detectors. Returns deduplicated set in registration order. Detectors that don’t advertise a kind (workspace-only or dynamic) are skipped.

Source

pub fn workspace_kinds(&self) -> Vec<WorkspaceKindId>

Collect the WorkspaceKindIds advertised by registered detectors.

Source

pub fn detect(&self, dir: &Path) -> Vec<DetectorHit>

Run every detector against dir and collect the hits.

Per-facet disambiguation rules:

  • Project facet: at most ONE project hit per directory wins — the highest-priority detector across ALL project kinds. Two detectors firing for the same dir (e.g. NodeDetector + BunDetector when both package.json and bun.lock are present) collapse to the higher-priority one (Bun=80 > Node=50).
  • Workspace facet: multiple workspace kinds CAN coexist at the same root (Cargo + Npm in a Tauri-style repo). Within the same WorkspaceKindId, the higher-priority detector wins.

A DetectorHit::Both competes on both facets simultaneously.

Trait Implementations§

Source§

impl Default for DetectorRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.