aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-11-19 18:13:36 +0000
committerAleksey Kladov <[email protected]>2019-11-19 18:13:36 +0000
commit83a8430e0a4f4c88e45a017a2212c981b42a4a7a (patch)
tree8a20a180f32e1fd9f1f48f1c92a1146c5bd7efcf
parent545c21923e2bc8daee889b26919256bb2ba55282 (diff)
:arrow_up: rowan
-rw-r--r--Cargo.lock6
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_syntax/src/algo.rs33
-rw-r--r--crates/ra_syntax/src/ast/extensions.rs2
4 files changed, 21 insertions, 22 deletions
diff --git a/Cargo.lock b/Cargo.lock
index fe08edd29..ef3735197 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1180,7 +1180,7 @@ dependencies = [
1180 "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1180 "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1181 "ra_parser 0.1.0", 1181 "ra_parser 0.1.0",
1182 "ra_text_edit 0.1.0", 1182 "ra_text_edit 0.1.0",
1183 "rowan 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1183 "rowan 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
1184 "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1184 "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
1185 "rustc_lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1185 "rustc_lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1186 "smol_str 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", 1186 "smol_str 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1445,7 +1445,7 @@ dependencies = [
1445 1445
1446[[package]] 1446[[package]]
1447name = "rowan" 1447name = "rowan"
1448version = "0.6.3" 1448version = "0.7.0"
1449source = "registry+https://github.com/rust-lang/crates.io-index" 1449source = "registry+https://github.com/rust-lang/crates.io-index"
1450dependencies = [ 1450dependencies = [
1451 "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1451 "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1993,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1993"checksum relative-path 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bedde000f40f2921ce439ea165c9c53fd629bfa115140c72e22aceacb4a21954" 1993"checksum relative-path 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bedde000f40f2921ce439ea165c9c53fd629bfa115140c72e22aceacb4a21954"
1994"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 1994"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
1995"checksum ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ece421e0c4129b90e4a35b6f625e472e96c552136f5093a2f4fa2bbb75a62d5" 1995"checksum ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ece421e0c4129b90e4a35b6f625e472e96c552136f5093a2f4fa2bbb75a62d5"
1996"checksum rowan 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fc3a6fb2a35518af7cab43ec4e21ca82eb086a8b3bb1739e426dc3923d459607" 1996"checksum rowan 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d3a241900475bf2ba302061550ff50c82b45095ca95d23d1872345793fd42407"
1997"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1997"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
1998"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8" 1998"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8"
1999"checksum rustc_lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5" 1999"checksum rustc_lexer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5"
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index 45a18a73f..5db2b58c0 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -12,7 +12,7 @@ doctest = false
12 12
13[dependencies] 13[dependencies]
14itertools = "0.8.0" 14itertools = "0.8.0"
15rowan = "0.6.1" 15rowan = "0.7.0"
16rustc_lexer = "0.1.0" 16rustc_lexer = "0.1.0"
17rustc-hash = "1.0.1" 17rustc-hash = "1.0.1"
18arrayvec = "0.5.1" 18arrayvec = "0.5.1"
diff --git a/crates/ra_syntax/src/algo.rs b/crates/ra_syntax/src/algo.rs
index 7cfea70f9..1c075082a 100644
--- a/crates/ra_syntax/src/algo.rs
+++ b/crates/ra_syntax/src/algo.rs
@@ -134,23 +134,19 @@ pub fn insert_children(
134 to_green_element(element) 134 to_green_element(element)
135 }); 135 });
136 136
137 let old_children = parent.green().children(); 137 let mut old_children = parent.green().children().map(|it| match it {
138 NodeOrToken::Token(it) => NodeOrToken::Token(it.clone()),
139 NodeOrToken::Node(it) => NodeOrToken::Node(it.clone()),
140 });
138 141
139 let new_children = match &position { 142 let new_children = match &position {
140 InsertPosition::First => { 143 InsertPosition::First => to_insert.chain(old_children).collect::<Box<[_]>>(),
141 to_insert.chain(old_children.iter().cloned()).collect::<Box<[_]>>() 144 InsertPosition::Last => old_children.chain(to_insert).collect::<Box<[_]>>(),
142 }
143 InsertPosition::Last => old_children.iter().cloned().chain(to_insert).collect::<Box<[_]>>(),
144 InsertPosition::Before(anchor) | InsertPosition::After(anchor) => { 145 InsertPosition::Before(anchor) | InsertPosition::After(anchor) => {
145 let take_anchor = if let InsertPosition::After(_) = position { 1 } else { 0 }; 146 let take_anchor = if let InsertPosition::After(_) = position { 1 } else { 0 };
146 let split_at = position_of_child(parent, anchor.clone()) + take_anchor; 147 let split_at = position_of_child(parent, anchor.clone()) + take_anchor;
147 let (before, after) = old_children.split_at(split_at); 148 let before = old_children.by_ref().take(split_at).collect::<Vec<_>>();
148 before 149 before.into_iter().chain(to_insert).chain(old_children).collect::<Box<[_]>>()
149 .iter()
150 .cloned()
151 .chain(to_insert)
152 .chain(after.iter().cloned())
153 .collect::<Box<[_]>>()
154 } 150 }
155 }; 151 };
156 152
@@ -168,13 +164,16 @@ pub fn replace_children(
168) -> SyntaxNode { 164) -> SyntaxNode {
169 let start = position_of_child(parent, to_delete.start().clone()); 165 let start = position_of_child(parent, to_delete.start().clone());
170 let end = position_of_child(parent, to_delete.end().clone()); 166 let end = position_of_child(parent, to_delete.end().clone());
171 let old_children = parent.green().children(); 167 let mut old_children = parent.green().children().map(|it| match it {
168 NodeOrToken::Token(it) => NodeOrToken::Token(it.clone()),
169 NodeOrToken::Node(it) => NodeOrToken::Node(it.clone()),
170 });
172 171
173 let new_children = old_children[..start] 172 let before = old_children.by_ref().take(start).collect::<Vec<_>>();
174 .iter() 173 let new_children = before
175 .cloned() 174 .into_iter()
176 .chain(to_insert.map(to_green_element)) 175 .chain(to_insert.map(to_green_element))
177 .chain(old_children[end + 1..].iter().cloned()) 176 .chain(old_children.skip(end + 1 - start))
178 .collect::<Box<[_]>>(); 177 .collect::<Box<[_]>>();
179 with_children(parent, new_children) 178 with_children(parent, new_children)
180} 179}
diff --git a/crates/ra_syntax/src/ast/extensions.rs b/crates/ra_syntax/src/ast/extensions.rs
index 761b2435c..4851dacb2 100644
--- a/crates/ra_syntax/src/ast/extensions.rs
+++ b/crates/ra_syntax/src/ast/extensions.rs
@@ -32,7 +32,7 @@ impl ast::NameRef {
32} 32}
33 33
34fn text_of_first_token(node: &SyntaxNode) -> &SmolStr { 34fn text_of_first_token(node: &SyntaxNode) -> &SmolStr {
35 node.green().children().first().and_then(|it| it.as_token()).unwrap().text() 35 node.green().children().next().and_then(|it| it.into_token()).unwrap().text()
36} 36}
37 37
38impl ast::Attr { 38impl ast::Attr {