v2.5Erweitert

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.

Dateistruktur
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.

Privat (Standard)

Nur im aktuellen Modul sichtbar

Öffentlich (pub)

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::Product

Auto-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;