Das Modulsystem
Velisch verwendet ein modernes, dateibasiertes Modulsystem, das stark von Rust und Python inspiriert ist. Es fördert Kapselung und Wiederverwendbarkeit.
Dateien als Module
Jede .velin-Datei ist implizit ein Modul. Der Name der Datei (ohne Endung) ist der Modulname.
src/
main.velin
utils.velin
models/
user.velin// Verwendung in main.velin
use utils
use models::user
fn main() {
utils.helper();
let u = user.User { ... };
}Explizite Sub-Module
Sie können Module auch innerhalb einer Datei definieren, um logische Gruppen zu bilden, ohne neue Dateien anzulegen.
// Datei: math_utils.velin
// Privates Modul (nur in dieser Datei sichtbar)
mod internal {
fn helper() { ... }
}
// Öffentliches Modul
pub mod geometry {
pub struct Point { x: number, y: number }
pub fn distance(p1: Point, p2: Point): number {
return math.sqrt(math.pow(p2.x - p1.x, 2) + ...);
}
}Sichtbarkeit (pub)
Standardmäßig ist alles in Velisch privat (nur im aktuellen Modul sichtbar). Um Funktionen, Structs oder Konstanten nach außen freizugeben, nutzen Sie das pub-Keyword.
Nur im aktuellen Modul sichtbar
Von anderen Modulen importierbar
// Nur hier sichtbar
fn secretHelper() {}
// Von überall sichtbar, wo das Modul importiert wird
pub fn publicApi() {
secretHelper(); // Interner Zugriff erlaubt
}
pub struct Config {
pub host: string, // Feld ist öffentlich
apiKey: string // Feld ist privat (nur über Methoden zugreifbar)
}Re-Exporting
Sie können Typen aus Untermodulen "hochziehen", um eine sauberere API zu bieten.
// Datei: api/mod.velin
use api::users
use api::products
// Nutzer müssen nicht 'api::users::User' schreiben, sondern nur 'api::User'
pub use users::User
pub use products::ProductAuto-Import (LSP)
Der Velisch LSP Server unterstützt automatisches Import-Management:
Auto-Add
Fehlende Imports automatisch hinzufügen
Organize
Imports alphabetisch sortieren und gruppieren
Cleanup
Ungenutzte Imports entfernen
Quick Fix
💡 Code Actions für fehlende Typen
// Vorher (unorganisiert):
use std::collections::HashMap;
use crate::models::Product;
use std::io::Read;
use crate::utils::helpers;
// Nach "Organize Imports":
use std::collections::HashMap;
use std::io::Read;
use crate::models::Product;
use crate::utils::helpers;