metrics: ReadmeMetrics uses markdown2
authorAlexandre Terrasa <alexandre@moz-code.org>
Sun, 14 Jul 2019 15:37:52 +0000 (11:37 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Sun, 14 Jul 2019 15:37:52 +0000 (11:37 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/metrics/readme_metrics.nit
tests/sav/nitmetrics_args3.res

index f9126e4..7276e78 100644 (file)
@@ -19,7 +19,7 @@ module readme_metrics
 
 import metrics_base
 import model::model_collect
-import markdown
+import markdown2
 
 redef class ToolContext
 
@@ -47,69 +47,21 @@ private class ReadmeMetricsPhase
 end
 
 # A Markdown decorator that collects metrics about a Readme content
-class MetricsDecorator
-       super HTMLDecorator
+class MarkdownMetrics
+       super MdVisitor
 
-       # Count blocks
-       var block_counter = new Counter[String]
+       # Count nodes
+       var nodes_counter = new Counter[String]
 
-       # Count sections
-       var headline_counter = new Counter[Int]
+       # Count heading levels
+       var headings_counter = new Counter[Int]
 
-       redef fun add_ruler(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_headline(v, block) do
-               block_counter.inc block.class_name
-               headline_counter.inc block.depth
-               super
-       end
-
-       redef fun add_paragraph(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_code(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_blockquote(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_unorderedlist(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_orderedlist(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_listitem(v, block) do
-               block_counter.inc block.class_name
-               super
-       end
-
-       redef fun add_image(v, link, name, comment) do
-               block_counter.inc "Image"
-               super
-       end
-
-       redef fun add_link(v, link, name, comment) do
-               block_counter.inc "Link"
-               super
-       end
-
-       redef fun add_span_code(v, text, from, to) do
-               block_counter.inc "SpanCode"
-               super
+       redef fun visit(node) do
+               nodes_counter.inc node.class_name
+               if node isa MdHeading then
+                       headings_counter.inc node.level
+               end
+               node.visit_all self
        end
 end
 
@@ -206,8 +158,16 @@ class ReadmeMetric
                self["has_readme"] = 1
                self["md_lines"] = md_lines.length
 
-               collect_sections_metrics
-               collect_blocs_metrics
+               var parser = new MdParser
+               var node = parser.parse(md_lines.join("\n"))
+               var v = new MarkdownMetrics
+               v.enter_visit(node)
+               for md_node, value in v.nodes_counter do
+                       self[md_node] = value
+               end
+               for level, value in v.headings_counter do
+                       self["HL {level}"] = value
+               end
        end
 
        # Path to the package
@@ -242,29 +202,4 @@ class ReadmeMetric
                if path == null then return new Array[String]
                return path.to_path.read_lines
        end
-
-       # Markdown decorator used to visit Markdown content
-       var md_decorator: MetricsDecorator is lazy do
-               var md_decorator = new MetricsDecorator
-               var md_proc = new MarkdownProcessor
-               md_proc.decorator = md_decorator
-               md_proc.process(md_lines.join("\n"))
-               return md_decorator
-       end
-
-       # Collect metrics related to section headings
-       fun collect_sections_metrics do
-               self["nb_section"] = md_decorator.headline_counter.sum
-               for lvl, count in md_decorator.headline_counter do
-                       self["HL {lvl}"] = count
-               end
-       end
-
-       # Collect metrics related to Markdown blocks
-       fun collect_blocs_metrics do
-               self["md_blocks"] = md_decorator.block_counter.sum
-               for block, count in md_decorator.block_counter do
-                       self[block] = count
-               end
-       end
 end
index 8c804fd..b36a61b 100644 (file)
@@ -7,11 +7,11 @@ Warning: no source file for `excluded`
   * has_package 1
   * has_readme 1
   * md_lines 12
-  * nb_section 0
-  * md_blocks 14
-  * BlockParagraph 4
-  * BlockUnorderedList 1
-  * BlockListItem 4
-  * SpanCode 4
-  * Image 1
+  * MdDocument 1
+  * MdParagraph 8
+  * MdText 6
+  * MdUnorderedList 1
+  * MdListItem 4
+  * MdCode 4
+  * MdImage 1
 readme.csv