Skip to content
/ ezno Public
forked from kaleidawave/ezno

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

License

Notifications You must be signed in to change notification settings

wzwywx/ezno

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

You can try what it current supports today with npx

npx ezno check file.ts

Or download the binary with npm install ezno, cargo install ezno or on GitHub releases. Or try it in Oxc!

project lines of code

What Ezno is

  • A type checker for JavaScript, usable as a library or with optional compiler infrastructure (parser, CLI, LSP, etc)
  • Fully typed programs, guaranteeing type safety (as long as definitions are sound)
  • Types aimed at soundness and tracing for better static analysis
  • A imperative type system, with event tracing and evaluating function side effects. Equivalent to an interpreter, but with types rather than values
  • A collection of experiments of types. Some features work well, others are in the prototype stage. Some are specific to JavaScript, others could be applied to other dynamic languages
  • A challenge to the status quo of DCE, type checking and compilation through deeper static analysis beyond syntax analysis
  • Written in Rust

What Ezno is not

  • eNZo, Z goes before the N (pronounce as 'Fresno' without the 'fr') 😀
  • 1:1 / parity with TSC, it has different behaviors but should work in existing projects using TSC (check out stc that is aimed at 1:1)
  • A binary executable generator. It takes in JavaScript (or TS/Ezno superset) and does similar methods to traditional compilers, but at the end emits JavaScript. However the event intermediate representation could be used in the future to generate a lower level format
  • Usable, still a way to go until it can check actual programs. See the specification for what is currently implemented in the checker

Read some more detailed posts


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

Also checkout oxc_type_synthesis, a crate which allows using the type checker through oxc!

Help contribute

Check out issues and comment on discussions! Read CONTRIBUTING.md for more information.

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.5%
  • JavaScript 0.5%