From aa1bf09d4aa36c7824ee9c58d62563b20d3534d1 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Sun, 14 Jul 2019 11:37:52 -0400 Subject: [PATCH] metrics: ReadmeMetrics uses markdown2 Signed-off-by: Alexandre Terrasa --- src/metrics/readme_metrics.nit | 111 +++++++++------------------------------- tests/sav/nitmetrics_args3.res | 14 ++--- 2 files changed, 30 insertions(+), 95 deletions(-) diff --git a/src/metrics/readme_metrics.nit b/src/metrics/readme_metrics.nit index f9126e4..7276e78 100644 --- a/src/metrics/readme_metrics.nit +++ b/src/metrics/readme_metrics.nit @@ -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 diff --git a/tests/sav/nitmetrics_args3.res b/tests/sav/nitmetrics_args3.res index 8c804fd..b36a61b 100644 --- a/tests/sav/nitmetrics_args3.res +++ b/tests/sav/nitmetrics_args3.res @@ -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 -- 1.7.9.5