pub trait LanguagePlugin {
// Required methods
fn name(&self) -> &str;
fn detect(&self, workspace: &Path, input: &PluginInput) -> bool;
fn levels(&self) -> Vec<Level>;
fn analyze(
&self,
workspace: &Path,
level: &str,
input: &PluginInput,
) -> Result<Graph>;
// Provided methods
fn is_test_path(&self, _rel_path: &str) -> bool { ... }
fn versions(
&self,
_workspace: &Path,
_input: &PluginInput,
) -> Vec<(String, String)> { ... }
fn presets(
&self,
defaults: Vec<Preset>,
_input: &PluginInput,
) -> Vec<Preset> { ... }
fn thresholds(&self) -> BTreeMap<String, Thresholds> { ... }
}Required Methods§
Sourcefn name(&self) -> &str
fn name(&self) -> &str
Canonical name, e.g. "rust". Used by --plugin and recorded in the
snapshot. Each plugin has exactly one name (js and ts are separate).
Sourcefn detect(&self, workspace: &Path, input: &PluginInput) -> bool
fn detect(&self, workspace: &Path, input: &PluginInput) -> bool
Can this plugin parse workspace (honoring input)?
Sourcefn levels(&self) -> Vec<Level>
fn levels(&self) -> Vec<Level>
Levels this plugin can produce, each carrying its edge-kind / attribute / node-kind / cycle-kind semantics.
Sourcefn analyze(
&self,
workspace: &Path,
level: &str,
input: &PluginInput,
) -> Result<Graph>
fn analyze( &self, workspace: &Path, level: &str, input: &PluginInput, ) -> Result<Graph>
Parse the workspace into a graph AT level (by name). Structure only:
nodes (with their structural attributes) + edges. Metrics are added
downstream. When input.ignore_tests is set, the plugin must drop its
own test files here (it knows the language’s conventions; see
is_test_path).
Provided Methods§
Sourcefn is_test_path(&self, _rel_path: &str) -> bool
fn is_test_path(&self, _rel_path: &str) -> bool
Does this workspace-relative path (forward-slashed, no leading ./) name
a test file in this language? Used to drop tests during the walk when
PluginInput::ignore_tests is set. Default: nothing is a test.
Sourcefn versions(
&self,
_workspace: &Path,
_input: &PluginInput,
) -> Vec<(String, String)>
fn versions( &self, _workspace: &Path, _input: &PluginInput, ) -> Vec<(String, String)>
Toolchain versions to record in the snapshot, e.g. [("rustc", "1.88.0")].
Sourcefn presets(&self, defaults: Vec<Preset>, _input: &PluginInput) -> Vec<Preset>
fn presets(&self, defaults: Vec<Preset>, _input: &PluginInput) -> Vec<Preset>
Transform the orchestrator’s generic default presets for this language.
Default: pass them through unchanged. A plugin may reword a prompt,
change a sort_metric, drop a preset, or add language-specific ones.
Sourcefn thresholds(&self) -> BTreeMap<String, Thresholds>
fn thresholds(&self) -> BTreeMap<String, Thresholds>
Language-calibrated per-metric thresholds (attribute key → tiers). The orchestrator overlays these onto the attribute specs. Default: none.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".