Expand description
§Ryo Plugin API
WebAssembly Interface Types for ryo mutation plugins.
§Overview
This crate provides the WIT-generated Rust types that define the contract between the ryo host and WASM mutation plugins. Plugins act as “Definition Providers” - they supply mutation metadata and transformation logic.
§Architecture
WASM Plugin (Guest) ryo (Host)
┌─────────────────────┐ ┌─────────────────────────┐
│ get-manifest() │───WIT───>│ Load mutation metadata │
│ get-pattern-source()│───WIT───>│ Compile pattern matcher │
│ execute-transform() │───WIT───>│ Apply text edits │
└─────────────────────┘ └─────────────────────────┘§Usage
§For Plugin Authors (Guest)
ⓘ
use ryo_plugin_api::*;
wit_bindgen::generate!({
world: "mutation-plugin",
path: "wit",
exports: {
"ryo:transform/mutation": MyMutation,
}
});
struct MyMutation;
impl exports::ryo::transform::mutation::Guest for MyMutation {
fn get_manifest() -> MutationManifest {
MutationManifest {
api_version: CURRENT_API_VERSION,
name: "bool-simplify".into(),
description: "Simplify boolean comparisons".into(),
category: MutationCategory::Idiom,
tier: 1,
pattern: "...".into(),
transform: TransformDef::Template("{{var}}".into()),
}
}
fn get_pattern_source() -> String {
String::new()
}
fn execute_transform(
_matches: Vec<MatchResult>,
_context: TransformContext,
) -> Result<Vec<TextEdit>, TransformError> {
// Only called if transform = WasmExecute
unreachable!()
}
}§For Host Implementation
ⓘ
use ryo_plugin_loader::PluginLoader;
let loader = PluginLoader::new()?;
let plugin = loader.load(&wasm_bytes)?;
// Use manifest
println!("Loaded mutation: {}", plugin.manifest.name);§API Versioning
The api_version field in MutationManifest ensures compatibility:
- Current version: 1
- Host rejects plugins with mismatched versions
- Breaking changes increment the version number
Re-exports§
pub use exports::ryo::transform::mutation::Guest;pub use exports::ryo::transform::mutation::MutationCategory;pub use exports::ryo::transform::mutation::MutationManifest;pub use exports::ryo::transform::mutation::TransformContext;pub use exports::ryo::transform::mutation::TransformDef;pub use exports::ryo::transform::mutation::TransformError;pub use exports::ryo::transform::types::Capture;pub use exports::ryo::transform::types::MatchResult;pub use exports::ryo::transform::types::NodeKind;pub use exports::ryo::transform::types::TextEdit;pub use exports::ryo::transform::types::TypeHint;
Modules§
Constants§
- CURRENT_
API_ VERSION - Current API version
Functions§
- template
- Create a template-based transform definition
- text_
edit - Create a text edit
- wasm_
execute - Create a WASM-execute transform definition