From 4267c38db1b822ad169f08acb38c689412fefff1 Mon Sep 17 00:00:00 2001
From: Jonas Schievink <jonasschievink@gmail.com>
Date: Fri, 23 Jul 2021 20:20:23 +0200
Subject: [PATCH 1/2] Add tests for tuple struct field completion

---
 crates/ide_completion/src/completions/dot.rs | 36 +++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/crates/ide_completion/src/completions/dot.rs b/crates/ide_completion/src/completions/dot.rs
index 6208b89728d..7d7942429ed 100644
--- a/crates/ide_completion/src/completions/dot.rs
+++ b/crates/ide_completion/src/completions/dot.rs
@@ -213,6 +213,23 @@ fn foo(a: lib::m::A) { a.$0 }
             "#]],
         );
 
+        check(
+            r#"
+//- /lib.rs crate:lib new_source_root:library
+pub mod m {
+    pub struct A(
+        i32,
+        pub f64,
+    );
+}
+//- /main.rs crate:main deps:lib new_source_root:local
+fn foo(a: lib::m::A) { a.$0 }
+"#,
+            expect![[r#"
+                fd 1 f64
+            "#]],
+        );
+
         check(
             r#"
 //- /lib.rs crate:lib new_source_root:local
@@ -405,7 +422,24 @@ fn foo() {
                 fd 0 i32
                 fd 1 f64
             "#]],
-        )
+        );
+    }
+
+    #[test]
+    fn test_tuple_struct_field_completion() {
+        check(
+            r#"
+struct S(i32, f64);
+fn foo() {
+   let b = S(0, 3.14);
+   b.$0
+}
+"#,
+            expect![[r#"
+                fd 0 i32
+                fd 1 f64
+            "#]],
+        );
     }
 
     #[test]

From c495a7374f93a357bd2299d9f1910e9f678dadce Mon Sep 17 00:00:00 2001
From: Jonas Schievink <jonasschievink@gmail.com>
Date: Fri, 23 Jul 2021 20:20:41 +0200
Subject: [PATCH 2/2] Resolve tuple field visibility FIXME

---
 crates/ide_completion/src/completions/dot.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/crates/ide_completion/src/completions/dot.rs b/crates/ide_completion/src/completions/dot.rs
index 7d7942429ed..fc3f9005e70 100644
--- a/crates/ide_completion/src/completions/dot.rs
+++ b/crates/ide_completion/src/completions/dot.rs
@@ -69,7 +69,7 @@ fn complete_fields(
             f(Either::Left(field), ty);
         }
         for (i, ty) in receiver.tuple_fields(ctx.db).into_iter().enumerate() {
-            // FIXME: Handle visibility
+            // Tuple fields are always public (tuple struct fields are handled above).
             f(Either::Right(i), ty);
         }
     }