Skip to main content

Crate ryo_plugin_api

Crate ryo_plugin_api 

Source
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§

exports

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