Skip to content

luamorph/luaparse-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

luaparse-rs

docs.rs crates.io

A multi-version Lua parser written in Rust with support for Lua 5.1, 5.2, 5.3, 5.4, and Luau via compile-time version selection.

Features

  • Zero-copy parsing with full AST output
  • Compile-time version selection; no runtime overhead
  • no_std compatible (with alloc)

Installation

[dependencies]
luaparse-rs = { version = "0.1", features = ["luau"] }

Available features: luau (default), lua51, lua52, lua53, lua54

Usage

use luaparse_rs::{Parser, Luau};

let input = r#"
local function greet(name: string): string
    return `hello {name}`
end
"#;

let parser = Parser::<Luau>::new(input).unwrap();
let ast = parser.parse().unwrap();
println!("{:#?}", ast);

Switch versions at compile time:

use luaparse_rs::{Parser, Lua54};

let parser = Parser::<Lua54>::new("local x <const> = 5").unwrap();
let ast = parser.parse().unwrap();

AST Traversal

Walk the syntax tree with the visitor traits, or use the quick closures:

use luaparse_rs::{Parser, Luau};

let ast = Parser::<Luau>::new("local x = 1").unwrap().parse().unwrap();

ast.for_each_identifier(|ident| {
    println!("{}", ident.name);
});

For full control, implement Visitor or VisitorMut. See the visitor module docs for examples.

License

Licensed under either of

at your option.

About

A clean, fast, and type-safe Lua(u) 5.x AST parser

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages