Issue #113, borked classmod: now custom sections are always respected. Automatic sections are generated for 'Metamethods' and 'Methods'
This commit is contained in:
parent
4fac99406c
commit
46515b2411
51
ldoc/doc.lua
51
ldoc/doc.lua
|
@ -208,6 +208,13 @@ function File:find_module_in_files (name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function init_within_section (mod,name)
|
||||||
|
mod.kinds:add_kind(name, name)
|
||||||
|
mod.enclosing_section = mod.section
|
||||||
|
mod.section = nil
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
|
||||||
function File:finish()
|
function File:finish()
|
||||||
local this_mod
|
local this_mod
|
||||||
local items = self.items
|
local items = self.items
|
||||||
|
@ -282,7 +289,11 @@ function File:finish()
|
||||||
display_name = summary
|
display_name = summary
|
||||||
end
|
end
|
||||||
item.display_name = display_name
|
item.display_name = display_name
|
||||||
add_section(item)
|
--~ add_section(item)
|
||||||
|
this_mod.section = item
|
||||||
|
this_mod.kinds:add_kind(display_name,display_name..' ',nil,item)
|
||||||
|
this_mod.sections:append(item)
|
||||||
|
this_mod.sections.by_name[display_name:gsub('%A','_')] = item
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local to_be_removed
|
local to_be_removed
|
||||||
|
@ -308,15 +319,11 @@ function File:finish()
|
||||||
item.name = fname
|
item.name = fname
|
||||||
end
|
end
|
||||||
|
|
||||||
local enclosing_section
|
|
||||||
if tagged_inside then
|
if tagged_inside then
|
||||||
item.tags.within = tagged_inside
|
item.tags.within = tagged_inside
|
||||||
end
|
end
|
||||||
if item.tags.within then
|
if item.tags.within then
|
||||||
local name = item.tags.within
|
init_within_section(this_mod,item.tags.within)
|
||||||
this_mod.kinds:add_kind(name, name)
|
|
||||||
enclosing_section = this_mod.section
|
|
||||||
this_mod.section = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- right, this item was within a section or a 'class'
|
-- right, this item was within a section or a 'class'
|
||||||
|
@ -332,11 +339,23 @@ function File:finish()
|
||||||
-- if it was a class, then if the name is unqualified then it becomes
|
-- if it was a class, then if the name is unqualified then it becomes
|
||||||
-- 'Class:foo' (unless flagged as being a constructor, static or not a function)
|
-- 'Class:foo' (unless flagged as being a constructor, static or not a function)
|
||||||
if doc.class_tag(stype) or classmod then
|
if doc.class_tag(stype) or classmod then
|
||||||
if not item.name:match '[:%.]' then -- not qualified
|
if not item.name:match '[:%.]' then -- not qualified name!
|
||||||
|
-- a class is either a @type section or a @classmod module. Is this a _method_?
|
||||||
local class = classmod and this_mod.name or this_section.name
|
local class = classmod and this_mod.name or this_section.name
|
||||||
local lang = this_mod.file.lang
|
|
||||||
local static = item.tags.constructor or item.tags.static or item.type ~= 'function'
|
local static = item.tags.constructor or item.tags.static or item.type ~= 'function'
|
||||||
item.name = class..(not static and lang.method_call or '.')..item.name
|
if classmod then -- methods and metamethods go into their own special sections...
|
||||||
|
local inferred_section
|
||||||
|
if item.name:match '^__' then
|
||||||
|
inferred_section = 'Metamethods'
|
||||||
|
elseif not static then
|
||||||
|
inferred_section = 'Methods'
|
||||||
|
end
|
||||||
|
if inferred_section then print('name',item.name,inferred_section)
|
||||||
|
item.tags.within = init_within_section(this_mod,inferred_section)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- Whether to use '.' or the language's version of ':' (e.g. \ for Moonscript)
|
||||||
|
item.name = class..(not static and this_mod.file.lang.method_call or '.')..item.name
|
||||||
end
|
end
|
||||||
if stype == 'factory' then
|
if stype == 'factory' then
|
||||||
if item.tags.private then to_be_removed = true
|
if item.tags.private then to_be_removed = true
|
||||||
|
@ -355,14 +374,16 @@ function File:finish()
|
||||||
section_description = item.tags.within
|
section_description = item.tags.within
|
||||||
item.section = section_description
|
item.section = section_description
|
||||||
else
|
else
|
||||||
section_description = "Methods"
|
if item.type == 'function' or item.type == 'lfunction' then
|
||||||
|
section_description = "Methods"
|
||||||
|
end
|
||||||
item.section = item.type
|
item.section = item.type
|
||||||
end
|
end
|
||||||
elseif item.tags.within then
|
elseif item.tags.within then -- ad-hoc section...
|
||||||
section_description = item.tags.within
|
section_description = item.tags.within
|
||||||
item.section = section_description
|
item.section = section_description
|
||||||
else -- otherwise, just goes into the default sections (Functions,Tables,etc)
|
else -- otherwise, just goes into the default sections (Functions,Tables,etc)
|
||||||
item.section = item.type
|
item.section = item.type;
|
||||||
end
|
end
|
||||||
|
|
||||||
item.module = this_mod
|
item.module = this_mod
|
||||||
|
@ -370,11 +391,15 @@ function File:finish()
|
||||||
local these_items = this_mod.items
|
local these_items = this_mod.items
|
||||||
these_items.by_name[item.name] = item
|
these_items.by_name[item.name] = item
|
||||||
these_items:append(item)
|
these_items:append(item)
|
||||||
|
--~ print(item.name,section_description,item.type)
|
||||||
this_mod.kinds:add(item,these_items,section_description)
|
this_mod.kinds:add(item,these_items,section_description)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- restore current section after a 'within'
|
-- restore current section after a 'within'
|
||||||
if enclosing_section then this_mod.section = enclosing_section end
|
if this_mod.enclosing_section then
|
||||||
|
this_mod.section = this_mod.enclosing_section
|
||||||
|
this_mod.enclosing_section = nil
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
-- must be a free-standing function (sometimes a problem...)
|
-- must be a free-standing function (sometimes a problem...)
|
||||||
|
|
|
@ -382,11 +382,6 @@ local function parse_file(fname, lang, package, args)
|
||||||
if module_item then
|
if module_item then
|
||||||
F:error("Module already declared!")
|
F:error("Module already declared!")
|
||||||
end
|
end
|
||||||
if tags.class == 'classmod' then
|
|
||||||
tags = tags.new('section','methods')
|
|
||||||
tags:add('summary','Methods')
|
|
||||||
F:new_item(tags,line)
|
|
||||||
end
|
|
||||||
module_item = current_item
|
module_item = current_item
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,7 +23,6 @@ class List
|
||||||
len: => #@ls
|
len: => #@ls
|
||||||
|
|
||||||
--- string representation
|
--- string representation
|
||||||
-- @within Metamethods
|
|
||||||
__tostring: => '['..(concat @ls,',')..']'
|
__tostring: => '['..(concat @ls,',')..']'
|
||||||
|
|
||||||
--- return idx of first occurence of `item`
|
--- return idx of first occurence of `item`
|
||||||
|
@ -54,7 +53,6 @@ class List
|
||||||
self
|
self
|
||||||
|
|
||||||
--- concatenate two lists, giving a new list
|
--- concatenate two lists, giving a new list
|
||||||
-- @within Metamethods
|
|
||||||
__concat: (l1,l2) -> l1\copy!\extend l2
|
__concat: (l1,l2) -> l1\copy!\extend l2
|
||||||
|
|
||||||
--- an iterator over all items
|
--- an iterator over all items
|
||||||
|
|
Loading…
Reference in New Issue