]> git.lizzy.rs Git - rust.git/blobdiff - src/imports.rs
Change `print_diff` to output the correct line number.
[rust.git] / src / imports.rs
index b3408bf7bf26a4103c876ccd953d5f0c7e04ad98..3ca063a58e72655118401627bac52e3aff59f8ff 100644 (file)
@@ -15,7 +15,7 @@
 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 @@ fn remove_alias(&self) -> 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 @@ fn from_path_segment(
         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)
+            }
         })
     }
 }
@@ -175,7 +179,7 @@ pub fn merge_use_trees(use_trees: Vec<UseTree>) -> Vec<UseTree> {
 fn merge_use_trees_inner(trees: &mut Vec<UseTree>, use_tree: UseTree) {
     for tree in trees.iter_mut() {
         if tree.share_prefix(&use_tree) {
-            tree.merge(use_tree);
+            tree.merge(&use_tree);
             return;
         }
     }
@@ -313,8 +317,13 @@ fn from_ast(
             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);
             }
         }
@@ -527,7 +536,7 @@ fn flatten(self) -> Vec<UseTree> {
         }
     }
 
-    fn merge(&mut self, other: UseTree) {
+    fn merge(&mut self, other: &UseTree) {
         let mut new_path = vec![];
         for (a, b) in self
             .path