modelbuilder: fill the `mdoc` of entities
authorJean Privat <jean@pryen.org>
Wed, 19 Mar 2014 19:41:55 +0000 (15:41 -0400)
committerJean Privat <jean@pryen.org>
Wed, 19 Mar 2014 19:41:55 +0000 (15:41 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/modelbuilder.nit
src/modelize_class.nit
src/modelize_property.nit

index a97535e..fa86cf2 100644 (file)
@@ -529,6 +529,11 @@ class ModelBuilder
                nmodules.add(nmodule)
                self.mmodule2nmodule[mmodule] = nmodule
 
+               if decl != null then
+                       var ndoc = decl.n_doc
+                       if ndoc != null then mmodule.mdoc = ndoc.to_mdoc
+               end
+
                return mmodule
        end
 
@@ -656,3 +661,30 @@ end
 redef class APrivateVisibility
        redef fun mvisibility do return private_visibility
 end
+
+redef class ADoc
+       private var mdoc_cache: nullable MDoc
+       fun to_mdoc: MDoc
+       do
+               var res = mdoc_cache
+               if res != null then return res
+               res = new MDoc
+               for c in n_comment do
+                       var text = c.text
+                       if text.length < 2 then
+                               res.content.add ""
+                               continue
+                       end
+                       assert text.chars[0] == '#'
+                       if text.chars[1] == ' ' then
+                               text = text.substring_from(2) # eat starting `#` and space
+                       else
+                               text = text.substring_from(1) # eat atarting `#` only
+                       end
+                       if text.chars.last == '\n' then text = text.substring(0, text.length-1) # drop \n
+                       res.content.add(text)
+               end
+               mdoc_cache = res
+               return res
+       end
+end
index e8a207b..34b5c28 100644 (file)
@@ -161,6 +161,11 @@ redef class ModelBuilder
                nclassdef.mclassdef = mclassdef
                self.mclassdef2nclassdef[mclassdef] = nclassdef
 
+               if nclassdef isa AStdClassdef then
+                       var ndoc = nclassdef.n_doc
+                       if ndoc != null then mclassdef.mdoc = ndoc.to_mdoc
+               end
+
                if mclassdef.is_intro then
                        self.toolcontext.info("{mclassdef} introduces new {mclass.kind} {mclass.full_name}", 3)
                else
index 980dfc7..1245af5 100644 (file)
@@ -238,6 +238,12 @@ redef class APropdef
                return mvisibility
        end
 
+       private fun set_doc(mpropdef: MPropDef)
+       do
+               var ndoc = self.n_doc
+               if ndoc != null then mpropdef.mdoc = ndoc.to_mdoc
+       end
+
        private fun check_redef_property_visibility(modelbuilder: ModelBuilder, nclassdef: AClassdef, nvisibility: nullable AVisibility, mprop: MProperty)
        do
                if nvisibility == null then return
@@ -416,6 +422,8 @@ redef class AMethPropdef
 
                mclassdef.propdef_names.add(mpropdef.mproperty.name)
 
+               set_doc(mpropdef)
+
                self.mpropdef = mpropdef
                modelbuilder.mpropdef2npropdef[mpropdef] = self
                if mpropdef.is_intro then
@@ -594,6 +602,7 @@ redef class AAttrPropdef
                        var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
                        self.mpropdef = mpropdef
                        modelbuilder.mpropdef2npropdef[mpropdef] = self
+                       set_doc(mpropdef)
 
                        var nreadable = self.n_readable
                        if nreadable != null then
@@ -612,6 +621,7 @@ redef class AAttrPropdef
                                var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location)
                                self.mreadpropdef = mreadpropdef
                                modelbuilder.mpropdef2npropdef[mreadpropdef] = self
+                               mreadpropdef.mdoc = mpropdef.mdoc
                        end
 
                        var nwritable = self.n_writable
@@ -631,6 +641,7 @@ redef class AAttrPropdef
                                var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location)
                                self.mwritepropdef = mwritepropdef
                                modelbuilder.mpropdef2npropdef[mwritepropdef] = self
+                               mwritepropdef.mdoc = mpropdef.mdoc
                        end
                else
                        # New attribute style
@@ -639,6 +650,7 @@ redef class AAttrPropdef
                        var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
                        self.mpropdef = mpropdef
                        modelbuilder.mpropdef2npropdef[mpropdef] = self
+                       set_doc(mpropdef)
 
                        var readname = name
                        var mreadprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, readname).as(nullable MMethod)
@@ -655,6 +667,7 @@ redef class AAttrPropdef
                        var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location)
                        self.mreadpropdef = mreadpropdef
                        modelbuilder.mpropdef2npropdef[mreadpropdef] = self
+                       mreadpropdef.mdoc = mpropdef.mdoc
 
                        var writename = name + "="
                        var nwritable = self.n_writable
@@ -681,6 +694,7 @@ redef class AAttrPropdef
                        var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location)
                        self.mwritepropdef = mwritepropdef
                        modelbuilder.mpropdef2npropdef[mwritepropdef] = self
+                       mwritepropdef.mdoc = mpropdef.mdoc
                end
        end
 
@@ -869,6 +883,7 @@ redef class ATypePropdef
 
                var mpropdef = new MVirtualTypeDef(mclassdef, mprop, self.location)
                self.mpropdef = mpropdef
+               set_doc(mpropdef)
        end
 
        redef fun build_signature(modelbuilder, nclassdef)