feat(Module_Doc): manage requires
This commit is contained in:
parent
67ecf46058
commit
dc8698270b
|
@ -1,7 +1,14 @@
|
|||
local Function_Info = require "entity.Function_Info"
|
||||
local List = require "pl.List"
|
||||
local Map = require "pl.Map"
|
||||
local Variable_Info = require "entity.Variable_Info"
|
||||
|
||||
local module_to_require <const> : Map<string, string> = Map({
|
||||
Shape = "gears.shape",
|
||||
Surface = "gears.surface",
|
||||
Widget = "wibox.widget",
|
||||
})
|
||||
|
||||
local record Module_Doc
|
||||
metamethod __call: function(Module_Doc): Module_Doc
|
||||
|
||||
|
@ -16,7 +23,10 @@ local record Module_Doc
|
|||
static_functions: List<Function_Info.Function_Info>
|
||||
signals: List<string>
|
||||
|
||||
requires: Map<string, string>
|
||||
|
||||
fixup: function(Module_Doc)
|
||||
populate_requires: function(Module_Doc)
|
||||
end
|
||||
|
||||
local __Module_Doc: metatable<Module_Doc> = {
|
||||
|
@ -27,6 +37,7 @@ local __Module_Doc: metatable<Module_Doc> = {
|
|||
properties = List(),
|
||||
static_functions = List(),
|
||||
signals = List(),
|
||||
requires = Map(),
|
||||
|
||||
fixup = function(self: Module_Doc)
|
||||
for c in self.constructors:iter() do
|
||||
|
@ -44,8 +55,60 @@ local __Module_Doc: metatable<Module_Doc> = {
|
|||
for s in self.static_functions:iter() do
|
||||
s:fixup()
|
||||
end
|
||||
|
||||
end,
|
||||
populate_requires = function(self: Module_Doc)
|
||||
-- TODO : Move this to other Entities. Can be a little tricky because we populate a map
|
||||
for c in self.constructors:iter() do
|
||||
for p in c.parameters:iter() do
|
||||
for t in p.types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for m in self.methods:iter() do
|
||||
for p in m.parameters:iter() do
|
||||
for t in p.types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
for t in m.return_types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
for p in self.properties:iter() do
|
||||
for t in p.types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
for s in self.static_functions:iter() do
|
||||
for p in s.parameters:iter() do
|
||||
for t in p.types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
for t in s.return_types:iter() do
|
||||
local mod = module_to_require:get(t.name)
|
||||
if mod then
|
||||
self.requires:set(t.name, mod)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
end,
|
||||
}
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
local List = require "pl.List"
|
||||
local Map = require "pl.Map"
|
||||
|
||||
local type_fix: Map<string, string> = Map({
|
||||
local type_fix <const> : Map<string, string> = Map({
|
||||
bool = "boolean",
|
||||
client = "Client",
|
||||
["gears.shape"] = "Shape",
|
||||
["gears.surface"] = "Surface",
|
||||
image = "Image",
|
||||
int = "integer",
|
||||
screen = "Screen",
|
||||
shape = "Shape",
|
||||
surface = "Surface",
|
||||
tag = "Tag",
|
||||
["wibox.widget"] = "Widget",
|
||||
widget = "Widget",
|
||||
})
|
||||
|
||||
local record Type_Info
|
||||
|
|
|
@ -9,6 +9,7 @@ local Variable_Info = require "entity.Variable_Info"
|
|||
|
||||
local record Module
|
||||
indent: function(str: string, level: number): string
|
||||
render_requires: function(requires: Map<string, string>): string
|
||||
render_typed_variable: function(name: string, types: List<Type_Info.Type_Info>): string
|
||||
render_anonymous_function_signature: function(item: Function_Info.Function_Info): string
|
||||
render_record_functions: function(items: List<Function_Info.Function_Info>): string
|
||||
|
@ -26,6 +27,22 @@ function snippets.indent(str: string, level: number): string
|
|||
return stringx.rstrip(stringx.indent(str, level, string.rep(" ", 3)))
|
||||
end
|
||||
|
||||
function snippets.render_requires(requires: Map<string, string>): string
|
||||
local tmpl = [[local $(name) = require "$(path)"]]
|
||||
|
||||
local require_statements <const> = List()
|
||||
for name, path in requires:iter() do
|
||||
local tmpl_args = {
|
||||
name = name,
|
||||
path = path,
|
||||
}
|
||||
|
||||
require_statements:append(utils.do_or_fail(template.substitute, tmpl, tmpl_args))
|
||||
end
|
||||
|
||||
return require_statements:concat("\n")
|
||||
end
|
||||
|
||||
function snippets.render_typed_variable(name: string, types: List<Type_Info.Type_Info>): string
|
||||
local tmpl =
|
||||
[[$(name): $(types)]]
|
||||
|
|
|
@ -8,6 +8,10 @@ local snippets = require "generator.snippets"
|
|||
local tmpl = [[
|
||||
-- Auto generated file (Do not manually edit this file!)
|
||||
|
||||
# if module.requires:len() ~= 0 then
|
||||
$(snippets.render_requires(module.requires))
|
||||
# end -- /requires
|
||||
|
||||
local record $(module.record_name)
|
||||
# if #module.signals ~= 0 then
|
||||
$(snippets.indent(snippets.render_enum("Signal", module.signals)))
|
||||
|
|
|
@ -28,6 +28,7 @@ local function do_one_file(url: string, module_name: string, output: string)
|
|||
local html = crawler.fetch(url)
|
||||
local module_doc = scraper.module_doc.get_doc_from_page(html, module_name)
|
||||
module_doc:fixup()
|
||||
module_doc:populate_requires()
|
||||
filesystem.file_writer.write(
|
||||
generator.teal_type_definitions.generate_teal(module_doc),
|
||||
output
|
||||
|
|
Loading…
Reference in New Issue