-
Notifications
You must be signed in to change notification settings - Fork 101
[Feature] Luau/Roblox support: dependency graph parsing and language detection #52
Copy link
Copy link
Open
Description
Problem
When running repowise init on a Luau/Roblox project (using Rojo project structure), the dependency graph produces 0 edges across 21 source files. Repowise's parser doesn't recognize Luau's require() paths (e.g., require(script.Parent.ModuleName) or Rojo-resolved paths like require(game.ReplicatedStorage.Packages.Signal)).
As a result:
- The dependency graph is 21 disconnected nodes with 0 edges
- Only 2 pages are generated (repo overview + architecture diagram) instead of per-module docs
get_dependency_path()returns no connections between any modules- The overview misidentifies the tech stack (calls
.luaufiles "TypeScript")
Proposed Solution
Add a Luau file parser that understands:
require(script.Parent.X)/require(script.X)relative instance pathsrequire(game.Service.Path.Module)absolute instance paths- Rojo project JSON mapping (
default.project.json) to resolve filesystem paths to Roblox instance trees and back .luau/.luafile extensions as a distinct language (Luau), not TypeScript
Alternatives Considered
- Rojo project JSON as a hint file — Repowise could read
default.project.jsonto understand the filesystem-to-instance mapping without needing full Luau AST parsing - Regex-based extraction — simple pattern matching on
require(...)calls to extract dependency names, even without full path resolution
Additional Context
- Rojo is the standard tool for syncing filesystem Luau code to Roblox Studio
- Luau is a gradually-typed language derived from Lua, used exclusively by the Roblox engine
- Typical project structure:
src/client/,src/server/,src/shared/mapped viadefault.project.json - Tested with:
repowise init --provider gemini --concurrency 1 -y(v0.1.31) - The decision extraction from docs (22 records) worked well — the gap is purely in source code parsing and language detection
-Opus 4.6
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels