about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMaximilian Roos <m@maxroos.com>2018-08-31 00:19:12 -0400
committerMaximilian Roos <m@maxroos.com>2018-08-31 00:19:12 -0400
commitb1da2a53b489f86c17771a2b77acabdd236a115d (patch)
treee0d1948a92e105718ce0c07f5c9a9840d02af017 /src
parentaf7b341a50ae9fd94d2e6aec0fa75486a45f1691 (diff)
parentd88139893f71801ee7262db999832e6bbab02cc2 (diff)
Merge branch 'master' into clippy2
Diffstat (limited to 'src')
-rw-r--r--src/imports.rs15
-rw-r--r--src/items.rs6
2 files changed, 16 insertions, 5 deletions
diff --git a/src/imports.rs b/src/imports.rs
index b3408bf7bf2..db00c45b9d9 100644
--- a/src/imports.rs
+++ b/src/imports.rs
@@ -15,7 +15,7 @@ use syntax::ast::{self, UseTreeKind};
 use syntax::source_map::{self, BytePos, Span, DUMMY_SP};
 
 use comment::combine_strs_with_missing_comments;
-use config::IndentStyle;
+use config::{Edition, IndentStyle};
 use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListItem, Separator};
 use rewrite::{Rewrite, RewriteContext};
 use shape::Shape;
@@ -144,6 +144,7 @@ impl UseSegment {
     fn from_path_segment(
         context: &RewriteContext,
         path_seg: &ast::PathSegment,
+        modsep: bool,
     ) -> Option<UseSegment> {
         let name = rewrite_ident(context, path_seg.ident);
         if name.is_empty() || name == "{{root}}" {
@@ -152,7 +153,10 @@ impl UseSegment {
         Some(match name {
             "self" => UseSegment::Slf(None),
             "super" => UseSegment::Super(None),
-            _ => UseSegment::Ident((*name).to_owned(), None),
+            _ => {
+                let mod_sep = if modsep { "::" } else { "" };
+                UseSegment::Ident(format!("{}{}", mod_sep, name), None)
+            }
         })
     }
 }
@@ -313,8 +317,13 @@ impl UseTree {
             visibility,
             attrs,
         };
+
+        let leading_modsep = context.config.edition() == Edition::Edition2018
+            && a.prefix.to_string().len() > 2
+            && a.prefix.to_string().starts_with("::");
+
         for p in &a.prefix.segments {
-            if let Some(use_segment) = UseSegment::from_path_segment(context, p) {
+            if let Some(use_segment) = UseSegment::from_path_segment(context, p, leading_modsep) {
                 result.path.push(use_segment);
             }
         }
diff --git a/src/items.rs b/src/items.rs
index ff635137e42..7f8980dd150 100644
--- a/src/items.rs
+++ b/src/items.rs
@@ -2232,8 +2232,10 @@ fn rewrite_args(
 ) -> Option<String> {
     let mut arg_item_strs = args
         .iter()
-        .map(|arg| arg.rewrite(context, Shape::legacy(multi_line_budget, arg_indent)))
-        .collect::<Option<Vec<_>>>()?;
+        .map(|arg| {
+            arg.rewrite(context, Shape::legacy(multi_line_budget, arg_indent))
+                .unwrap_or_else(|| context.snippet(arg.span()).to_owned())
+        }).collect::<Vec<_>>();
 
     // Account for sugary self.
     // FIXME: the comment for the self argument is dropped. This is blocked