Skip to content

Commit 6bd0ddf

Browse files
committed
Fix navigate-to-source for generic types
1 parent 438f261 commit 6bd0ddf

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

CSharpRepl.Services/SymbolExploration/SymbolExplorer.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public async Task<SymbolResult> LookupSymbolAtPosition(string text, int position
7777
.Select(t => assemblyReader.GetTypeDefinition(t))
7878
.FirstOrDefault(t =>
7979
assemblyReader.GetString(t.Namespace) == symbolAtPosition.ContainingNamespace.ToDisplayString()
80-
&& assemblyReader.GetString(t.Name) == (symbolAtPosition.ContainingType?.Name ?? symbolAtPosition.Name)
80+
&& assemblyReader.GetString(t.Name) == (symbolAtPosition.ContainingType?.Name ?? symbolAtPosition.MetadataName)
8181
);
8282

8383
using var debugSymbolLoader = new DebugSymbolLoader(assemblyFilePath);
@@ -163,6 +163,15 @@ orderby node.Span.Length
163163
m => m
164164
);
165165

166+
private static SequencePointRange? FindConstructor(MetadataReader symbolReader, MetadataReader assemblyReader, TypeDefinition type, IMethodSymbol method) =>
167+
FindSequencePoint(
168+
symbolReader,
169+
type.GetMethods(),
170+
m => assemblyReader.GetMethodDefinition(m),
171+
m => assemblyReader.GetString(m.Name) == method.Name,
172+
m => m
173+
);
174+
166175
private static SequencePointRange? FindProperty(MetadataReader symbolReader, MetadataReader assemblyReader, TypeDefinition type, IPropertySymbol method) =>
167176
FindSequencePoint(
168177
symbolReader,

CSharpRepl.Tests/SymbolExplorerTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ public async Task GetSymbolAtIndex_ClassInSourceLinkedAssembly_ReturnsSourceLink
4242
Assert.EndsWith("Console.cs", symbol.Url);
4343
}
4444

45+
[Fact]
46+
public async Task GetGenericSymbolAtIndex_ClassInSourceLinkedAssembly_ReturnsSourceLinkUrl()
47+
{
48+
// should return a string like https://www.github.com/dotnet/runtime/blob/208e377a5329ad6eb1db5e5fb9d4590fa50beadd/src/libraries/System.Console/src/System/Console.cs
49+
var symbol = await services.GetSymbolAtIndexAsync(@"List<string>", "Li".Length);
50+
51+
Assert.StartsWith("https://www.github.com/dotnet/runtime/", symbol.Url);
52+
Assert.EndsWith("List.cs", symbol.Url);
53+
}
54+
4555
[Fact]
4656
public async Task GetSymbolAtIndex_MethodInSourceLinkedAssembly_ReturnsSourceLinkUrl()
4757
{

0 commit comments

Comments
 (0)