ToolBeta
Plugin-Entwicklung
Erstelle eigene Velisch-Plugins mit der Compiler-API für Code-Analyse, Metriken und mehr.
Beispiel-Plugin: Code-Metriken
Das Example Plugin zeigt, wie man ein Plugin für Code-Metriken erstellt:
cd tools/example-plugin
cargo build --releaseVerwendung
Code-Metriken analysieren
velin-example-plugin metrics -i examples/JSON-Output
velin-example-plugin metrics -i examples/ --format jsonVerbose Output
velin-example-plugin metrics -i examples/ --verboseFeatures
Funktionen
Anzahl der Funktionen im Projekt
Structs
Anzahl der Structs
Enums
Anzahl der Enums
Durchschnittliche Länge
Durchschnittliche Zeilen pro Funktion
Gesamt-Zeilen
Gesamte Anzahl Code-Zeilen
Beispiel-Output
📊 Code-Metriken für examples/:
Funktionen: 45
Structs: 12
Enums: 3
Durchschnittliche Funktion-Länge: 15 Zeilen
Gesamt-Zeilen: 1200JSON-Format
{
"functions": 45,
"structs": 12,
"enums": 3,
"average_function_length": 15,
"total_lines": 1200,
"files_analyzed": 23
}Eigene Plugins erstellen
1. Projekt-Struktur
cargo new --bin my-velin-plugin
cd my-velin-plugin2. Dependencies
Cargo.tomltoml
[package]
name = "velin-my-plugin"
version = "0.1.0"
edition = "2021"
[dependencies]
velin-compiler = { path = "../../compiler" }
clap = { version = "4.0", features = ["derive"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"3. Plugin-Logik
src/main.rsrust
use velin_compiler::parser::Parser;
use velin_compiler::parser::ast::*;
fn main() {
let code = std::fs::read_to_string("example.velin").unwrap();
let parser = Parser::new();
let program = parser.parse(&code).unwrap();
let mut function_count = 0;
for item in &program.items {
if let Item::Function(_) = item {
function_count += 1;
}
}
println!("Funktionen gefunden: {}", function_count);
}Plugin-API
Parser verwenden
use velin_compiler::parser::Parser;
let parser = Parser::new();
let program = parser.parse(&code)?;AST durchlaufen
for item in &program.items {
match item {
Item::Function(func) => {
println!("Function: {}", func.name);
}
Item::Struct(s) => {
println!("Struct: {}", s.name);
}
Item::Enum(e) => {
println!("Enum: {}", e.name);
}
_ => {}
}
}Type-Checker verwenden
use velin_compiler::type_checker::TypeChecker;
let mut type_checker = TypeChecker::new();
type_checker.check(&program)?;Best Practices
Klarer Zweck
Jedes Plugin sollte einen klaren Zweck haben
Gute Dokumentation
Dokumentiere alle Features und Optionen
Error Handling
Behandle Fehler ordentlich
Testing
Schreibe Tests für Plugin-Funktionalität
Performance
Optimiere für große Codebases
CLI-Design
Verwende clap für konsistente CLI
CI/CD Integration
.github/workflows/metrics.ymlyaml
- name: Code Metrics
run: |
cd tools/example-plugin
cargo build --release
./target/release/velin-example-plugin metrics -i src/ --format json > metrics.json