ezno

Crates.ioezno
lib.rsezno
version0.0.22
sourcesrc
created_at2022-01-24 10:10:54.599321
updated_at2024-08-29 14:48:26.093901
descriptionA JavaScript type checker and compiler. For use as a library or through the CLI
homepagehttps://kaleidawave.github.io/posts/introducing-ezno/
repositoryhttps://github.com/kaleidawave/ezno
max_upload_size
id520153
size330,640
Ben (kaleidawave)

documentation

README

A JavaScript compiler and TypeScript checker written in Rust with a focus on static analysis and runtime performance.

[!IMPORTANT] Ezno is in active development and does not currently support enough features to check existing projects (see blocking issues). Check out the getting started guide for experimenting with what it currently supports.

What Ezno is:

  • A type checker for JavaScript usable through a CLI (with a LSP also in the works)
  • Checks programs with guaranteed type safety (no runtime TypeErrors) (as long as definitions are sound)
  • Types aimed at soundness and tracing for better static analysis
  • A imperative type system that tracks and evaluates the side effects of functions and control flow structures. It is similar to an interpreter, but acts with types instead of values and does not run IO, side effects, etc.
  • A collection of experiments of types. Many are being worked out and are in the prototype stage. Some of the new behaviors benefit JavaScript specifically and others could be applied to other languages
  • Written in Rust
  • Fast and Small
  • Open source! You can help build Ezno!
  • A challenge to the status quo of type checking, optimisations and compilation through deeper static analysis beyond syntax analysis!

What Ezno is not

  • eNZo, the Z is in front of the N (pronounce as 'Fresno' without the 'fr') 😀
  • Be on parity with TSC or 1:1, it has some different behaviors but should work in existing projects using TSC
  • Faster as a means to serve large codebases. Cut out bloat and complex code first!
  • Smarter as a means to allow more dynamic patterns. Keep things simple!
  • A binary executable compiler. It takes in JavaScript (or a TypeScript or Ezno superset) and does similar processes to traditional compilers, but at the end emits JavaScript. However, in the future, it could generate a lower level format using its event (side-effect) representation.

Read more about Ezno (in chronological order)


This project is a workspace consisting of a few crates:

Crate Lines Of Code Contains
checker checker lines of code Stores for types and contexts, type checking logic and optional synthesis over the parser AST
parser parser lines of code AST definitions, logic for parsing, AST to string and visiting

Help contribute

Check out good first issues and comment on discussions! Feel free to ask questions on parts of the code of the checking implementation.

Read CONTRIBUTING.md for information about building and testing.

Commit count: 174

cargo fmt