From cf57553679b59bc90caa3632762b8beda1896f9d Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Mon, 30 May 2011 16:22:58 -0700 Subject: [PATCH] Improve handling of trailing comments. --- src/comp/pretty/pprust.rs | 27 +++++++++++++++++++++++---- src/comp/util/common.rs | 7 +++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/comp/pretty/pprust.rs b/src/comp/pretty/pprust.rs index cd2d5f70a9cc..7128ffbe23a8 100644 --- a/src/comp/pretty/pprust.rs +++ b/src/comp/pretty/pprust.rs @@ -5,6 +5,8 @@ import std::option; import driver::session::session; import front::ast; import front::lexer; +import front::codemap; +import front::codemap::codemap; import middle::ty; import util::common; import pp; @@ -34,6 +36,7 @@ tag mode { } type ps = @rec(pp::printer s, + option::t[codemap] cm, option::t[vec[lexer::cmnt]] comments, mutable uint cur_cmnt, mode mode); @@ -42,6 +45,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out, mode mode) { auto cmnts = lexer::gather_comments(sess, filename); auto s = @rec(s=pp::mk_printer(out, default_columns), + cm=option::some[codemap](sess.get_codemap()), comments=option::some[vec[lexer::cmnt]](cmnts), mutable cur_cmnt=0u, mode=mode); @@ -52,6 +56,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out, fn ty_to_str(&@ast::ty ty) -> str { auto writer = io::string_writer(); auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns), + cm=option::none[codemap], comments=option::none[vec[lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -63,6 +68,7 @@ fn ty_to_str(&@ast::ty ty) -> str { fn block_to_str(&ast::block blk) -> str { auto writer = io::string_writer(); auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns), + cm=option::none[codemap], comments=option::none[vec[lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -76,6 +82,7 @@ fn block_to_str(&ast::block blk) -> str { fn pat_to_str(&@ast::pat p) -> str { auto writer = io::string_writer(); auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns), + cm=option::none[codemap], comments=option::none[vec[lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -1099,9 +1106,22 @@ fn maybe_print_comment(ps s, uint pos) { } fn maybe_print_line_comment(ps s, common::span span) -> bool { + auto cm; + alt (s.cm) { + case (option::some[codemap](?ccm)) { + cm = ccm; + } + case (_) { + ret false; + } + } alt (next_comment(s)) { case (option::some[lexer::cmnt](?cmnt)) { - if (span.hi + 4u >= cmnt.pos) { + if (cmnt.style != lexer::trailing) { ret false; } + + auto span_line = codemap::lookup_pos(cm, span.hi); + auto comment_line = codemap::lookup_pos(cm, cmnt.pos); + if (span_line.line == comment_line.line) { word(s.s, " "); print_comment(s, cmnt); s.cur_cmnt += 1u; @@ -1128,12 +1148,11 @@ fn print_remaining_comments(ps s) { fn print_comment(ps s, lexer::cmnt cmnt) { alt (cmnt.style) { case (lexer::isolated) { - cbox(s.s, 0u); + zerobreak(s.s); for (str line in cmnt.lines) { - zerobreak(s.s); word_and_eol(s.s, line); + zerobreak(s.s); } - end(s.s); zerobreak(s.s); } case (lexer::trailing) { diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs index e23e79f28bd4..88123740ac1c 100644 --- a/src/comp/util/common.rs +++ b/src/comp/util/common.rs @@ -8,6 +8,7 @@ import std::option::some; import front::ast; import front::ast::ty; import front::ast::pat; +import front::codemap::codemap; import middle::walk; import std::io::stdout; @@ -129,6 +130,7 @@ fn expr_to_str(&@ast::expr e) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -140,6 +142,7 @@ fn ty_to_str(&ty t) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -167,6 +170,7 @@ fn block_to_str(&ast::block b) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -179,6 +183,7 @@ fn item_to_str(&@ast::item i) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -202,6 +207,7 @@ fn fun_to_str(&ast::_fn f, str name, vec[ast::ty_param] params) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped); @@ -222,6 +228,7 @@ fn stmt_to_str(&ast::stmt st) -> str { let str_writer s = string_writer(); auto out_ = mk_printer(s.get_writer(), 80u); auto out = @rec(s=out_, + cm=none[codemap], comments=none[vec[front::lexer::cmnt]], mutable cur_cmnt=0u, mode=mo_untyped);