diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-09-16 21:03:41 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-09-16 21:03:41 +0100 |
commit | 3877421373ef1439e53b7f7274865af287dbb47f (patch) | |
tree | a7180b968598a3ef53ef9587d43fb7842a98dc1a /crates/syntax | |
parent | 4bc8015370e3698248bc93184ef7ec5fefd2c1d4 (diff) | |
parent | 45298b5d2a8e7d1f962f3117de27957e393c03e2 (diff) |
Merge #5989
5989: Rewrite import merging r=jonas-schievink a=Veykril
Rewrites how import merging is being handled. It is now a recursive function to properly handle merging of intermediate levels in the import trees. With this ordering the imports is also now possible tho it doesn't quite order it the same way as `rustfmt` does yet, namely it orders lowercase identifiers after uppercase identifiers as that is the standard character order that rust uses. This also fixes a few weird behaviors that were visible in some of the `replace_qualified_name_with_use.rs` tests.
This really took longer than I was hoping for, fighting with import trees is quite the exhausting task 😅
Co-authored-by: Lukas Wirth <[email protected]>
Diffstat (limited to 'crates/syntax')
-rw-r--r-- | crates/syntax/src/ast/edit.rs | 1 | ||||
-rw-r--r-- | crates/syntax/src/ast/make.rs | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/crates/syntax/src/ast/edit.rs b/crates/syntax/src/ast/edit.rs index 8b1c65dd6..45cf31f13 100644 --- a/crates/syntax/src/ast/edit.rs +++ b/crates/syntax/src/ast/edit.rs | |||
@@ -347,6 +347,7 @@ impl ast::UseTree { | |||
347 | self.clone() | 347 | self.clone() |
348 | } | 348 | } |
349 | 349 | ||
350 | /// Splits off the given prefix, making it the path component of the use tree, appending the rest of the path to all UseTreeList items. | ||
350 | #[must_use] | 351 | #[must_use] |
351 | pub fn split_prefix(&self, prefix: &ast::Path) -> ast::UseTree { | 352 | pub fn split_prefix(&self, prefix: &ast::Path) -> ast::UseTree { |
352 | let suffix = if self.path().as_ref() == Some(prefix) && self.use_tree_list().is_none() { | 353 | let suffix = if self.path().as_ref() == Some(prefix) && self.use_tree_list().is_none() { |
diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index 25e8a359d..6868feed9 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs | |||
@@ -38,6 +38,10 @@ pub fn path_from_text(text: &str) -> ast::Path { | |||
38 | ast_from_text(text) | 38 | ast_from_text(text) |
39 | } | 39 | } |
40 | 40 | ||
41 | pub fn glob_use_tree() -> ast::UseTree { | ||
42 | ast_from_text("use *;") | ||
43 | } | ||
44 | |||
41 | pub fn use_tree( | 45 | pub fn use_tree( |
42 | path: ast::Path, | 46 | path: ast::Path, |
43 | use_tree_list: Option<ast::UseTreeList>, | 47 | use_tree_list: Option<ast::UseTreeList>, |