pub struct PluginRegistry { /* private fields */ }Expand description
A registry for managing both built-in and custom rules.
This registry reuses the static rule registry for built-in rules, avoiding duplication. Custom rules are stored separately and can override built-in rules with the same ID.
§Example
use cargo_perf::plugin::PluginRegistry;
let mut registry = PluginRegistry::new();
registry.add_builtin_rules();
registry.add_rule(Box::new(MyCustomRule));Implementations§
Source§impl PluginRegistry
impl PluginRegistry
Sourcepub fn add_builtin_rules(&mut self)
pub fn add_builtin_rules(&mut self)
Add all built-in rules to the registry.
This references the static rule registry rather than creating new instances, avoiding memory duplication.
Sourcepub fn add_rule(&mut self, rule: Box<dyn Rule>)
pub fn add_rule(&mut self, rule: Box<dyn Rule>)
Add a custom rule to the registry.
§Panics
Panics if a rule with the same ID already exists. Use try_add_rule for
a non-panicking version or add_or_replace_rule to replace existing rules.
Sourcepub fn try_add_rule(&mut self, rule: Box<dyn Rule>) -> Result<(), Box<dyn Rule>>
pub fn try_add_rule(&mut self, rule: Box<dyn Rule>) -> Result<(), Box<dyn Rule>>
Try to add a custom rule to the registry.
Returns an error if a rule with the same ID already exists in custom rules.
Note: This allows overriding built-in rules with custom implementations.
Use add_or_replace_rule to replace existing rules without error.
§Errors
Returns Err with the rejected rule if a custom rule with the same ID already exists.
Sourcepub fn add_or_replace_rule(&mut self, rule: Box<dyn Rule>)
pub fn add_or_replace_rule(&mut self, rule: Box<dyn Rule>)
Add a custom rule, replacing any existing custom rule with the same ID.
Sourcepub fn rules(&self) -> Vec<&dyn Rule>
pub fn rules(&self) -> Vec<&dyn Rule>
Get all registered rules as trait object references.
Returns an iterator over all rules (built-in + custom). Custom rules with the same ID as built-in rules will override them.
Sourcepub fn get_rule(&self, id: &str) -> Option<&dyn Rule>
pub fn get_rule(&self, id: &str) -> Option<&dyn Rule>
Get a rule by its ID.
Custom rules take precedence over built-in rules.
Sourcepub fn check_all(&self, ctx: &AnalysisContext<'_>) -> Vec<Diagnostic>
pub fn check_all(&self, ctx: &AnalysisContext<'_>) -> Vec<Diagnostic>
Run all rules on the given analysis context.
Sourcepub fn check_rules(
&self,
ctx: &AnalysisContext<'_>,
rule_ids: &[&str],
) -> Vec<Diagnostic>
pub fn check_rules( &self, ctx: &AnalysisContext<'_>, rule_ids: &[&str], ) -> Vec<Diagnostic>
Run specific rules on the given analysis context.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PluginRegistry
impl !RefUnwindSafe for PluginRegistry
impl Send for PluginRegistry
impl Sync for PluginRegistry
impl Unpin for PluginRegistry
impl !UnwindSafe for PluginRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more