diff --git a/src/luau.rs b/src/luau.rs index b9b2adf..768c8cf 100644 --- a/src/luau.rs +++ b/src/luau.rs @@ -85,10 +85,12 @@ fn lua_require(lua: &Lua, name: Option) -> Result { search_path = "?.luau;?.lua".into(); } - let mut source = None; + let (mut source, mut source_name) = (None, String::new()); for path in search_path.split(';') { - if let Ok(buf) = std::fs::read(path.replacen('?', &name, 1)) { + let file_path = path.replacen('?', &name, 1); + if let Ok(buf) = std::fs::read(&file_path) { source = Some(buf); + source_name = file_path; break; } } @@ -96,7 +98,7 @@ fn lua_require(lua: &Lua, name: Option) -> Result { let value = lua .load(&source) - .set_name(&format!("={}", name))? + .set_name(&format!("={}", source_name))? .set_mode(ChunkMode::Text) .call::<_, Value>(())?; diff --git a/tests/luau.rs b/tests/luau.rs index 57a11a8..3e78fe0 100644 --- a/tests/luau.rs +++ b/tests/luau.rs @@ -15,8 +15,11 @@ fn test_require() -> Result<()> { fs::write( temp_dir.path().join("module.luau"), r#" - counter = counter or 0 - return counter + 1 + counter = (counter or 0) + 1 + return { + counter = counter, + error = function() error("test") end, + } "#, )?; @@ -24,9 +27,12 @@ fn test_require() -> Result<()> { lua.load( r#" local module = require("module") - assert(module == 1) + assert(module.counter == 1) module = require("module") - assert(module == 1) + assert(module.counter == 1) + + local ok, err = pcall(module.error) + assert(not ok and string.find(err, "module.luau") ~= nil) "#, ) .exec()