From d5ae43dbd92a4f35656cae57a857f6eedd53fac7 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 9 Feb 2017 13:14:39 -0500 Subject: [PATCH] nitc: dump_tree can display the lines of the source-code Signed-off-by: Jean Privat --- src/parser/parser_nodes.nit | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index e96d7b6..d8dc9eb 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -39,10 +39,15 @@ abstract class ANode fun is_structural: Bool do return false # Write the subtree on stdout. - # See `ASTDump` - fun dump_tree(display_structural: nullable Bool) + # + # Visit the subtree and display it with additional and useful information. + # + # By default, this displays all kind of nodes and the corresponding lines of codes. + # + # See `ASTDump` for details. + fun dump_tree(display_structural, display_line: nullable Bool) do - var d = new ASTDump(display_structural or else true) + var d = new ASTDump(display_structural or else true, display_line or else true) d.enter_visit(self) d.write_to(sys.stdout) end @@ -191,6 +196,14 @@ class ASTDump # Should tokens (and structural production like AQId) be displayed? var display_structural: Bool + # Display lines? + # + # Should each new line be displayed (numbered and in gray)? + var display_line: Bool + + # Current line number (when printing lines) + private var line = 0 + redef fun visit(n) do if not display_structural and n.is_structural then return @@ -201,6 +214,25 @@ class ASTDump last_parent = p end + redef fun write_line(o, n, p) + do + if display_line then + var ls = n.location.line_start + var file = n.location.file + var line = self.line + if ls > line and file != null then + if line == 0 then line = ls - 1 + while line < ls do + line += 1 + o.write "{line}\t{file.get_line(line)}\n".light_gray + end + self.line = ls + end + end + + super + end + redef fun display(n) do return "{n.class_name} {n.dump_info(self)} @{n.location}" -- 1.7.9.5