Repository: rust-analyzer/rust-analyzer
Pull request #10671 (2021-10-31 08:50:03)

minor: Run apt-get update for AArch64 builds


Patch:
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index c996d3dd44..e8b7ba4298 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -174,6 +174,9 @@ jobs:
         profile: minimal
         override: true
 
+    - name: Update apt repositories
+      run: sudo apt-get update
+
     - name: Install target toolchain
       run: sudo apt-get install gcc-aarch64-linux-gnu
 
diff --git a/crates/syntax/src/ast/generated/nodes.rs b/crates/syntax/src/ast/generated/nodes.rs
index 18a6e1410d..005e78c48a 100644
--- a/crates/syntax/src/ast/generated/nodes.rs
+++ b/crates/syntax/src/ast/generated/nodes.rs
@@ -850,6 +850,7 @@ pub struct ForExpr {
     pub(crate) syntax: SyntaxNode,
 }
 impl ast::HasAttrs for ForExpr {}
+impl ast::HasLoopBody for ForExpr {}
 impl ForExpr {
     pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) }
     pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) }
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs
index 98d142da3f..2e6544f090 100644
--- a/crates/syntax/src/ast/node_ext.rs
+++ b/crates/syntax/src/ast/node_ext.rs
@@ -754,15 +754,6 @@ impl ast::GenericParamList {
     }
 }
 
-impl ast::HasLoopBody for ast::ForExpr {
-    fn loop_body(&self) -> Option<ast::BlockExpr> {
-        let mut exprs = support::children(self.syntax());
-        let first = exprs.next();
-        let second = exprs.next();
-        second.or(first)
-    }
-}
-
 impl ast::HasDocComments for ast::SourceFile {}
 impl ast::HasDocComments for ast::Fn {}
 impl ast::HasDocComments for ast::Struct {}


Test patch:
diff --git a/crates/hir_ty/src/tests/regression.rs b/crates/hir_ty/src/tests/regression.rs
index 4a0a5d6fa1..67952edca3 100644
--- a/crates/hir_ty/src/tests/regression.rs
+++ b/crates/hir_ty/src/tests/regression.rs
@@ -1221,27 +1221,3 @@ fn mamba(a: U32!(), p: u32) -> u32 {
     "#,
     )
 }
-
-#[test]
-fn for_loop_block_expr_iterable() {
-    check_infer(
-        r#"
-fn test() {
-    for _ in { let x = 0; } {
-        let y = 0;
-    }
-}
-        "#,
-        expect![[r#"
-            10..68 '{     ...   } }': ()
-            16..66 'for _ ...     }': ()
-            20..21 '_': {unknown}
-            25..39 '{ let x = 0; }': ()
-            31..32 'x': i32
-            35..36 '0': i32
-            40..66 '{     ...     }': ()
-            54..55 'y': i32
-            58..59 '0': i32
-        "#]],
-    );
-}
diff --git a/crates/syntax/src/tests/sourcegen_ast.rs b/crates/syntax/src/tests/sourcegen_ast.rs
index dcd813bbe0..36fedd2f0b 100644
--- a/crates/syntax/src/tests/sourcegen_ast.rs
+++ b/crates/syntax/src/tests/sourcegen_ast.rs
@@ -81,17 +81,10 @@ fn generate_nodes(kinds: KindsSrc<'_>, grammar: &AstSrc) -> String {
         .map(|node| {
             let name = format_ident!("{}", node.name);
             let kind = format_ident!("{}", to_upper_snake_case(&node.name));
-            let traits = node
-                .traits
-                .iter()
-                .filter(|trait_name| {
-                    // For loops have two expressions so this might collide, therefor manual impl it
-                    node.name != "ForExpr" || trait_name.as_str() != "HasLoopBody"
-                })
-                .map(|trait_name| {
-                    let trait_name = format_ident!("{}", trait_name);
-                    quote!(impl ast::#trait_name for #name {})
-                });
+            let traits = node.traits.iter().map(|trait_name| {
+                let trait_name = format_ident!("{}", trait_name);
+                quote!(impl ast::#trait_name for #name {})
+            });
 
             let methods = node.fields.iter().map(|field| {
                 let method_name = field.method_name();