normalize-languages 0.3.2

Tree-sitter language support and dynamic grammar loading
Documentation
import std.stdio;
import std.math : sqrt, pow;
import std.algorithm : filter, reduce;

struct Point {
    double x;
    double y;
}

class Shape {
    string name;

    this(string name) {
        this.name = name;
    }

    double area() {
        return 0.0;
    }
}

class Circle : Shape {
    double radius;

    this(double r) {
        super("circle");
        this.radius = r;
    }

    override double area() {
        return 3.14159 * radius * radius;
    }
}

double distance(Point a, Point b) {
    double dx = b.x - a.x;
    double dy = b.y - a.y;
    return sqrt(dx * dx + dy * dy);
}

string classify(int n) {
    if (n < 0) {
        return "negative";
    } else if (n == 0) {
        return "zero";
    } else {
        return "positive";
    }
}

int sumEvens(int[] values) {
    int total = 0;
    foreach (v; values) {
        if (v % 2 == 0) {
            total += v;
        }
    }
    return total;
}

void main() {
    auto p1 = Point(3.0, 4.0);
    auto p2 = Point(0.0, 0.0);
    writeln(distance(p1, p2));

    auto c = new Circle(5.0);
    writeln(c.area());
    writeln(classify(-3));
    writeln(sumEvens([1, 2, 3, 4, 5, 6]));
}