allow lua_init files to be referenced in $path

This commit is contained in:
EwDev 2026-07-01 20:00:18 +02:00
parent 2a66434f6b
commit 0dcd76035e
No known key found for this signature in database
3 changed files with 45 additions and 26 deletions

View file

@ -0,0 +1,18 @@
---
source: tests/tests/build.rs
expression: contents
---
<roblox version="4">
<Item class="Folder" referent="0">
<Properties>
<string name="Name">init_from_path</string>
</Properties>
<Item class="ModuleScript" referent="1">
<Properties>
<string name="Name">folder</string>
<string name="Source"><![CDATA[-- init.luau
]]></string>
</Properties>
</Item>
</Item>
</roblox>

View file

@ -51,7 +51,7 @@ pub fn snapshot_dir_no_meta(
for entry in vfs.read_dir(path)? { for entry in vfs.read_dir(path)? {
let entry = entry?; let entry = entry?;
if !passes_filter_rules(&entry) { if !passes_filter_rules(&entry) || is_init_file(entry.path()).unwrap() {
continue; continue;
} }
@ -221,6 +221,21 @@ pub fn syncback_dir_no_meta<'sync>(
}) })
} }
fn is_init_file(path: &Path) -> anyhow::Result<bool> {
let file_name = path
.file_name()
.and_then(|n| n.to_str())
.with_context(|| format!("file name of {} is invalid", path.display()))?;
match file_name {
"init.server.luau" | "init.server.lua" | "init.client.luau" | "init.client.lua"
| "init.plugin.luau" | "init.plugin.lua" | "init.luau" | "init.lua" | "init.csv" => {
Ok(true)
}
_ => Ok(false),
}
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;

View file

@ -72,32 +72,18 @@ pub fn snapshot_from_vfs(
None => return Ok(None), None => return Ok(None),
}; };
if meta.is_dir() { if !meta.is_dir() {
let (middleware, dir_name, init_path) = get_dir_middleware(vfs, path)?; return snapshot_from_path(context, vfs, path);
// TODO: Support user defined init paths }
// If and when we do, make sure to go support it in
// `Project::set_file_name`, as right now it special-cases
// `default.project.json` as an `init` path.
match middleware {
Middleware::Dir => middleware.snapshot(context, vfs, path, dir_name),
_ => middleware.snapshot(context, vfs, &init_path, dir_name),
}
} else {
let file_name = path
.file_name()
.and_then(|n| n.to_str())
.with_context(|| format!("file name of {} is invalid", path.display()))?;
// TODO: Is this even necessary anymore? let (middleware, dir_name, init_path) = get_dir_middleware(vfs, path)?;
match file_name { // TODO: Support user defined init paths
"init.server.luau" | "init.server.lua" | "init.client.luau" | "init.client.lua" // If and when we do, make sure to go support it in
| "init.plugin.luau" | "init.plugin.lua" | "init.luau" | "init.lua" | "init.csv" => { // `Project::set_file_name`, as right now it special-cases
return Ok(None) // `default.project.json` as an `init` path.
} match middleware {
_ => {} Middleware::Dir => middleware.snapshot(context, vfs, path, dir_name),
} _ => middleware.snapshot(context, vfs, &init_path, dir_name),
snapshot_from_path(context, vfs, path)
} }
} }