File tree 1 file changed +55
-3
lines changed
src/tools/rust-analyzer/crates/ide-assists/src/handlers
1 file changed +55
-3
lines changed Original file line number Diff line number Diff line change @@ -128,10 +128,12 @@ fn update_expr_string_without_newline(expr_string: String) -> String {
128
128
}
129
129
130
130
fn update_expr_string_with_pat ( expr_str : String , whitespace_pat : & [ char ] ) -> String {
131
- // Remove leading whitespace, index [1..] to remove the leading '{',
131
+ // Remove leading whitespace, index to remove the leading '{',
132
132
// then continue to remove leading whitespace.
133
- let expr_str =
134
- expr_str. trim_start_matches ( whitespace_pat) [ 1 ..] . trim_start_matches ( whitespace_pat) ;
133
+ // We cannot assume the `{` is the first character because there are block modifiers
134
+ // (`unsafe`, `async` etc.).
135
+ let after_open_brace_index = expr_str. find ( '{' ) . map_or ( 0 , |it| it + 1 ) ;
136
+ let expr_str = expr_str[ after_open_brace_index..] . trim_start_matches ( whitespace_pat) ;
135
137
136
138
// Remove trailing whitespace, index [..expr_str.len() - 1] to remove the trailing '}',
137
139
// then continue to remove trailing whitespace.
@@ -824,6 +826,56 @@ fn main() {
824
826
let a = 1;
825
827
let x = foo;
826
828
}
829
+ "# ,
830
+ ) ;
831
+ }
832
+
833
+ #[ test]
834
+ fn unwrap_block_with_modifiers ( ) {
835
+ // https://github.com/rust-lang/rust-analyzer/issues/17964
836
+ check_assist (
837
+ unwrap_block,
838
+ r#"
839
+ fn main() {
840
+ unsafe $0{
841
+ bar;
842
+ }
843
+ }
844
+ "# ,
845
+ r#"
846
+ fn main() {
847
+ bar;
848
+ }
849
+ "# ,
850
+ ) ;
851
+ check_assist (
852
+ unwrap_block,
853
+ r#"
854
+ fn main() {
855
+ async move $0{
856
+ bar;
857
+ }
858
+ }
859
+ "# ,
860
+ r#"
861
+ fn main() {
862
+ bar;
863
+ }
864
+ "# ,
865
+ ) ;
866
+ check_assist (
867
+ unwrap_block,
868
+ r#"
869
+ fn main() {
870
+ try $0{
871
+ bar;
872
+ }
873
+ }
874
+ "# ,
875
+ r#"
876
+ fn main() {
877
+ bar;
878
+ }
827
879
"# ,
828
880
) ;
829
881
}
You can’t perform that action at this time.
0 commit comments