Skip to content

[Feature] Luau/Roblox support: dependency graph parsing and language detection #52

@CyanoTex

Description

@CyanoTex

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 .luau files "TypeScript")

Proposed Solution

Add a Luau file parser that understands:

  • require(script.Parent.X) / require(script.X) relative instance paths
  • require(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 / .lua file extensions as a distinct language (Luau), not TypeScript

Alternatives Considered

  • Rojo project JSON as a hint file — Repowise could read default.project.json to 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 via default.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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions