diff --git a/init.lua b/init.lua index 4a8a4ae..9121cd6 100644 --- a/init.lua +++ b/init.lua @@ -2,4 +2,20 @@ -- See: meta/docs/superpowers/specs/2026-05-16-api-doc-convention-design.md local M = {} +-- Extracts public/private surface from Lua source code. +-- Convention: `M. = function(...)` is public; `M._ = ...` is private. +-- Returns: { public = ["foo","bar",...], private = ["_baz",...] } +function M.parse_lua_surface(source_string) + local public = {} + local private = {} + for name in string.gmatch(source_string, "M%.([_%w]+)%s*=%s*function") do + if string.sub(name, 1, 1) == "_" then + table.insert(private, name) + else + table.insert(public, name) + end + end + return { public = public, private = private } +end + return M