Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Respond to Roslyn URI protocol changes #11390

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
<add key="richnav" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-buildservices/nuget/v3/index.json" />
<!-- Used for BenchmarkDotNet prerelease packages -->
<add key="benchmark-dotnet-prerelease" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/benchmark-dotnet-prerelease/nuget/v3/index.json" />
<add key="local" value="C:\Users\dabarbet\source\repos\roslyn\artifacts\packages\Debug\Shipping" />
<add key="localnonshipping" value="C:\Users\dabarbet\source\repos\roslyn\artifacts\packages\Debug\NonShipping" />
</packageSources>
<!--
****************************** AUTOGENERATED ***********************************
Expand All @@ -42,6 +44,12 @@
-->
<packageSourceMapping>
<clear />
<packageSource key="local">
<package pattern="microsoft.*" />
</packageSource>
<packageSource key="localnonshipping">
<package pattern="microsoft.*" />
</packageSource>
<packageSource key="dotnet-core-internal-tooling">
<package pattern="microsoft.*" />
</packageSource>
Expand Down
38 changes: 19 additions & 19 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -53,25 +53,25 @@
<MicrosoftSourceBuildIntermediatearcadePackageVersion>9.0.0-beta.24572.2</MicrosoftSourceBuildIntermediatearcadePackageVersion>
<MicrosoftDotNetXliffTasksPackageVersion>1.0.0-beta.23475.1</MicrosoftDotNetXliffTasksPackageVersion>
<MicrosoftSourceBuildIntermediatexlifftasksPackageVersion>1.0.0-beta.23475.1</MicrosoftSourceBuildIntermediatexlifftasksPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>4.13.0-3.25057.3</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftCommonLanguageServerProtocolFrameworkPackageVersion>4.13.0-3.25057.3</MicrosoftCommonLanguageServerProtocolFrameworkPackageVersion>
<MicrosoftCodeAnalysisExternalAccessRazorPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisExternalAccessRazorPackageVersion>
<MicrosoftCodeAnalysisCommonPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisCommonPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpEditorFeaturesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisCSharpEditorFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisEditorFeaturesPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesCommonPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisEditorFeaturesCommonPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesTextPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisEditorFeaturesTextPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesWpfPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisEditorFeaturesWpfPackageVersion>
<MicrosoftCodeAnalysisRemoteServiceHubPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisRemoteServiceHubPackageVersion>
<MicrosoftCodeAnalysisTestUtilitiesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisTestUtilitiesPackageVersion>
<MicrosoftCodeAnalysisVisualBasicWorkspacesPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisVisualBasicWorkspacesPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>4.13.0-3.25057.3</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftSourceBuildIntermediateroslynPackageVersion>4.13.0-3.25057.3</MicrosoftSourceBuildIntermediateroslynPackageVersion>
<MicrosoftVisualStudioLanguageServicesPackageVersion>4.13.0-3.25057.3</MicrosoftVisualStudioLanguageServicesPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>4.14.0-dev</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftCommonLanguageServerProtocolFrameworkPackageVersion>4.14.0-dev</MicrosoftCommonLanguageServerProtocolFrameworkPackageVersion>
<MicrosoftCodeAnalysisExternalAccessRazorPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisExternalAccessRazorPackageVersion>
<MicrosoftCodeAnalysisCommonPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisCommonPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpEditorFeaturesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisCSharpEditorFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisEditorFeaturesPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesCommonPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisEditorFeaturesCommonPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesTextPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisEditorFeaturesTextPackageVersion>
<MicrosoftCodeAnalysisEditorFeaturesWpfPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisEditorFeaturesWpfPackageVersion>
<MicrosoftCodeAnalysisRemoteServiceHubPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisRemoteServiceHubPackageVersion>
<MicrosoftCodeAnalysisTestUtilitiesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisTestUtilitiesPackageVersion>
<MicrosoftCodeAnalysisVisualBasicWorkspacesPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisVisualBasicWorkspacesPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>4.14.0-dev</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftSourceBuildIntermediateroslynPackageVersion>4.14.0-dev</MicrosoftSourceBuildIntermediateroslynPackageVersion>
<MicrosoftVisualStudioLanguageServicesPackageVersion>4.14.0-dev</MicrosoftVisualStudioLanguageServicesPackageVersion>
<!--
Exception - Microsoft.Extensions.ObjectPool and System.Collections.Immutable packages are not updated by automation,
but are present in Version.Details.xml for source-build PVP flow. See the comment in Version.Details.xml for more information.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ namespace Roslyn.LanguageServer.Protocol;
internal static partial class RoslynLspExtensions
{
public static void Deconstruct(this Location position, out Uri uri, out Range range)
=> (uri, range) = (position.Uri, position.Range);
=> (uri, range) = (position.Uri.GetRequiredUri(), position.Range);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static partial class RoslynLspExtensions
/// <summary>
/// Returns a copy of the passed in <see cref="TextDocumentIdentifier"/> with the passed in <see cref="Uri"/>.
/// </summary>
public static TextDocumentIdentifier WithUri(this TextDocumentIdentifier textDocumentIdentifier, Uri uri)
public static TextDocumentIdentifier WithUri(this TextDocumentIdentifier textDocumentIdentifier, DocumentUri uri)
{
if (textDocumentIdentifier is VSTextDocumentIdentifier vsTdi)
{
Expand All @@ -29,5 +29,8 @@ public static TextDocumentIdentifier WithUri(this TextDocumentIdentifier textDoc
}

public static RazorTextDocumentIdentifier ToRazorTextDocumentIdentifier(this TextDocumentIdentifier textDocumentIdentifier)
=> new RazorTextDocumentIdentifier(textDocumentIdentifier.Uri, (textDocumentIdentifier as VSTextDocumentIdentifier)?.ProjectContext?.Id);
=> new RazorTextDocumentIdentifier(textDocumentIdentifier.Uri.GetRequiredUri(), (textDocumentIdentifier as VSTextDocumentIdentifier)?.ProjectContext?.Id);

public static Uri GetRequiredUri(this DocumentUri documentUri)
=> documentUri.ParsedUri ?? throw new InvalidOperationException("DocumentUri must have a value.");
}
Original file line number Diff line number Diff line change
Expand Up @@ -161,16 +161,16 @@ public static Range CreateSingleLineRange((int line, int character) start, int l
=> CreateRange(CreatePosition(start), CreatePosition(start.line, start.character + length));

public static Location CreateLocation(Uri uri, Range range)
=> new() { Uri = uri, Range = range };
=> new() { Uri = new DocumentUri(uri), Range = range };

public static Location CreateLocation(Uri uri, LinePositionSpan span)
=> new() { Uri = uri, Range = CreateRange(span) };
=> new() { Uri = new DocumentUri(uri), Range = CreateRange(span) };

public static DocumentLink CreateDocumentLink(Uri target, Range range)
=> new() { Target = target, Range = range };
=> new() { Target = new DocumentUri(target), Range = range };

public static DocumentLink CreateDocumentLink(Uri target, LinePositionSpan span)
=> new() { Target = target, Range = CreateRange(span) };
=> new() { Target = new DocumentUri(target), Range = CreateRange(span) };

public static TextEdit CreateTextEdit(Range range, string newText)
=> new() { Range = range, NewText = newText };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,16 @@ protected override IRemoteFindAllReferencesService CreateService(in ServiceArgs
continue;
}

var (mappedUri, mappedRange) = await DocumentMappingService.MapToHostDocumentUriAndRangeAsync(context.Snapshot, location.Uri, location.Range.ToLinePositionSpan(), cancellationToken).ConfigureAwait(false);
var locationUri = location.Uri.GetRequiredUri();
var (mappedUri, mappedRange) = await DocumentMappingService.MapToHostDocumentUriAndRangeAsync(context.Snapshot, locationUri, location.Range.ToLinePositionSpan(), cancellationToken).ConfigureAwait(false);

if (referenceItem is not null)
{
// Indicates the reference item is directly available in the code
referenceItem.Origin = VSInternalItemOrigin.Exact;

// If we're going to change the Uri, then also override the file paths
if (mappedUri != location.Uri)
if (mappedUri != locationUri)
{
referenceItem.DisplayPath = mappedUri.AbsolutePath;
referenceItem.DocumentName = mappedUri.AbsolutePath;
Expand All @@ -112,7 +113,7 @@ protected override IRemoteFindAllReferencesService CreateService(in ServiceArgs
}
}

location.Uri = mappedUri;
location.Uri = new DocumentUri(mappedUri);
location.Range = mappedRange.ToRange();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ protected override IRemoteInlayHintService CreateService(in ServiceArgs args)
.GetGeneratedDocumentAsync(cancellationToken)
.ConfigureAwait(false);

var textDocument = inlayHintParams.TextDocument.WithUri(generatedDocument.CreateUri());
var textDocument = inlayHintParams.TextDocument.WithUri(generatedDocument.CreateDocumentUri());
var range = projectedLinePositionSpan.ToRange();

var hints = await InlayHints.GetInlayHintsAsync(generatedDocument, textDocument, range, displayAllOverride, cancellationToken).ConfigureAwait(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ public ImmutableArray<Registration> GetRegistrations(VSInternalClientCapabilitie
return null;
}

request.TextDocument = RoslynLspExtensions.WithUri(request.TextDocument, htmlDocument.Uri);
request.TextDocument = RoslynLspExtensions.WithUri(request.TextDocument, new Roslyn.LanguageServer.Protocol.DocumentUri(htmlDocument.Uri));

_logger.LogDebug($"Resolving auto-insertion edit for {htmlDocument.Uri}");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ private async Task VerifyCompletionListAsync(
{
TextDocument = new RoslynTextDocumentIdentifier()
{
Uri = document.CreateUri()
Uri = document.CreateDocumentUri()
},
Position = RoslynLspExtensions.GetPosition(sourceText, input.Position),
Context = completionContext
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ private async Task VerifyFindAllReferencesAsync(TestCode input, bool supportsVSE
var textDocumentPositionParams = new TextDocumentPositionParams
{
Position = position,
TextDocument = new TextDocumentIdentifier { Uri = document.CreateUri() },
TextDocument = new TextDocumentIdentifier { Uri = document.CreateDocumentUri() },
};

var results = await endpoint.GetTestAccessor().HandleRequestAsync(document, position, DisposalToken);
Expand Down Expand Up @@ -146,14 +146,14 @@ private async Task VerifyFindAllReferencesAsync(TestCode input, bool supportsVSE
{
var location = GetLocation(result);
string matchedText;
if (razorDocumentUri.Equals(location.Uri))
if (razorDocumentUri.Equals(location.Uri.GetRequiredUri()))
{
matchedText = inputText.Lines[location.Range.Start.Line].ToString();
Assert.Single(input.Spans.Where(s => inputText.GetRange(s).Equals(location.Range)));
}
else
{
var additionalFile = Assert.Single(additionalFiles.Where(f => FilePathNormalizingComparer.Instance.Equals(f.fileName, location.Uri.AbsolutePath)));
var additionalFile = Assert.Single(additionalFiles.Where(f => FilePathNormalizingComparer.Instance.Equals(f.fileName, location.Uri.GetRequiredUri().AbsolutePath)));
var text = SourceText.From(additionalFile.testCode.Text);
matchedText = text.Lines[location.Range.Start.Line].ToString();
Assert.Single(additionalFile.testCode.Spans.Where(s => text.GetRange(s).Equals(location.Range)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public async Task CSharp_MetadataReference()
// number of using directives in .NET Framework vs. .NET Core, so rather than relying on line
// numbers we do some vague notion of actual navigation and test the actual source line that
// the user would see.
var line = File.ReadLines(location.Uri.LocalPath).ElementAt(location.Range.Start.Line);
var line = File.ReadLines(location.Uri.ParsedUri!.LocalPath).ElementAt(location.Range.Start.Line);
Assert.Contains("public sealed class String", line);
}

Expand Down Expand Up @@ -253,7 +253,7 @@ private async Task VerifyGoToDefinitionAsync(TestCode input, string? fileKind =
var range = RoslynLspExtensions.GetRange(text, input.Span);
Assert.Equal(range, location.Range);

Assert.Equal(document.CreateUri(), location.Uri);
Assert.Equal(document.CreateDocumentUri(), location.Uri);
}

private async Task<SumType<RoslynLocation, RoslynLocation[], RoslynDocumentLink[]>?> GetGoToDefinitionResultAsync(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public async Task InlayHints_InvalidRange(int startLine, int starChar, int endLi

var request = new InlayHintParams()
{
TextDocument = new TextDocumentIdentifier() { Uri = document.CreateUri() },
TextDocument = new TextDocumentIdentifier() { Uri = document.CreateDocumentUri() },
Range = RoslynLspFactory.CreateRange(startLine, starChar, endLine, endChar)
};

Expand All @@ -168,7 +168,7 @@ private async Task VerifyInlayHintsAsync(string input, Dictionary<string, string

var request = new InlayHintParams()
{
TextDocument = new TextDocumentIdentifier() { Uri = document.CreateUri() },
TextDocument = new TextDocumentIdentifier() { Uri = document.CreateDocumentUri() },
Range = new()
{
Start = new(0, 0),
Expand Down Expand Up @@ -203,7 +203,7 @@ private async Task VerifyInlayHintsAsync(string input, Dictionary<string, string
// Make sure we can resolve the document correctly
var tdi = resolveEndpoint.GetTestAccessor().GetTextDocumentIdentifier(serializedHint);
Assert.NotNull(tdi);
Assert.Equal(document.CreateUri(), tdi.Uri);
Assert.Equal(document.CreateDocumentUri(), tdi.Uri);

// Make sure we, or really Roslyn, can resolve the hint correctly
var resolvedHint = await resolveEndpoint.GetTestAccessor().HandleRequestAsync(serializedHint, document, DisposalToken);
Expand Down
Loading