X-Git-Url: http://nitlanguage.org diff --git a/src/nitdoc.nit b/src/nitdoc.nit index 30d29da..5434df0 100644 --- a/src/nitdoc.nit +++ b/src/nitdoc.nit @@ -26,36 +26,37 @@ import abstracttool class DocContext special AbstractCompiler # Destination directory - readable writable attr _dir: String + readable writable var _dir: String = "." # Content of a generated file - attr _stage_context: StageContext = new StageContext(null) + var _stage_context: StageContext = new StageContext(null) # Add a string in the content - meth add(s: String) do + fun add(s: String) do _stage_context.content.add(s) _stage_context.validate = true end # Add a string in the content iff some other string are added - meth stage(s: String) do _stage_context.content.add(s) + fun stage(s: String) do _stage_context.content.add(s) # Create a new stage in the content - meth open_stage do _stage_context = new StageContext(_stage_context) + fun open_stage do _stage_context = new StageContext(_stage_context) # Close the current stage in the content - meth close_stage + fun close_stage do var s = _stage_context.parent if _stage_context.validate then s.content.add_all(_stage_context.content) s.validate = true end + assert s != null _stage_context = s end # Write the content to a new file - meth write_to(filename: String) + fun write_to(filename: String) do print "Generate {filename}" var f = new OFStream.open(filename) @@ -66,19 +67,19 @@ special AbstractCompiler end # Currently computed module - readable attr _module: MMSrcModule + readable var _module: nullable MMSrcModule # Is the current directory module computed as a simple modude ? - readable writable attr _inside_mode: Bool + readable writable var _inside_mode: Bool = false # Is the current module computed as a intruded one ? - readable writable attr _intrude_mode: Bool + readable writable var _intrude_mode: Bool = false # Compued introducing entities (for the index) - attr _entities: Array[MMEntity] = new Array[MMEntity] + var _entities: Array[MMEntity] = new Array[MMEntity] # Register an entity (for the index) - meth register(e: MMEntity) + fun register(e: MMEntity) do _entities.add(e) if e isa MMSrcModule then @@ -87,13 +88,13 @@ special AbstractCompiler end # Start a new file - meth clear + fun clear do _stage_context = new StageContext(null) end # Generate common files (frames, index, overview) - meth extract_other_doc + fun extract_other_doc do _module = null inside_mode = false @@ -179,7 +180,7 @@ special AbstractCompiler write_to("{dir}/index.html") end - meth add_header(title: String) + fun add_header(title: String) do add("
\n")
@@ -207,20 +208,21 @@ special AbstractCompiler
end
# Sorter of entities in alphabetical order
- attr _sorter: AlphaSorter[MMEntity] = new AlphaSorter[MMEntity]
+ var _sorter: AlphaSorter[MMEntity] = new AlphaSorter[MMEntity]
# Sort entities in the alphabetical order
- meth sort(array: Array[MMEntity])
+ fun sort(array: Array[MMEntity])
do
_sorter.sort(array)
end
- readable writable attr _owned_modules: Array[MMModule]
+ readable writable var _owned_modules: Array[MMModule] = new Array[MMModule]
# Return the known_owner for current module
# if inside_mode is set, it could be a different result
- meth known_owner_of(m: MMModule): MMModule
+ fun known_owner_of(m: MMModule): MMModule
do
+ var module = module
if module == null then return m
var res = module.known_owner_of(m)
if not inside_mode and not intrude_mode and res.directory.owner == module then
@@ -230,9 +232,9 @@ special AbstractCompiler
end
end
- readable attr _opt_dir: OptionString = new OptionString("Directory where doc is generated", "-d", "--dir")
+ readable var _opt_dir: OptionString = new OptionString("Directory where doc is generated", "-d", "--dir")
- redef meth perform_work(mods)
+ redef fun perform_work(mods)
do
dir.mkdir
@@ -245,37 +247,37 @@ special AbstractCompiler
init
do
- super
+ super("nitdoc")
option_context.add_option(opt_dir)
end
- redef meth process_options
+ redef fun process_options
do
super
- dir = opt_dir.value
- if dir == null then dir = "."
+ var d = opt_dir.value
+ if d != null then dir = d
end
end
# Conditionnal part of the text content of a DocContext
class StageContext
# Content of the current stage
- readable attr _content: Array[String] = new Array[String]
+ readable var _content: Array[String] = new Array[String]
# Is a normal string already added?
- readable writable attr _validate: Bool
+ readable writable var _validate: Bool = false
# Parent stage is any
- readable attr _parent: StageContext
+ readable var _parent: nullable StageContext = null
- init(parent: StageContext) do _parent = parent
+ init(parent: nullable StageContext) do _parent = parent
end
# Efficiently sort object with their to_s method
class AlphaSorter[E: Object]
special AbstractSorter[E]
- redef meth compare(a, b)
+ redef fun compare(a, b)
do
var sa: String
var sb: String
@@ -296,7 +298,7 @@ special AbstractSorter[E]
end
# Keep track of to_s values
- attr _dico: HashMap[Object, String] = new HashMap[Object, String]
+ var _dico: HashMap[Object, String] = new HashMap[Object, String]
init do end
end
@@ -304,42 +306,42 @@ end
# Generalization of metamodel entities
class MMEntity
# Return a link to
- meth html_link(dctx: DocContext): String is abstract
+ fun html_link(dctx: DocContext): String is abstract
# Is the entity should appear in the generaed doc
- meth need_doc(dctx: DocContext): Bool is abstract
+ fun need_doc(dctx: DocContext): Bool is abstract
# Return a one liner description
- meth short_doc: String do return " "
+ fun short_doc: String do return " "
# The doc node from the AST
# Return null is none
- meth doc: ADoc do return null
+ fun doc: nullable ADoc do return null
# Human redable location of the entity (module/class/property)
- meth locate(dctx: DocContext): String do return ""
+ fun locate(dctx: DocContext): String do return ""
# Part of the prototype before the name (kind, modifiers, qualifier)
- meth prototype_head(dctx: DocContext): String is abstract
+ fun prototype_head(dctx: DocContext): String is abstract
# Part of the property after the name (signature, modifiers)
- meth prototype_body(dctx: DocContext): String do return ""
+ fun prototype_body(dctx: DocContext): String do return ""
end
redef class MMModule
special MMEntity
- redef meth html_link(dctx) do
+ redef fun html_link(dctx) do
if dctx.module == self then
return "{self}"
else
return "{self}"
end
end
- redef meth need_doc(dctx) do return true
- redef meth prototype_head(dctx) do return "module "
+ redef fun need_doc(dctx) do return true
+ redef fun prototype_head(dctx) do return "module "
- attr _known_owner_of_cache: Map[MMModule, MMModule] = new HashMap[MMModule, MMModule]
- meth known_owner_of(module: MMModule): MMModule
+ var _known_owner_of_cache: Map[MMModule, MMModule] = new HashMap[MMModule, MMModule]
+ fun known_owner_of(module: MMModule): MMModule
do
if _known_owner_of_cache.has_key(module) then return _known_owner_of_cache[module]
var res = module
@@ -353,10 +355,10 @@ special MMEntity
end
# Return the most general module that own self
- meth owner(from: MMModule): MMModule
+ fun owner(from: MMModule): MMModule
do
var res = self
- var d = directory
+ var d: nullable MMDirectory = directory
while d != null and d != from.directory do
var o = d.owner
if o != null and o.mhe <= res then res = o
@@ -365,7 +367,7 @@ special MMEntity
return res
end
- private meth known_owner_of_intern(module: MMModule, from: MMModule, as_owner: Bool): MMModule
+ private fun known_owner_of_intern(module: MMModule, from: MMModule, as_owner: Bool): MMModule
do
if module == self then return self
var candidates = new Array[MMModule]
@@ -391,12 +393,12 @@ end
redef class MMLocalProperty
special MMEntity
# Anchor of the property description in the module html file
- meth html_anchor: String
+ fun html_anchor: String
do
return "PROP_{local_class}_{cmangle(name)}"
end
- redef meth html_link(dctx)
+ redef fun html_link(dctx)
do
var m = module
if not need_doc(dctx) then m = global.intro.module
@@ -408,22 +410,22 @@ special MMEntity
end
end
- # Kind of property (meth, attr, etc.)
- meth kind: String is abstract
+ # Kind of property (fun, attr, etc.)
+ fun kind: String is abstract
- redef meth locate(dctx)
+ redef fun locate(dctx)
do
return "in {module.html_link(dctx)}::{local_class.html_link(dctx)}"
end
- meth known_intro_class(dctx: DocContext): MMLocalClass
+ fun known_intro_class(dctx: DocContext): MMLocalClass
do
var mod = dctx.known_owner_of(global.intro.local_class.module)
var cla = mod[global.intro.local_class.global]
return cla
end
- redef meth prototype_head(dctx)
+ redef fun prototype_head(dctx)
do
var res = new Buffer
var intro_class = known_intro_class(dctx)
@@ -447,7 +449,7 @@ special MMEntity
return res.to_s
end
- redef meth prototype_body(dctx)
+ redef fun prototype_body(dctx)
do
var res = new Buffer
res.append(signature.to_html(dctx))
@@ -462,7 +464,7 @@ special MMEntity
return res.to_s
end
- redef meth need_doc(dctx)
+ redef fun need_doc(dctx)
do
if global.visibility_level >= 3 or self isa MMAttribute then
if not dctx.intrude_mode then return false
@@ -474,7 +476,7 @@ special MMEntity
return doc != null
end
- redef meth short_doc
+ redef fun short_doc
do
var d = doc
if d != null then
@@ -486,7 +488,7 @@ special MMEntity
end
end
- redef meth doc
+ redef fun doc
do
var n = node
if n == null or not node isa PPropdef then
@@ -494,10 +496,10 @@ special MMEntity
end
assert n isa PPropdef
var d = n.n_doc
- assert d isa ADoc
if d == null then
return null
end
+ assert d isa ADoc
if d.n_comment.is_empty then
return null
else
@@ -506,18 +508,18 @@ special MMEntity
end
end
redef class MMMethod
- redef meth kind do return if global.is_init then "init" else "meth"
+ redef fun kind do return if global.is_init then "init" else "meth"
end
redef class MMAttribute
- redef meth kind do return "attr"
+ redef fun kind do return "attr"
end
redef class MMTypeProperty
- redef meth kind do return "type"
+ redef fun kind do return "type"
end
redef class MMSrcModule
# Extract and generate html file for the module
- meth extract_module_doc(dctx: DocContext)
+ fun extract_module_doc(dctx: DocContext)
do
dctx.register(self)
@@ -540,12 +542,12 @@ redef class MMSrcModule
end
end
- meth extract_module_doc_inside(dctx: DocContext)
+ fun extract_module_doc_inside(dctx: DocContext)
do
dctx.add_header("Module {self}")
dctx.add("Module {self}\n
{self}{module.html_link(dctx)}::{prototype_head(dctx)}{self}{prototype_body(dctx)}\n") dctx.add(" \n") @@ -840,13 +842,13 @@ special MMEntity dctx.add(" \n") end - meth pass_name(pass: Int): String + fun pass_name(pass: Int): String do var names = once ["Virtual Types", "Consructors", "Methods", "Attributes"] return names[pass] end - meth accept_prop(p: MMLocalProperty, pass: Int): Bool + fun accept_prop(p: MMLocalProperty, pass: Int): Bool do if pass == 0 then return p isa MMTypeProperty @@ -860,7 +862,7 @@ special MMEntity abort end - meth property_summary(dctx: DocContext, pass: Int): Array[MMLocalProperty] + fun property_summary(dctx: DocContext, pass: Int): Array[MMLocalProperty] do var passname = pass_name(pass) dctx.open_stage @@ -875,10 +877,12 @@ special MMEntity if p.local_class != self or not p.need_doc(dctx) then var cla = new Array[MMLocalClass] for m in dctx.owned_modules do + if not m.global_classes.has(global) then continue var c = m[global] - if c == null or not c isa MMConcreteClass then continue + if not c isa MMConcreteClass then continue + if not c.has_global_property(g) then continue var p2 = c[g] - if p2 == null or p2.local_class != c or not p2.need_doc(dctx) then continue + if p2.local_class != c or not p2.need_doc(dctx) then continue cla.add(c) end if cla.is_empty then continue @@ -907,7 +911,7 @@ special MMEntity if c isa MMSrcLocalClass then var km = dctx.known_owner_of(c.module) var kc = km[c.global] - if kc == self or not c isa MMConcreteClass then continue + if kc == self then continue var props: Array[MMLocalProperty] if km == module then if cmap.has_key(kc) then @@ -1002,7 +1006,7 @@ special MMEntity return new_props end - meth property_detail(dctx: DocContext, pass: Int, new_props: Array[MMLocalProperty]) + fun property_detail(dctx: DocContext, pass: Int, new_props: Array[MMLocalProperty]) do var passname = pass_name(pass) dctx.open_stage @@ -1030,7 +1034,7 @@ special MMEntity end # Add rows for properties inheriterd to some heirs - meth properties_inherited_from(dctx: DocContext, heir: MMLocalClass, pass: Int) + fun properties_inherited_from(dctx: DocContext, heir: MMLocalClass, pass: Int) do var properties = new Array[String] for g in global_properties do @@ -1052,7 +1056,7 @@ special MMEntity end redef class MMSrcLocalClass - redef meth short_doc + redef fun short_doc do var d = doc if d != null then @@ -1065,7 +1069,7 @@ redef class MMSrcLocalClass end end - redef meth doc + redef fun doc do var n = nodes.first if not n isa AClassdef then @@ -1073,10 +1077,10 @@ redef class MMSrcLocalClass end assert n isa AClassdef var d = n.n_doc - assert d isa ADoc if d == null then return null end + assert d isa ADoc if d.n_comment.is_empty then return null else @@ -1084,7 +1088,7 @@ redef class MMSrcLocalClass end end - redef meth need_doc(dctx) + redef fun need_doc(dctx) do if global.visibility_level >= 3 then if not dctx.intrude_mode then return false @@ -1104,7 +1108,7 @@ end redef class MMSignature # Htlm transcription of the signature (with nested links) - meth to_html(dctx: DocContext): String + fun to_html(dctx: DocContext): String do var res = new Buffer if arity > 0 then @@ -1126,15 +1130,15 @@ end redef class MMType # Htlm transcription of the type (with nested links) - meth html_link(dctx: DocContext): String do return to_s + fun html_link(dctx: DocContext): String do return to_s end redef class MMTypeSimpleClass - redef meth html_link(dctx) do return local_class.html_link(dctx) + redef fun html_link(dctx) do return local_class.html_link(dctx) end redef class MMTypeGeneric - redef meth html_link(dctx) + redef fun html_link(dctx) do var res = new Buffer res.append(local_class.html_link(dctx)) |