From e2d51aeb418391e89b9148ef5600df258fdb6e7f Mon Sep 17 00:00:00 2001 From: topecongiro Date: Wed, 14 Jun 2017 00:09:05 +0900 Subject: [PATCH] Use correct span for MetaItem --- src/visitor.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/visitor.rs b/src/visitor.rs index 08ff3cd4c61..7e3fed3faff 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -713,6 +713,12 @@ impl Rewrite for ast::NestedMetaItem { } } +fn count_missing_closing_parens(s: &str) -> u32 { + let op_parens = s.chars().filter(|c| *c == '(').count(); + let cl_parens = s.chars().filter(|c| *c == ')').count(); + op_parens.checked_sub(cl_parens).unwrap_or(0) as u32 +} + impl Rewrite for ast::MetaItem { fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option { Some(match self.node { @@ -723,15 +729,21 @@ impl Rewrite for ast::MetaItem { let item_shape = try_opt!(shape.shrink_left(name.len() + 3).and_then( |s| s.sub_width(2), )); + let hi = self.span.hi + + BytePos(count_missing_closing_parens(&context.snippet(self.span))); let items = itemize_list( context.codemap, list.iter(), ")", |nested_meta_item| nested_meta_item.span.lo, - |nested_meta_item| nested_meta_item.span.hi, + // FIXME: Span from MetaItem is missing closing parens. + |nested_meta_item| { + let snippet = context.snippet(nested_meta_item.span); + nested_meta_item.span.hi + BytePos(count_missing_closing_parens(&snippet)) + }, |nested_meta_item| nested_meta_item.rewrite(context, item_shape), self.span.lo, - self.span.hi, + hi, ); let item_vec = items.collect::>(); let fmt = ListFormatting {