diff --git a/src/EditorFeatures/Test2/EditorServicesTest2.vbproj b/src/EditorFeatures/Test2/EditorServicesTest2.vbproj
index e00b081389c657307e94e4d95b0c1a402a42fd81..89579920efa15f92b8a6ee62791b33a088f5e7fa 100644
--- a/src/EditorFeatures/Test2/EditorServicesTest2.vbproj
+++ b/src/EditorFeatures/Test2/EditorServicesTest2.vbproj
@@ -194,6 +194,7 @@
+
diff --git a/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.Tuples.vb b/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.Tuples.vb
new file mode 100644
index 0000000000000000000000000000000000000000..5bef568fb55e20ba82819d5419fc85b0d1e9d360
--- /dev/null
+++ b/src/EditorFeatures/Test2/FindReferences/FindReferencesTests.Tuples.vb
@@ -0,0 +1,234 @@
+' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+Imports System.Threading.Tasks
+
+Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences
+ Partial Public Class FindReferencesTests
+ Dim tuple2Doc As XElement =
+
+namespace System
+{
+ // struct with two values
+ public struct ValueTuple<T1, T2>
+ {
+ public T1 Item1;
+ public T2 Item2;
+
+ public ValueTuple(T1 item1, T2 item2)
+ {
+ this.Item1 = item1;
+ this.Item2 = item2;
+ }
+
+ public override string ToString()
+ {
+ return '{' + Item1?.ToString() + "", "" + Item2?.ToString() + '}';
+ }
+ }
+}
+
+
+
+ Public Async Function TestTupleFieldSameTuples01() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldSameTuples02() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldSameTuples03() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldSameTuplesMultidocument() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldDifferentTuples01() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldSameTuplesMatchOuterSymbols01() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+
+ Public Async Function TestTupleFieldSameTuplesMatchOuterSymbols02() As Task
+ Dim input =
+
+
+ <%= tuple2Doc %>
+
+
+
+
+ Await TestAPIAndFeature(input)
+ End Function
+
+ End Class
+End Namespace
diff --git a/src/EditorFeatures/Test2/GoToDefinition/GoToDefinitionTests.vb b/src/EditorFeatures/Test2/GoToDefinition/GoToDefinitionTests.vb
index ad3fee9687b0bd8642c43405a83991924732fb1f..d494328a84662c2f6535e595027849da1086dd4a 100644
--- a/src/EditorFeatures/Test2/GoToDefinition/GoToDefinitionTests.vb
+++ b/src/EditorFeatures/Test2/GoToDefinition/GoToDefinitionTests.vb
@@ -765,6 +765,245 @@ class C
Await TestAsync(workspace)
End Function
+#End Region
+
+#Region "CSharp TupleTests"
+ Dim tuple2Doc As XElement =
+
+namespace System
+{
+ // struct with two values
+ public struct ValueTuple<T1, T2>
+ {
+ public T1 Item1;
+ public T2 Item2;
+
+ public ValueTuple(T1 item1, T2 item2)
+ {
+ this.Item1 = item1;
+ this.Item2 = item2;
+ }
+
+ public override string ToString()
+ {
+ return '{' + Item1?.ToString() + "", "" + Item2?.ToString() + '}';
+ }
+ }
+}
+
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldEqualTuples01() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = ([|Alice|]: 1, Bob: 2);
+
+ var y = (Alice: 1, Bob: 2);
+
+ var z1 = x.$$Alice;
+ var z2 = y.Alice;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldEqualTuples02() As Task
+ Dim workspace =
+
+
+
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = (Alice: 1, Bob: 2);
+
+ var y = ([|Alice|]: 1, Bob: 2);
+
+ var z1 = x.Alice;
+ var z2 = y.$$Alice;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldMatchToOuter01() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = ([|Program|]: 1, Main: 2);
+
+ var z = x.$$Program;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldMatchToOuter02() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = ([|Pro$$gram|]: 1, Main: 2);
+
+ var z = x.Program;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldMatchToOuter03() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = (1,2,3,4,5,6,7,8,9,10, [|Program|]: 1, Main: 2);
+
+ var z = x.$$Program;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldRedeclared01() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ (int [|Alice|], int Bob) x = (Alice: 1, Bob: 2);
+
+ var z1 = x.$$Alice;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldRedeclared02() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ (string Alice, int Bob) x = ([|Al$$ice|]: null, Bob: 2);
+
+ var z1 = x.Alice;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldItem01() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = ([|1|], Bob: 2);
+
+ var z1 = x.$$Item1;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
+
+
+ Public Async Function TestCSharpGotoDefinitionTupleFieldItem02() As Task
+ Dim workspace =
+
+
+ <%= tuple2Doc %>
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var x = ([|Alice|]: 1, Bob: 2);
+
+ var z1 = x.$$Item1;
+ }
+ }
+
+
+
+
+ Await TestAsync(workspace)
+ End Function
#End Region