Utilize C# LSP server in semantic tokens tests (#6146)

This commit is contained in:
Allison Chou 2022-03-18 16:55:49 -07:00 коммит произвёл GitHub
Родитель d64b1e93ff
Коммит dc1fee057f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
71 изменённых файлов: 1276 добавлений и 563 удалений

Просмотреть файл

@ -76,7 +76,7 @@
<Tooling_MicrosoftCodeAnalysisTestingVersion>1.0.1-beta1.21103.2</Tooling_MicrosoftCodeAnalysisTestingVersion>
<MicrosoftVisualStudioShellPackagesVersion>17.0.31723.112</MicrosoftVisualStudioShellPackagesVersion>
<MicrosoftVisualStudioPackagesVersion>17.0.487</MicrosoftVisualStudioPackagesVersion>
<RoslynPackageVersion>4.2.0-2.22108.10</RoslynPackageVersion>
<RoslynPackageVersion>4.2.0-3.22164.11</RoslynPackageVersion>
<VisualStudioLanguageServerProtocolVersion>17.1.11</VisualStudioLanguageServerProtocolVersion>
<MicrosoftNetCompilersToolsetVersion>4.2.0-1.final</MicrosoftNetCompilersToolsetVersion>
</PropertyGroup>

Просмотреть файл

@ -3,20 +3,20 @@
using System;
using Microsoft.CodeAnalysis.Text;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Range = OmniSharp.Extensions.LanguageServer.Protocol.Models.Range;
using OSharp = OmniSharp.Extensions.LanguageServer.Protocol.Models;
using VS = Microsoft.VisualStudio.LanguageServer.Protocol;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
{
internal static class RangeExtensions
{
public static readonly Range UndefinedRange = new()
public static readonly OSharp.Range UndefinedRange = new()
{
Start = new Position(-1, -1),
End = new Position(-1, -1)
Start = new OSharp.Position(-1, -1),
End = new OSharp.Position(-1, -1)
};
public static bool OverlapsWith(this Range range!!, Range other!!)
public static bool OverlapsWith(this OSharp.Range range!!, OSharp.Range other!!)
{
var overlapStart = range.Start;
if (range.Start.CompareTo(other.Start) < 0)
@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
return overlapStart.CompareTo(overlapEnd) < 0;
}
public static bool LineOverlapsWith(this Range range!!, Range other!!)
public static bool LineOverlapsWith(this OSharp.Range range!!, OSharp.Range other!!)
{
var overlapStart = range.Start.Line;
if (range.Start.Line.CompareTo(other.Start.Line) < 0)
@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
return overlapStart.CompareTo(overlapEnd) <= 0;
}
public static Range? Overlap(this Range range!!, Range other!!)
public static OSharp.Range? Overlap(this OSharp.Range range!!, OSharp.Range other!!)
{
var overlapStart = range.Start;
if (range.Start.CompareTo(other.Start) < 0)
@ -68,18 +68,18 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
// Empty ranges do not overlap with any range.
if (overlapStart.CompareTo(overlapEnd) < 0)
{
return new Range(overlapStart, overlapEnd);
return new OSharp.Range(overlapStart, overlapEnd);
}
return null;
}
public static bool Contains(this Range range!!, Range other!!)
public static bool Contains(this OSharp.Range range!!, OSharp.Range other!!)
{
return range.Start.CompareTo(other.Start) <= 0 && range.End.CompareTo(other.End) >= 0;
}
public static TextSpan AsTextSpan(this Range range!!, SourceText sourceText!!)
public static TextSpan AsTextSpan(this OSharp.Range range!!, SourceText sourceText!!)
{
if (range.Start.Line >= sourceText.Lines.Count)
{
@ -103,7 +103,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
return new TextSpan(start, length);
}
public static Language.Syntax.TextSpan AsRazorTextSpan(this Range range!!, SourceText sourceText!!)
public static Language.Syntax.TextSpan AsRazorTextSpan(this OSharp.Range range!!, SourceText sourceText!!)
{
if (range.Start.Line >= sourceText.Lines.Count)
{
@ -127,9 +127,26 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Extensions
return new Language.Syntax.TextSpan(start, length);
}
public static bool IsUndefined(this Range range!!)
public static bool IsUndefined(this OSharp.Range range!!)
{
return range == UndefinedRange;
}
public static VS.Range AsVSRange(this OSharp.Range range!!)
{
return new VS.Range
{
Start = new VS.Position
{
Line = range.Start.Line,
Character = range.Start.Character
},
End = new VS.Position
{
Line = range.End.Line,
Character = range.End.Character
}
};
}
}
}

Просмотреть файл

@ -458,7 +458,8 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
return semanticRanges;
}
private static bool TryGetMinimalCSharpRange(RazorCodeDocument codeDocument, Range razorRange, [NotNullWhen(true)] out Range? csharpRange)
// Internal for testing only
internal static bool TryGetMinimalCSharpRange(RazorCodeDocument codeDocument, Range razorRange, [NotNullWhen(true)] out Range? csharpRange)
{
SourceSpan? minGeneratedSpan = null;
SourceSpan? maxGeneratedSpan = null;

Просмотреть файл

@ -5,6 +5,7 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.CodeAnalysis.Razor;
@ -36,18 +37,22 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Common
private HostProject HostProject2 { get; }
[Fact]
public void Queue_ProcessesNotifications_AndGoesBackToSleep()
public async Task Queue_ProcessesNotifications_AndGoesBackToSleep()
{
// Arrange
var projectManager = TestProjectSnapshotManager.Create(LegacyDispatcher);
projectManager.ProjectAdded(HostProject1);
projectManager.ProjectAdded(HostProject2);
projectManager.DocumentAdded(HostProject1, Documents[0], null);
projectManager.DocumentAdded(HostProject1, Documents[1], null);
var projectManager = TestProjectSnapshotManager.Create(Dispatcher);
await Dispatcher.RunOnDispatcherThreadAsync(() =>
{
projectManager.ProjectAdded(HostProject1);
projectManager.ProjectAdded(HostProject2);
projectManager.DocumentAdded(HostProject1, Documents[0], null);
projectManager.DocumentAdded(HostProject1, Documents[1], null);
}, CancellationToken.None);
var project = projectManager.GetLoadedProject(HostProject1.FilePath);
var project = await Dispatcher.RunOnDispatcherThreadAsync(
() => projectManager.GetLoadedProject(HostProject1.FilePath), CancellationToken.None);
var queue = new TestBackgroundDocumentGenerator(LegacyDispatcher)
var queue = new TestBackgroundDocumentGenerator(Dispatcher)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
@ -57,7 +62,8 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Common
};
// Act & Assert
queue.Enqueue(project.GetDocument(Documents[0].FilePath));
await Dispatcher.RunOnDispatcherThreadAsync(
() => queue.Enqueue(project.GetDocument(Documents[0].FilePath)), CancellationToken.None);
Assert.True(queue.IsScheduledOrRunning, "Queue should be scheduled during Enqueue");
Assert.True(queue.HasPendingNotifications, "Queue should have a notification created during Enqueue");
@ -73,18 +79,22 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Common
}
[Fact]
public void Queue_ProcessesNotifications_AndRestarts()
public async Task Queue_ProcessesNotifications_AndRestarts()
{
// Arrange
var projectManager = TestProjectSnapshotManager.Create(LegacyDispatcher);
projectManager.ProjectAdded(HostProject1);
projectManager.ProjectAdded(HostProject2);
projectManager.DocumentAdded(HostProject1, Documents[0], null);
projectManager.DocumentAdded(HostProject1, Documents[1], null);
var projectManager = TestProjectSnapshotManager.Create(Dispatcher);
await Dispatcher.RunOnDispatcherThreadAsync(() =>
{
projectManager.ProjectAdded(HostProject1);
projectManager.ProjectAdded(HostProject2);
projectManager.DocumentAdded(HostProject1, Documents[0], null);
projectManager.DocumentAdded(HostProject1, Documents[1], null);
}, CancellationToken.None);
var project = projectManager.GetLoadedProject(HostProject1.FilePath);
var project = await Dispatcher.RunOnDispatcherThreadAsync(
() => projectManager.GetLoadedProject(HostProject1.FilePath), CancellationToken.None);
var queue = new TestBackgroundDocumentGenerator(LegacyDispatcher)
var queue = new TestBackgroundDocumentGenerator(Dispatcher)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
@ -95,7 +105,8 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Common
};
// Act & Assert
queue.Enqueue(project.GetDocument(Documents[0].FilePath));
await Dispatcher.RunOnDispatcherThreadAsync(
() => queue.Enqueue(project.GetDocument(Documents[0].FilePath)), CancellationToken.None);
Assert.True(queue.IsScheduledOrRunning, "Queue should be scheduled during Enqueue");
Assert.True(queue.HasPendingNotifications, "Queue should have a notification created during Enqueue");
@ -109,7 +120,8 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Common
queue.NotifyBackgroundCapturedWorkload.Wait(TimeSpan.FromSeconds(1));
Assert.False(queue.HasPendingNotifications, "Worker should have taken all notifications");
queue.Enqueue(project.GetDocument(Documents[1].FilePath));
await Dispatcher.RunOnDispatcherThreadAsync(
() => queue.Enqueue(project.GetDocument(Documents[1].FilePath)), CancellationToken.None);
Assert.True(queue.HasPendingNotifications); // Now we should see the worker restart when it finishes.
// Allow work to complete, which should restart the timer.

Просмотреть файл

@ -1,4 +1,5 @@
{
"methodDisplay": "method",
"shadowCopy": false
"shadowCopy": false,
"parallelizeTestCollections": false
}

Просмотреть файл

@ -0,0 +1,144 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.ExternalAccess.Razor;
using Microsoft.VisualStudio.Composition;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Nerdbank.Streams;
using StreamJsonRpc;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Common
{
public sealed class CSharpTestLspServer : IAsyncDisposable
{
private readonly AdhocWorkspace _testWorkspace;
private readonly IRazorLanguageServerTarget _languageServer;
private readonly StreamJsonRpc.JsonRpc _clientRpc;
private readonly StreamJsonRpc.JsonRpc _serverRpc;
private readonly JsonMessageFormatter _clientMessageFormatter;
private readonly JsonMessageFormatter _serverMessageFormatter;
private readonly HeaderDelimitedMessageHandler _clientMessageHandler;
private readonly HeaderDelimitedMessageHandler _serverMessageHandler;
private CSharpTestLspServer(
AdhocWorkspace testWorkspace,
ExportProvider exportProvider,
ServerCapabilities serverCapabilities)
{
_testWorkspace = testWorkspace;
var (clientStream, serverStream) = FullDuplexStream.CreatePair();
_serverMessageFormatter = CreateJsonMessageFormatter();
_serverMessageHandler = new HeaderDelimitedMessageHandler(serverStream, serverStream, _serverMessageFormatter);
_serverRpc = new StreamJsonRpc.JsonRpc(_serverMessageHandler)
{
ExceptionStrategy = ExceptionProcessing.ISerializable,
};
_languageServer = CreateLanguageServer(_serverRpc, testWorkspace, exportProvider, serverCapabilities);
_clientMessageFormatter = CreateJsonMessageFormatter();
_clientMessageHandler = new HeaderDelimitedMessageHandler(clientStream, clientStream, _clientMessageFormatter);
_clientRpc = new StreamJsonRpc.JsonRpc(_clientMessageHandler)
{
ExceptionStrategy = ExceptionProcessing.ISerializable,
};
_clientRpc.StartListening();
static JsonMessageFormatter CreateJsonMessageFormatter()
{
var messageFormatter = new JsonMessageFormatter();
VSInternalExtensionUtilities.AddVSInternalExtensionConverters(messageFormatter.JsonSerializer);
return messageFormatter;
}
static IRazorLanguageServerTarget CreateLanguageServer(
StreamJsonRpc.JsonRpc serverRpc,
Workspace workspace,
ExportProvider exportProvider,
ServerCapabilities serverCapabilities)
{
var capabilitiesProvider = new RazorCapabilitiesProvider(serverCapabilities);
var registrationService = exportProvider.GetExportedValue<RazorTestWorkspaceRegistrationService>();
registrationService.Register(workspace);
var languageServerFactory = exportProvider.GetExportedValue<IRazorLanguageServerFactoryWrapper>();
var languageServer = languageServerFactory.CreateLanguageServer(serverRpc, capabilitiesProvider);
serverRpc.StartListening();
return languageServer;
}
}
internal static async Task<CSharpTestLspServer> CreateAsync(
AdhocWorkspace testWorkspace,
ExportProvider exportProvider,
ClientCapabilities clientCapabilities,
ServerCapabilities serverCapabilities)
{
var server = new CSharpTestLspServer(testWorkspace, exportProvider, serverCapabilities);
await server.ExecuteRequestAsync<InitializeParams, InitializeResult>(Methods.InitializeName, new InitializeParams
{
Capabilities = clientCapabilities,
}, CancellationToken.None);
await server.ExecuteRequestAsync(Methods.InitializedName, new InitializedParams(), CancellationToken.None);
return server;
}
internal async Task ExecuteRequestAsync<RequestType>(
string methodName,
RequestType request,
CancellationToken cancellationToken) where RequestType : class
=> await _clientRpc.InvokeWithParameterObjectAsync(
methodName,
request,
cancellationToken).ConfigureAwait(false);
internal async Task<ResponseType?> ExecuteRequestAsync<RequestType, ResponseType>(
string methodName,
RequestType request,
CancellationToken cancellationToken) where RequestType : class
=> await _clientRpc.InvokeWithParameterObjectAsync<ResponseType>(
methodName,
request,
cancellationToken).ConfigureAwait(false);
public async ValueTask DisposeAsync()
{
_testWorkspace.Dispose();
await _languageServer.DisposeAsync();
_clientRpc.Dispose();
_clientMessageFormatter.Dispose();
await _clientMessageHandler.DisposeAsync();
_serverRpc.Dispose();
_serverMessageFormatter.Dispose();
await _serverMessageHandler.DisposeAsync();
}
private class RazorCapabilitiesProvider : IRazorCapabilitiesProvider
{
private readonly ServerCapabilities _serverCapabilities;
public RazorCapabilitiesProvider(ServerCapabilities serverCapabilities)
{
_serverCapabilities = serverCapabilities;
}
public ServerCapabilities GetCapabilities(ClientCapabilities clientCapabilities) => _serverCapabilities;
}
}
}

Просмотреть файл

@ -5,13 +5,20 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.LanguageServer;
using Microsoft.AspNetCore.Razor.LanguageServer.Common;
using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.ExternalAccess.Razor;
using Microsoft.CodeAnalysis.Razor;
using Microsoft.CodeAnalysis.Text;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.Composition;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Moq;
namespace Microsoft.AspNetCore.Razor.Test.Common
@ -44,6 +51,86 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
protected ILoggerFactory LoggerFactory { get; }
protected static AdhocWorkspace CreateTestWorkspace(IEnumerable<(Uri documentUri, SourceText csharpSourceText)> files, ExportProvider exportProvider)
{
var workspace = TestWorkspace.Create() as AdhocWorkspace;
// Add project and solution to workspace
var projectInfo = ProjectInfo.Create(
id: ProjectId.CreateNewId("TestProject"),
version: VersionStamp.Default,
name: "TestProject",
assemblyName: "TestProject",
language: LanguageNames.CSharp,
filePath: "C:\\TestSolution\\TestProject.csproj");
var solutionInfo = SolutionInfo.Create(
id: SolutionId.CreateNewId("TestSolution"),
version: VersionStamp.Default,
projects: new ProjectInfo[] { projectInfo });
workspace.AddSolution(solutionInfo);
// Add document to workspace. We use an IVT method to create the DocumentInfo variable because there's a special constructor in Roslyn that will
// help identify the document as belonging to Razor.
var languageServerFactory = exportProvider.GetExportedValue<IRazorLanguageServerFactoryWrapper>();
var documentCount = 0;
foreach (var (documentUri, csharpSourceText) in files)
{
var documentFilePath = documentUri.AbsolutePath;
var textAndVersion = TextAndVersion.Create(csharpSourceText, VersionStamp.Default, documentFilePath);
var documentInfo = languageServerFactory.CreateDocumentInfo(
id: DocumentId.CreateNewId(projectInfo.Id),
name: "TestDocument" + documentCount,
filePath: documentFilePath,
loader: TextLoader.From(textAndVersion),
razorDocumentServiceProvider: new TestRazorDocumentServiceProvider());
workspace.AddDocument(documentInfo);
documentCount++;
}
return workspace;
}
protected static async Task<CSharpTestLspServer> CreateCSharpLspServerAsync(AdhocWorkspace workspace, ExportProvider exportProvider, ServerCapabilities serverCapabilities)
{
var clientCapabilities = new ClientCapabilities();
var testLspServer = await CSharpTestLspServer.CreateAsync(workspace, exportProvider, clientCapabilities, serverCapabilities).ConfigureAwait(false);
return testLspServer;
}
private class TestRazorDocumentServiceProvider : IRazorDocumentServiceProvider
{
public bool CanApplyChange => throw new NotImplementedException();
public bool SupportDiagnostics => throw new NotImplementedException();
TService IRazorDocumentServiceProvider.GetService<TService>()
{
var serviceType = typeof(TService);
if (serviceType == typeof(IRazorSpanMappingService))
{
return (TService)(IRazorSpanMappingService)new TestRazorSpanMappingService();
}
return this as TService;
}
private class TestRazorSpanMappingService : IRazorSpanMappingService
{
public Task<ImmutableArray<RazorMappedSpanResult>> MapSpansAsync(
Document document,
IEnumerable<TextSpan> spans,
CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
}
[Obsolete("Use " + nameof(LSPProjectSnapshotManagerDispatcher))]
private class TestProjectSnapshotManagerDispatcher : ProjectSnapshotManagerDispatcher
{

Просмотреть файл

@ -0,0 +1,23 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.
using System.Reflection;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.CodeAnalysis.ExternalAccess.Razor;
using Microsoft.CodeAnalysis.Host.Mef;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Common
{
public static class TestCompositions
{
public static readonly TestComposition Editor = TestComposition.Empty
.AddAssemblies(Assembly.Load("Microsoft.VisualStudio.Text.Implementation, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"))
.AddParts(typeof(TestExportJoinableTaskContext));
public static readonly TestComposition Roslyn = TestComposition.Empty
.AddAssemblies(MefHostServices.DefaultAssemblies)
.AddAssemblies(Assembly.LoadFrom("Microsoft.CodeAnalysis.LanguageServer.Protocol.dll"))
.AddAssemblies(Assembly.LoadFrom("Microsoft.CodeAnalysis.ExternalAccess.Razor.dll"))
.AddParts(typeof(RazorTestWorkspaceRegistrationService));
}
}

Просмотреть файл

@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var insertProvider = new TestOnAutoInsertProvider(">", canResolve: true, LoggerFactory);
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
{
ResolvedTextEdit = new TextEdit()
};
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
{
ResolvedTextEdit = new TextEdit()
};
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -140,7 +140,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var insertProvider1 = new TestOnAutoInsertProvider(">", canResolve: true, LoggerFactory);
var insertProvider2 = new TestOnAutoInsertProvider("<", canResolve: true, LoggerFactory);
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider1, insertProvider2 }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
{
// Arrange
var insertProvider = new TestOnAutoInsertProvider(">", canResolve: true, LoggerFactory);
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, EmptyDocumentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, EmptyDocumentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var uri = new Uri("file://path/test.razor");
var @params = new OnAutoInsertParams()
{
@ -196,7 +196,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var insertProvider = new TestOnAutoInsertProvider(">", canResolve: true, LoggerFactory);
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -224,7 +224,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var insertProvider = new TestOnAutoInsertProvider(">", canResolve: false, LoggerFactory);
var endpoint = new OnAutoInsertEndpoint(LegacyDispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var endpoint = new OnAutoInsertEndpoint(Dispatcher, documentResolver, new[] { insertProvider }, TestAdhocWorkspaceFactory.Instance);
var @params = new OnAutoInsertParams()
{
TextDocument = new TextDocumentIdentifier(uri),

Просмотреть файл

@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
public async Task Handle_MissingFile()
{
// Arrange
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, _emptyDocumentResolver);
var resolver = new AddUsingsCodeActionResolver(Dispatcher, _emptyDocumentResolver);
var data = JObject.FromObject(new AddUsingsCodeActionParams()
{
Uri = new Uri("c:/Test.razor"),
@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = CreateCodeDocument(contents);
codeDocument.SetUnsupported();
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var data = JObject.FromObject(new AddUsingsCodeActionParams()
{
Uri = new Uri(documentPath),
@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = string.Empty;
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/\"{Environment.NewLine}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -149,7 +149,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = projectEngine.Process(projectItem);
codeDocument.SetFileKind(FileKinds.Legacy);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -182,7 +182,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"<table>{Environment.NewLine}<tr>{Environment.NewLine}</tr>{Environment.NewLine}</table>";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -215,7 +215,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@namespace Testing{Environment.NewLine}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -248,7 +248,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/\"{Environment.NewLine}@namespace Testing{Environment.NewLine}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -281,7 +281,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@using System";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,
@ -314,7 +314,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@using System{Environment.NewLine}@using System.Linq{Environment.NewLine}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new AddUsingsCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new AddUsingsCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new AddUsingsCodeActionParams
{
Uri = documentUri,

Просмотреть файл

@ -4,19 +4,16 @@
#nullable disable
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Razor.Extensions;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models;
using Microsoft.AspNetCore.Razor.LanguageServer.Common;
using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Text;
using Moq;
using Newtonsoft.Json.Linq;
using OmniSharp.Extensions.JsonRpc;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Xunit;
@ -87,7 +84,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var documentVersionCache = CreateDocumentVersionCache();
addUsingResolver = new AddUsingsCSharpCodeActionResolver(
LegacyDispatcher,
Dispatcher,
CreateDocumentResolver(documentPath, codeDocument),
languageServer,
documentVersionCache);

Просмотреть файл

@ -204,7 +204,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
razorFormattingService ??= CreateRazorFormattingService(documentUri);
csharpCodeActionResolver = new DefaultCSharpCodeActionResolver(
LegacyDispatcher,
Dispatcher,
CreateDocumentResolver(documentPath, codeDocument),
languageServer,
razorFormattingService,

Просмотреть файл

@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
_documentMappingService,
Array.Empty<RazorCodeActionProvider>(),
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
_emptyDocumentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
_documentMappingService,
Array.Empty<RazorCodeActionProvider>(),
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
_documentMappingService,
Array.Empty<RazorCodeActionProvider>(),
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -179,7 +179,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new CSharpCodeActionProvider[] {
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
languageServer,
_languageServerFeatureOptions)
@ -214,7 +214,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockMultipleRazorCodeActionProvider(),
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -256,7 +256,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockCSharpCodeActionProvider(),
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
languageServer,
_languageServerFeatureOptions)
@ -298,7 +298,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockCSharpCodeActionProvider(),
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
languageServer,
_languageServerFeatureOptions)
@ -333,7 +333,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockNullRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -376,7 +376,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockCSharpCodeActionProvider(),
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
languageServer,
_languageServerFeatureOptions)
@ -413,7 +413,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockNullRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -460,7 +460,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockNullRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -503,7 +503,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -544,7 +544,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new MockRazorCodeActionProvider()
},
Array.Empty<CSharpCodeActionProvider>(),
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -588,7 +588,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new CSharpCodeActionProvider[] {
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
_languageServer,
_languageServerFeatureOptions)
@ -630,7 +630,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
new CSharpCodeActionProvider[] {
new MockCSharpCodeActionProvider()
},
LegacyDispatcher,
Dispatcher,
documentResolver,
languageServer,
_languageServerFeatureOptions)

Просмотреть файл

@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
public async Task Handle_MissingFile()
{
// Arrange
var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, _emptyDocumentResolver);
var resolver = new CreateComponentCodeActionResolver(Dispatcher, _emptyDocumentResolver);
var data = JObject.FromObject(new CreateComponentCodeActionParams()
{
Uri = new Uri("c:/Test.razor"),
@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = CreateCodeDocument(contents);
codeDocument.SetUnsupported();
var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new CreateComponentCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var data = JObject.FromObject(new CreateComponentCodeActionParams()
{
Uri = new Uri(documentPath),
@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = CreateCodeDocument(contents);
codeDocument.SetFileKind(FileKinds.Legacy);
var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new CreateComponentCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var data = JObject.FromObject(new CreateComponentCodeActionParams()
{
Uri = new Uri(documentPath),
@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/test\"";
var codeDocument = CreateCodeDocument(contents);
var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new CreateComponentCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new CreateComponentCodeActionParams
{
Uri = documentUri,
@ -127,7 +127,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/test\"{Environment.NewLine}@namespace Another.Namespace";
var codeDocument = CreateCodeDocument(contents);
var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument));
var resolver = new CreateComponentCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument));
var actionParams = new CreateComponentCodeActionParams
{
Uri = documentUri,

Просмотреть файл

@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
public async Task Handle_MissingFile()
{
// Arrange
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, _emptyDocumentResolver, FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, _emptyDocumentResolver, FilePathNormalizer);
var data = JObject.FromObject(new ExtractToCodeBehindCodeActionParams()
{
Uri = new Uri("c:/Test.razor"),
@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = CreateCodeDocument(contents);
codeDocument.SetUnsupported();
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var data = JObject.FromObject(new ExtractToCodeBehindCodeActionParams()
{
Uri = new Uri("c:/Test.razor"),
@ -95,7 +95,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var codeDocument = CreateCodeDocument(contents);
codeDocument.SetFileKind(FileKinds.Legacy);
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var data = JObject.FromObject(new ExtractToCodeBehindCodeActionParams()
{
Uri = new Uri("c:/Test.razor"),
@ -121,7 +121,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/test\"{Environment.NewLine}@code {{ private var x = 1; }}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var actionParams = new ExtractToCodeBehindCodeActionParams
{
Uri = documentUri,
@ -169,7 +169,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/test\"{Environment.NewLine}@functions {{ private var x = 1; }}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var actionParams = new ExtractToCodeBehindCodeActionParams
{
Uri = documentUri,
@ -217,7 +217,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.CodeActions
var contents = $"@page \"/test\"\n@using System.Diagnostics{Environment.NewLine}@code {{ private var x = 1; }}";
var codeDocument = CreateCodeDocument(contents);
var resolver = new ExtractToCodeBehindCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var resolver = new ExtractToCodeBehindCodeActionResolver(Dispatcher, CreateDocumentResolver(documentPath, codeDocument), FilePathNormalizer);
var actionParams = new ExtractToCodeBehindCodeActionParams
{
Uri = documentUri,

Просмотреть файл

@ -319,7 +319,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.Directive);
razorCompletionItem.SetDirectiveCompletionDescription(new DirectiveCompletionDescription("Test directive"));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -339,7 +339,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("@...", "@", RazorCompletionItemKind.MarkupTransition);
razorCompletionItem.SetMarkupTransitionCompletionDescription(new MarkupTransitionCompletionDescription("Test description"));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -367,7 +367,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttribute);
razorCompletionItem.SetAttributeCompletionDescription(new AggregateBoundAttributeDescription(Array.Empty<BoundAttributeDescriptionInfo>()));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -395,7 +395,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, descriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, descriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttributeParameter);
razorCompletionItem.SetAttributeCompletionDescription(new AggregateBoundAttributeDescription(Array.Empty<BoundAttributeDescriptionInfo>()));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -423,7 +423,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperElement);
razorCompletionItem.SetTagHelperElementDescriptionInfo(new AggregateBoundElementDescription(Array.Empty<BoundElementDescriptionInfo>()));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -484,7 +484,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperAttribute);
razorCompletionItem.SetAttributeCompletionDescription(new AggregateBoundAttributeDescription(Array.Empty<BoundAttributeDescriptionInfo>()));
var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem });
@ -512,7 +512,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var completionItem = new CompletionItem();
// Act
@ -534,7 +534,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -560,7 +560,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -595,7 +595,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -629,7 +629,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -663,7 +663,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -698,7 +698,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),
@ -736,7 +736,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams());
var completionEndpoint = new RazorCompletionEndpoint(
LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory);
var request = new CompletionParams()
{
TextDocument = new TextDocumentIdentifier(new Uri(documentPath)),

Просмотреть файл

@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
public void GetNearestAncestorTagInfo_MarkupElement()
{
// Arrange
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<p><strong></strong></p>");
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<p><strong></strong></p>", isRazorFile: false);
var sourceSpan = new SourceSpan(33 + Environment.NewLine.Length, 0);
var syntaxTree = codeDocument.GetSyntaxTree();
var owner = syntaxTree.Root.LocateOwner(new SourceChange(sourceSpan, string.Empty));
@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
public void GetNearestAncestorTagInfo_TagHelperElement()
{
// Arrange
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><test2></test2></test1>", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><test2></test2></test1>", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(37 + Environment.NewLine.Length, 0);
var syntaxTree = codeDocument.GetSyntaxTree();
var owner = syntaxTree.Root.LocateOwner(new SourceChange(sourceSpan, string.Empty));
@ -96,7 +96,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<br />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<br />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(33 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}</t", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}</t", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(32 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -156,7 +156,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<br />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<br />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(32 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -172,7 +172,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -188,7 +188,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(36 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -217,7 +217,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<title mutator />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<title mutator />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(36 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -240,7 +240,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2><</test2>", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2><</test2>", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(37 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><</test1>", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><</test1>", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(37 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -294,7 +294,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(36 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -333,7 +333,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
attribute.AsDictionary("bool-val-", typeof(bool).FullName);
});
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", tagHelper.Build());
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", isRazorFile: false, tagHelper.Build());
var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -372,7 +372,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
attribute.AsDictionary("int-val-", typeof(int).FullName);
});
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", tagHelper.Build());
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", isRazorFile: false, tagHelper.Build());
var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -401,7 +401,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 unbound />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 unbound />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -417,7 +417,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 bool-val />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 bool-val />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -433,7 +433,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -449,7 +449,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int-val='123' />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int-val='123' />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -466,7 +466,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int-val='>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -482,7 +482,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int->", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int->", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(36 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -498,7 +498,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(43 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());
@ -515,7 +515,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
// Arrange
var service = new TagHelperCompletionProvider(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService);
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class=''>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0);
var context = new RazorCompletionContext(codeDocument.GetSyntaxTree(), codeDocument.GetTagHelperContext());

Просмотреть файл

@ -203,9 +203,9 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
protected ILogger Logger { get; } = NullLogger.Instance;
internal static RazorCodeDocument CreateCodeDocument(string text, params TagHelperDescriptor[] tagHelpers)
internal static RazorCodeDocument CreateCodeDocument(string text, bool isRazorFile, params TagHelperDescriptor[] tagHelpers)
{
return CreateCodeDocument(text, CSHtmlFile, tagHelpers);
return CreateCodeDocument(text, isRazorFile ? RazorFile : CSHtmlFile, tagHelpers);
}
protected static TextDocumentIdentifier GetIdentifier(bool isRazor)
@ -218,10 +218,9 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
{
var documentSnapshots = new Queue<DocumentSnapshot>();
var identifiers = new Queue<TextDocumentIdentifier>();
foreach (var (text, isRazor) in textArray.Zip(isRazorArray, (t, r) => (t, r)))
foreach (var (text, isRazorFile) in textArray.Zip(isRazorArray, (t, r) => (t, r)))
{
var file = isRazor ? RazorFile : CSHtmlFile;
var document = CreateCodeDocument(text, file, tagHelpers);
var document = CreateCodeDocument(text, isRazorFile, tagHelpers);
var projectSnapshot = new Mock<ProjectSnapshot>(MockBehavior.Strict);
projectSnapshot
@ -240,7 +239,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion
.Returns(projectSnapshot.Object);
documentSnapshots.Enqueue(documentSnapshot.Object);
var identifier = GetIdentifier(isRazor);
var identifier = GetIdentifier(isRazorFile);
identifiers.Enqueue(identifier);
}

Просмотреть файл

@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
<p>@DateTime.Now</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),
@ -87,7 +87,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
<p>@{var abc = 123;}</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),
@ -112,7 +112,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
<p>@{var abc;}</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),
@ -135,7 +135,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
<p></p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),
@ -161,7 +161,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
}</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),
@ -187,7 +187,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Debugging
}</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(LegacyDispatcher, documentResolver, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorBreakpointSpanEndpoint(Dispatcher, documentResolver, MappingService, LoggerFactory);
var request = new RazorBreakpointSpanParams()
{
Uri = new Uri(documentPath),

Просмотреть файл

@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
// Arrange
var tagHelperDescriptor1 = CreateRazorComponentTagHelperDescriptor("First", "First.Components", "Component1", typeName: "Component1<TItem>");
var tagHelperDescriptor2 = CreateRazorComponentTagHelperDescriptor("Second", "Second.Components", "Component3", typeName: "Component3<TItem>");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot1 = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor1).ConfigureAwait(false);
@ -44,7 +44,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
// Arrange
var tagHelperDescriptor1 = CreateRazorComponentTagHelperDescriptor("First", "First.Components", "Component1");
var tagHelperDescriptor2 = CreateRazorComponentTagHelperDescriptor("Second", "Second.Components", "Component3");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot1 = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor1).ConfigureAwait(false);
@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
// Arrange
var tagHelperDescriptor = CreateRazorComponentTagHelperDescriptor("First", "Test", "Component2");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor).ConfigureAwait(false);
@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
// Arrange
var tagHelperDescriptor = CreateRazorComponentTagHelperDescriptor("Third", "First.Components", "Component3");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor).ConfigureAwait(false);
@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
// Arrange
var tagHelperDescriptor = CreateRazorComponentTagHelperDescriptor("First", "First.Components", "Component2");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor).ConfigureAwait(false);
@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
// Arrange
var tagHelperDescriptor = CreateRazorComponentTagHelperDescriptor("First", "First.Components", "Component3");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor).ConfigureAwait(false);
@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
// Arrange
var tagHelperDescriptor = CreateRazorComponentTagHelperDescriptor("AssemblyName", "Test", "Component2");
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, s_projectSnapshotManager, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, s_projectSnapshotManager, LoggerFactory);
// Act
var documentSnapshot = await searchEngine.TryLocateComponentAsync(tagHelperDescriptor).ConfigureAwait(false);

Просмотреть файл

@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
attribute.TypeName = typeof(bool).FullName;
});
tagHelper.SetTypeName("WithBoundAttribute");
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test bound='true' />", tagHelper.Build());
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test bound='true' />", isRazorFile: false, tagHelper.Build());
var syntaxTree = codeDocument.GetSyntaxTree();
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty);
@ -152,7 +152,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
attribute.TypeName = typeof(bool).FullName;
});
tagHelper.SetTypeName("WithBoundAttribute");
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test bound />", tagHelper.Build());
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test bound />", isRazorFile: false, tagHelper.Build());
var syntaxTree = codeDocument.GetSyntaxTree();
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty);
@ -175,7 +175,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
public void StringifyAttributes_UnboundAttribute()
{
// Arrange
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound='hello world' />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound='hello world' />", isRazorFile: false, DefaultTagHelpers);
var syntaxTree = codeDocument.GetSyntaxTree();
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty);
@ -198,7 +198,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
public void StringifyAttributes_UnboundMinimizedAttribute()
{
// Arrange
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound />", isRazorFile: false, DefaultTagHelpers);
var syntaxTree = codeDocument.GetSyntaxTree();
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty);
@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
public void StringifyAttributes_IgnoresMiscContent()
{
// Arrange
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound @DateTime.Now />", DefaultTagHelpers);
var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound @DateTime.Now />", isRazorFile: false, DefaultTagHelpers);
var syntaxTree = codeDocument.GetSyntaxTree();
var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0);
var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty);

Просмотреть файл

@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Definition
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var srcText = SourceText.From(txt);
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var documentSnapshot = Mock.Of<DocumentSnapshot>(d => d.GetTextAsync() == Task.FromResult(srcText), MockBehavior.Strict);
var position = new Position(1, 2);

Просмотреть файл

@ -49,7 +49,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
documentResolver.Setup(resolver => resolver.TryResolveDocument(documentPath, out documentSnapshot))
.Returns(false);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver.Object, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver.Object, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -79,7 +79,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
documentVersionCache.Setup(cache => cache.TryGetDocumentVersion(It.IsAny<DocumentSnapshot>(), out version))
.Returns(false);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, documentVersionCache.Object, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, documentVersionCache.Object, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(2, 15))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(6, 25))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -215,7 +215,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(15, 13))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -248,7 +248,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -284,7 +284,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -319,7 +319,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -355,7 +355,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -392,7 +392,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -427,7 +427,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -464,7 +464,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -499,7 +499,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -530,7 +530,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
"__o = Microsoft.AspNetCore.Components.EventCallback.Factory.Create<Microsoft.AspNetCore.Components.Web.ProgressEventArgs>(this, );",
sourceMappings: Array.Empty<SourceMapping>());
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new TestRazorDiagnosticsEndpointWithoutRazorDiagnostic(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new TestRazorDiagnosticsEndpointWithoutRazorDiagnostic(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -562,7 +562,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
"__o = Microsoft.AspNetCore.Components.EventCallback.Factory.Create<Microsoft.AspNetCore.Components.Web.ProgressEventArgs>(this, );",
sourceMappings: Array.Empty<SourceMapping>());
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new TestRazorDiagnosticsEndpointWithRazorDiagnostic(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new TestRazorDiagnosticsEndpointWithRazorDiagnostic(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -598,7 +598,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 13))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -628,7 +628,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -651,7 +651,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Razor,
@ -682,7 +682,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
});
codeDocument.SetUnsupported();
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.CSharp,
@ -711,7 +711,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
GetButtonTagHelperDescriptor().Build()
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -740,7 +740,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
GetButtonTagHelperDescriptor().Build()
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -770,7 +770,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 14))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -800,7 +800,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
new SourceSpan(10, 14))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -850,7 +850,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
descriptor.Build()
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -896,7 +896,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
descriptor.Build()
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -932,7 +932,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -963,7 +963,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.razor";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now", kind: FileKinds.Component);
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -992,7 +992,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.razor";
var codeDocument = CreateCodeDocument("<!body></body>", kind: FileKinds.Component);
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -1023,7 +1023,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.razor";
var codeDocument = CreateCodeDocument("<html><!body><div></div></!body></html>", kind: FileKinds.Component);
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,
@ -1063,7 +1063,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Diagnostics
var documentPath = "C:/path/to/document.razor";
var codeDocument = CreateCodeDocument("<!body></!body>", kind: FileKinds.Component);
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var diagnosticsEndpoint = new RazorDiagnosticsEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, LoggerFactory);
var request = new RazorDiagnosticsParams()
{
Kind = RazorLanguageKind.Html,

Просмотреть файл

@ -1,20 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.
#nullable disable
using System.Reflection;
using Microsoft.AspNetCore.Razor.Test.Common;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Test
{
public static class EditorTestCompositions
{
public static readonly TestComposition Editor = TestComposition.Empty
.AddAssemblies(
// Microsoft.VisualStudio.Text.Implementation.dll:
Assembly.Load("Microsoft.VisualStudio.Text.Implementation, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"))
.AddParts(
typeof(TestExportJoinableTaskContext));
}
}

Просмотреть файл

@ -14,7 +14,7 @@ using MediatR;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.LanguageServer.Common;
using Microsoft.AspNetCore.Razor.LanguageServer.Extensions;
using Microsoft.AspNetCore.Razor.LanguageServer.Test;
using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Formatting;
using Microsoft.CodeAnalysis.Razor.Workspaces.Extensions;
@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var editHandlerType = editHandlerAssembly.GetType("Microsoft.WebTools.Languages.LanguageServer.Server.Html.OperationHandlers.ApplyFormatEditsHandler", throwOnError: true);
var bufferManagerType = editHandlerAssembly.GetType("Microsoft.WebTools.Languages.LanguageServer.Server.Shared.Buffer.BufferManager", throwOnError: true);
var exportProvider = EditorTestCompositions.Editor.ExportProviderFactory.CreateExportProvider();
var exportProvider = TestCompositions.Editor.ExportProviderFactory.CreateExportProvider();
var contentTypeService = exportProvider.GetExportedValue<IContentTypeRegistryService>();
if (!contentTypeService.ContentTypes.Any(t => t.TypeName == HtmlContentTypeDefinition.HtmlContentType))

Просмотреть файл

@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentRangeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri)
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var uri = new Uri("file://path/test.razor");
var @params = new DocumentRangeFormattingParams()
{
@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentRangeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri)
@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: false);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentRangeFormattingParams();
// Act
@ -129,7 +129,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: false);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, EmptyDocumentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams() { TextDocument = new TextDocumentIdentifier(uri) };
// Act
@ -155,7 +155,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -187,7 +187,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -220,7 +220,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
documentMappingService.Setup(s => s.GetLanguageKind(codeDocument, 17)).Returns(RazorLanguageKind.Html);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService.Object, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService.Object, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -253,7 +253,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
documentMappingService.Setup(s => s.GetLanguageKind(codeDocument, 17)).Returns(RazorLanguageKind.Razor);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService.Object, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService.Object, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri),
@ -285,7 +285,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting
var documentMappingService = new DefaultRazorDocumentMappingService(LoggerFactory);
var optionsMonitor = GetOptionsMonitor(enableFormatting: true);
var endpoint = new RazorFormattingEndpoint(
LegacyDispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
Dispatcher, documentResolver, formattingService, documentMappingService, optionsMonitor, LoggerFactory);
var @params = new DocumentOnTypeFormattingParams()
{
TextDocument = new TextDocumentIdentifier(uri),

Просмотреть файл

@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("test1", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.LastIndexOf("test1", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -93,7 +93,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("bool-val", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val minimized></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var edgeLocation = txt.IndexOf("bool-val", StringComparison.Ordinal) + "bool-val".Length;
var location = new SourceLocation(edgeLocation, 0, edgeLocation);
@ -134,7 +134,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("true", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -151,7 +151,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("=", StringComparison.Ordinal) + 1, -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -168,7 +168,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("true'", StringComparison.Ordinal) + 5, -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("bool-val", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1<hello";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("test1", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -250,7 +250,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val=\"aslj alsk<strong>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("bool-val", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -270,7 +270,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<p><strong></strong></p>";
var codeDocument = CreateCodeDocument(txt);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("strong", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -287,7 +287,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var languageServer = LanguageServer;
languageServer.ClientSettings.Capabilities.TextDocument.Hover.Value.ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText);
@ -310,7 +310,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var languageServer = LanguageServer;
languageServer.ClientSettings.Capabilities.TextDocument.Hover.Value.ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText);
@ -333,7 +333,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var languageServer = LanguageServer;
languageServer.ClientSettings.Capabilities.TextDocument.Hover.Value.ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText);
@ -357,7 +357,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<p><strong></strong></p>";
var codeDocument = CreateCodeDocument(txt);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false);
var languageServer = LanguageServer;
languageServer.ClientSettings.Capabilities.TextDocument.Hover.Value.ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText);
@ -377,7 +377,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<p><strong class=\"weak\"></strong></p>";
var codeDocument = CreateCodeDocument(txt);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false);
var languageServer = LanguageServer;
languageServer.ClientSettings.Capabilities.TextDocument.Hover.Value.ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText);
@ -397,7 +397,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("test1", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;
@ -431,7 +431,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Hover
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var service = GetDefaultRazorHoverInfoService();
var location = new SourceLocation(txt.IndexOf("bool-val", StringComparison.Ordinal), -1, -1);
var clientCapabilities = LanguageServer.ClientSettings.Capabilities;

Просмотреть файл

@ -28,10 +28,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument, documentFound: false);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -50,10 +50,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -87,10 +87,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -124,10 +124,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -161,10 +161,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -183,10 +183,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -205,10 +205,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><test1></test1></test1>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -242,10 +242,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<body></body>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -279,10 +279,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<body></body>";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),
@ -316,10 +316,10 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.LinkedEditingRange
{
// Arrange
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<body />";
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
var codeDocument = CreateCodeDocument(txt, isRazorFile: false, DefaultTagHelpers);
var uri = new Uri("file://path/test.razor");
var documentResolver = CreateDocumentResolver(uri.GetAbsoluteOrUNCPath(), codeDocument);
var endpoint = new LinkedEditingRangeEndpoint(LegacyDispatcher, documentResolver, LoggerFactory);
var endpoint = new LinkedEditingRangeEndpoint(Dispatcher, documentResolver, LoggerFactory);
var request = new LinkedEditingRangeParams
{
TextDocument = new TextDocumentIdentifier(uri),

Просмотреть файл

@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var cts = new CancellationTokenSource();
var detector = new TestProjectConfigurationFileChangeDetector(
cts,
LegacyDispatcher,
Dispatcher,
new[] { listener1.Object, listener2.Object },
existingConfigurationFiles);

Просмотреть файл

@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
public class ProjectConfigurationStateSynchronizerTest : LanguageServerTestBase
{
[Fact]
public void ProjectConfigurationFileChanged_Removed_UnknownDocumentNoops()
public async Task ProjectConfigurationFileChanged_Removed_UnknownDocumentNoops()
{
// Arrange
var projectService = new Mock<RazorProjectService>(MockBehavior.Strict);
@ -32,14 +32,15 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var args = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Removed, jsonFileDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(args);
await Dispatcher.RunOnDispatcherThreadAsync(
() => synchronizer.ProjectConfigurationFileChanged(args), CancellationToken.None);
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Removed_NonNormalizedPaths()
public async Task ProjectConfigurationFileChanged_Removed_NonNormalizedPaths()
{
// Arrange
var projectRazorJson = new ProjectRazorJson(
@ -66,20 +67,29 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var synchronizer = GetSynchronizer(projectService.Object);
var jsonFileDeserializer = CreateJsonFileDeserializer(projectRazorJson);
var addArgs = new ProjectConfigurationFileChangeEventArgs("/path/to\\obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer);
synchronizer.ProjectConfigurationFileChanged(addArgs);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(addArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
var removeArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Removed, Mock.Of<JsonFileDeserializer>(MockBehavior.Strict));
// Act
synchronizer.ProjectConfigurationFileChanged(removeArgs);
WaitForEnqueueAsync(synchronizer).Wait();
enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(removeArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Added_CantDeserialize_Noops()
public async Task ProjectConfigurationFileChanged_Added_CantDeserialize_Noops()
{
// Arrange
var projectService = new Mock<RazorProjectService>(MockBehavior.Strict);
@ -88,14 +98,15 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var args = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(args);
await Dispatcher.RunOnDispatcherThreadAsync(
() => synchronizer.ProjectConfigurationFileChanged(args), CancellationToken.None);
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Added_AddAndUpdatesProject()
public async Task ProjectConfigurationFileChanged_Added_AddAndUpdatesProject()
{
// Arrange
var projectRazorJson = new ProjectRazorJson(
@ -118,15 +129,19 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var args = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(args);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(args);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Removed_ResetsProject()
public async Task ProjectConfigurationFileChanged_Removed_ResetsProject()
{
// Arrange
var projectRazorJson = new ProjectRazorJson(
@ -153,20 +168,29 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var synchronizer = GetSynchronizer(projectService.Object);
var jsonFileDeserializer = CreateJsonFileDeserializer(projectRazorJson);
var addArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer);
synchronizer.ProjectConfigurationFileChanged(addArgs);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(addArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
var removeArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Removed, Mock.Of<JsonFileDeserializer>(MockBehavior.Strict));
// Act
synchronizer.ProjectConfigurationFileChanged(removeArgs);
WaitForEnqueueAsync(synchronizer).Wait();
enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(removeArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Changed_UpdatesProject()
public async Task ProjectConfigurationFileChanged_Changed_UpdatesProject()
{
// Arrange
var initialProjectRazorJson = new ProjectRazorJson(
@ -203,23 +227,31 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var synchronizer = GetSynchronizer(projectService.Object);
var addDeserializer = CreateJsonFileDeserializer(initialProjectRazorJson);
var addArgs = new ProjectConfigurationFileChangeEventArgs("path/to/obj/project.razor.json", RazorFileChangeKind.Added, addDeserializer);
synchronizer.ProjectConfigurationFileChanged(addArgs);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(addArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
var changedDeserializer = CreateJsonFileDeserializer(changedProjectRazorJson);
var changedArgs = new ProjectConfigurationFileChangeEventArgs("path/to/obj/project.razor.json", RazorFileChangeKind.Changed, changedDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(changedArgs);
WaitForEnqueueAsync(synchronizer).Wait();
enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(changedArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Changed_CantDeserialize_ResetsProject()
public async Task ProjectConfigurationFileChanged_Changed_CantDeserialize_ResetsProject()
{
// Arrange
var initialProjectRazorJson = new ProjectRazorJson(
@ -258,21 +290,30 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var synchronizer = GetSynchronizer(projectService.Object);
var addDeserializer = CreateJsonFileDeserializer(initialProjectRazorJson);
var addArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Added, addDeserializer);
synchronizer.ProjectConfigurationFileChanged(addArgs);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(addArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
var changedDeserializer = Mock.Of<JsonFileDeserializer>(d => d.Deserialize<ProjectRazorJson>(It.IsAny<string>()) == null, MockBehavior.Strict);
var changedArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Changed, changedDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(changedArgs);
WaitForEnqueueAsync(synchronizer).Wait();
enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(changedArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_Changed_UntrackedProject_Noops()
public async Task ProjectConfigurationFileChanged_Changed_UntrackedProject_Noops()
{
// Arrange
var projectService = new Mock<RazorProjectService>(MockBehavior.Strict);
@ -281,15 +322,19 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var changedArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Changed, changedDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(changedArgs);
WaitForEnqueueAsync(synchronizer, hasTask: false).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(changedArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer, hasTask: false);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.VerifyAll();
}
[Fact]
public void ProjectConfigurationFileChanged_RemoveThenAdd_OnlyAdds()
public async Task ProjectConfigurationFileChanged_RemoveThenAdd_OnlyAdds()
{
// Arrange
var projectRazorJson = new ProjectRazorJson(
@ -317,9 +362,13 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var changedArgs = new ProjectConfigurationFileChangeEventArgs(projectRazorJson.SerializedFilePath, RazorFileChangeKind.Changed, changedDeserializer);
// Act
synchronizer.ProjectConfigurationFileChanged(addedArgs);
synchronizer.ProjectConfigurationFileChanged(changedArgs);
WaitForEnqueueAsync(synchronizer).Wait();
var enqueueTask = await Dispatcher.RunOnDispatcherThreadAsync(async () =>
{
synchronizer.ProjectConfigurationFileChanged(addedArgs);
synchronizer.ProjectConfigurationFileChanged(changedArgs);
await WaitForEnqueue_DispatcherThreadAsync(synchronizer);
}, CancellationToken.None);
await enqueueTask;
// Assert
projectService.Verify(p => p.UpdateProject(
@ -332,13 +381,13 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
projectService.VerifyAll();
}
private async Task WaitForEnqueueAsync(ProjectConfigurationStateSynchronizer synchronizer, bool hasTask = true)
private async Task WaitForEnqueue_DispatcherThreadAsync(ProjectConfigurationStateSynchronizer synchronizer, bool hasTask = true)
{
Dispatcher.AssertDispatcherThread();
if (hasTask)
{
var kvp = Assert.Single(synchronizer.ProjectInfoMap);
await LegacyDispatcher.RunOnDispatcherThreadAsync(
() => kvp.Value.ProjectUpdateTask.Wait(), CancellationToken.None).ConfigureAwait(false);
await kvp.Value.ProjectUpdateTask;
}
else
{
@ -348,7 +397,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
private ProjectConfigurationStateSynchronizer GetSynchronizer(RazorProjectService razorProjectService)
{
var synchronizer = new ProjectConfigurationStateSynchronizer(LegacyDispatcher, razorProjectService, FilePathNormalizer, LoggerFactory);
var synchronizer = new ProjectConfigurationStateSynchronizer(Dispatcher, razorProjectService, FilePathNormalizer, LoggerFactory);
synchronizer.EnqueueDelay = 5;
return synchronizer;

Просмотреть файл

@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var cts = new CancellationTokenSource();
var detector = new TestProjectFileChangeDetector(
cts,
LegacyDispatcher,
Dispatcher,
new[] { listener1.Object, listener2.Object },
existingProjectFiles);

Просмотреть файл

@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
public void ApplyContentChanges_SingleChange()
{
// Arrange
var endpoint = new RazorDocumentSynchronizationEndpoint(LegacyDispatcher, DocumentResolver, ProjectService, LoggerFactory);
var endpoint = new RazorDocumentSynchronizationEndpoint(Dispatcher, DocumentResolver, ProjectService, LoggerFactory);
var sourceText = SourceText.From("Hello World");
var change = new TextDocumentContentChangeEvent()
{
@ -47,7 +47,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
public void ApplyContentChanges_MultipleChanges()
{
// Arrange
var endpoint = new RazorDocumentSynchronizationEndpoint(LegacyDispatcher, DocumentResolver, ProjectService, LoggerFactory);
var endpoint = new RazorDocumentSynchronizationEndpoint(Dispatcher, DocumentResolver, ProjectService, LoggerFactory);
var sourceText = SourceText.From("Hello World");
var changes = new[] {
new TextDocumentContentChangeEvent()
@ -106,7 +106,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
Assert.Equal(documentPath, path);
Assert.Equal(1337, version);
});
var endpoint = new RazorDocumentSynchronizationEndpoint(LegacyDispatcher, documentResolver, projectService.Object, LoggerFactory);
var endpoint = new RazorDocumentSynchronizationEndpoint(Dispatcher, documentResolver, projectService.Object, LoggerFactory);
var change = new TextDocumentContentChangeEvent()
{
Range = new Range(new Position(0, 3), new Position(0, 3)),
@ -145,7 +145,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
Assert.Equal(documentPath, path);
Assert.Equal(1337, version);
});
var endpoint = new RazorDocumentSynchronizationEndpoint(LegacyDispatcher, DocumentResolver, projectService.Object, LoggerFactory);
var endpoint = new RazorDocumentSynchronizationEndpoint(Dispatcher, DocumentResolver, projectService.Object, LoggerFactory);
var request = new DidOpenTextDocumentParams()
{
TextDocument = new TextDocumentItem()
@ -172,7 +172,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var projectService = new Mock<RazorProjectService>(MockBehavior.Strict);
projectService.Setup(service => service.CloseDocument(It.IsAny<string>()))
.Callback<string>((path) => Assert.Equal(documentPath, path));
var endpoint = new RazorDocumentSynchronizationEndpoint(LegacyDispatcher, DocumentResolver, projectService.Object, LoggerFactory);
var endpoint = new RazorDocumentSynchronizationEndpoint(Dispatcher, DocumentResolver, projectService.Object, LoggerFactory);
var request = new DidCloseTextDocumentParams()
{
TextDocument = new TextDocumentIdentifier()

Просмотреть файл

@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.CSharp,
@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.CSharp,
@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.CSharp,
@ -147,7 +147,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
new SourceSpan(10, 12))
});
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.CSharp,
@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.Html,
@ -195,7 +195,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<p>@DateTime.Now</p>");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.Razor,
@ -227,7 +227,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
});
codeDocument.SetUnsupported();
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorMapToDocumentRangesParams()
{
Kind = RazorLanguageKind.CSharp,
@ -251,7 +251,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("@{}");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorLanguageQueryParams()
{
Uri = new Uri(documentPath),
@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
var documentPath = "C:/path/to/document.cshtml";
var codeDocument = CreateCodeDocument("<s");
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorLanguageQueryParams()
{
Uri = new Uri(documentPath),
@ -302,7 +302,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
"/* CSharp */",
new[] { new SourceMapping(new SourceSpan(0, 1), new SourceSpan(0, 12)) });
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorLanguageQueryParams()
{
Uri = new Uri(documentPath),
@ -331,7 +331,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer
new[] { new SourceMapping(new SourceSpan(0, 1), new SourceSpan(0, 12)) });
codeDocument.SetUnsupported();
var documentResolver = CreateDocumentResolver(documentPath, codeDocument);
var languageEndpoint = new RazorLanguageEndpoint(LegacyDispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var languageEndpoint = new RazorLanguageEndpoint(Dispatcher, documentResolver, DocumentVersionCache, MappingService, Mock.Of<RazorFormattingService>(MockBehavior.Strict), LoggerFactory);
var request = new RazorLanguageQueryParams()
{
Uri = new Uri(documentPath),

Просмотреть файл

@ -494,9 +494,9 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Refactoring.Test
d.TryResolveDocument(itemDirectory1.FilePath, out directory1Component) == true &&
d.TryResolveDocument(itemDirectory2.FilePath, out directory2Component) == true, MockBehavior.Strict);
var searchEngine = new DefaultRazorComponentSearchEngine(LegacyDispatcher, projectSnapshotManagerAccessor, LoggerFactory);
var searchEngine = new DefaultRazorComponentSearchEngine(Dispatcher, projectSnapshotManagerAccessor, LoggerFactory);
languageServerFeatureOptions ??= Mock.Of<LanguageServerFeatureOptions>(options => options.SupportsFileManipulation == true, MockBehavior.Strict);
var endpoint = new RazorComponentRenameEndpoint(LegacyDispatcher, documentResolver, searchEngine, projectSnapshotManagerAccessor, languageServerFeatureOptions);
var endpoint = new RazorComponentRenameEndpoint(Dispatcher, documentResolver, searchEngine, projectSnapshotManagerAccessor, languageServerFeatureOptions);
return endpoint;
}

Просмотреть файл

@ -6,19 +6,16 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.LanguageServer.Common;
using Microsoft.AspNetCore.Razor.LanguageServer.Extensions;
using Microsoft.AspNetCore.Razor.LanguageServer.Formatting;
using Microsoft.AspNetCore.Razor.LanguageServer.JsonRpc;
using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
using Microsoft.AspNetCore.Razor.LanguageServer.Semantic;
using Microsoft.AspNetCore.Razor.LanguageServer.Semantic.Models;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Razor.Workspaces.Extensions;
using Moq;
using OmniSharp.Extensions.JsonRpc;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Xunit;
using OmniSharpRange = OmniSharp.Extensions.LanguageServer.Protocol.Models.Range;
using OSharp = OmniSharp.Extensions.LanguageServer.Protocol.Models;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
{
@ -26,170 +23,169 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
// Finds the test method name using reflection, and uses
// that to find the expected input/output test files as Embedded resources.
[IntializeTestFile]
[UseExportProvider]
public class DefaultRazorSemanticTokenInfoServiceTest : SemanticTokenTestBase
{
#region CSharp
[Fact]
public async Task GetSemanticTokens_CSharp_RazorIfNotReady()
{
var txt = $@"<p></p>@{{
var documentText = @"<p></p>@{
var d = ""t"";
}}";
}
";
var cSharpResponse = new ProvideSemanticTokensResponse(
tokens: Array.Empty<int>(), isFinalized: true, hostDocumentSyncVersion: 1);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse, documentVersion: 1);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 3, Character = 0 }
};
var csharpTokens = new ProvideSemanticTokensResponse(
tokens: Array.Empty<int>(), isFinalized: false, hostDocumentSyncVersion: 1);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens, documentVersion: 1);
}
[Fact]
public async Task GetSemanticTokens_CSharpBlock_HTML()
{
var txt = @$"@{{
var documentText = @"@{
var d = ""t"";
<p>HTML @d</p>
}}";
}
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
20, 4, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
0, 2, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // "
0, 1, 1, RazorSemanticTokensLegend.CSharpString, 0, // t
0, 1, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // "
0, 1, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // ;
8, 13, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 4, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(
csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_CSharp_Nested_HTML()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<!--" +
$"@{{" +
$"var d = \"string\";" +
$"@<a></a>" +
$"}}" +
$"-->";
var documentText = @"@addTagHelper *, TestAssembly
<!--@{var d = ""string"";@<a></a>}-->
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 6, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
0, 2, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // "
0, 1, 6, RazorSemanticTokensLegend.CSharpString, 0, // string
0, 6, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // "
0, 1, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // ;
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(
csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_CSharp_VSCodeWorks()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@{{ var d = }}";
var documentText = @"@addTagHelper *, TestAssembly
@{ var d = }
";
var cSharpResponse = new ProvideSemanticTokensResponse(
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = new ProvideSemanticTokensResponse(
tokens: Array.Empty<int>(), isFinalized: true, hostDocumentSyncVersion: null);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse, documentVersion: 1);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens, documentVersion: 1);
}
[Fact]
public async Task GetSemanticTokens_CSharp_Explicit()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@(DateTime.Now)";
var documentText = @$"@addTagHelper *, TestAssembly
@(DateTime.Now)
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 6, 8, RazorSemanticTokensLegend.CSharpVariable, 0, // DateTime
0, 8, 1, RazorSemanticTokensLegend.CSharpPunctuation, 0, // .
0, 1, 3, RazorSemanticTokensLegend.CSharpVariable, 0, // Now
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_CSharp_Implicit()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@{{ var d = \"txt\";}}{Environment.NewLine}" +
$"@d";
var documentText = @"@addTagHelper *, TestAssembly
@{ var d = ""txt"";}
@d
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 3, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // "
0, 1, 3, RazorSemanticTokensLegend.CSharpString, 0, // txt
0, 3, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // "
0, 1, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // ;
7, 6, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 3, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_CSharp_VersionMismatch()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@{{ var d = }}";
var documentText = @"@addTagHelper *, TestAssembly
@{ var d = }
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 3, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
11, 10, 25, RazorSemanticTokensLegend.CSharpKeyword, 0, // No mapping
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(csharpTokens, isFinalized: true, hostDocumentSyncVersion: 42);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse, documentVersion: 21);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens, documentVersion: 21);
}
[Fact]
public async Task GetSemanticTokens_CSharp_FunctionAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@{{ var d = }}";
var documentText = @"@addTagHelper *, TestAssembly
@{ var d = }
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 3, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 0, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
4, 5, 1, RazorSemanticTokensLegend.CSharpKeyword, 0, // No mapping
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_CSharp_StaticModifierAsync()
public async Task GetSemanticTokens_CSharp_StaticModifier()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@{{ var d = }}";
var documentText = @"@code
{
static int x = 1;
}
";
var csharpTokens = new int[]
var razorRange = new OSharp.Range
{
29, 3, 3, RazorSemanticTokensLegend.CSharpKeyword, 0, // var
0, 4, 1, RazorSemanticTokensLegend.CSharpVariable, 1, // d
0, 2, 1, RazorSemanticTokensLegend.CSharpOperator, 0, // =
4, 5, 1, RazorSemanticTokensLegend.CSharpKeyword, 0, // No mapping
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 4, Character = 0 }
};
var cSharpResponse = new ProvideSemanticTokensResponse(csharpTokens, isFinalized: true, hostDocumentSyncVersion: 0);
await AssertSemanticTokensAsync(txt, isRazor: false, csharpTokens: cSharpResponse);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
#endregion
@ -197,57 +193,120 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
[Fact]
public async Task GetSemanticTokens_MultipleBlankLines()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}{Environment.NewLine}{Environment.NewLine}<p>first{Environment.NewLine}second</p>";
var documentText = @"@addTagHelper *, TestAssembly
await AssertSemanticTokensAsync(txt, isRazor: false);
<p>first
second</p>
";
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 4, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_IncompleteTag()
{
var txt = "<str class='";
var documentText = @"<str class='
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_MinimizedHTMLAttribute()
{
var txt = "<p attr />";
var documentText = @"<p attr />
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_MinimizedHTMLAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<input/> ";
var documentText = @"@addTagHelper *, TestAssembly
<input/>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_HTMLCommentAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<!-- comment with comma's --> ";
var documentText = @"@addTagHelper *, TestAssembly
<!-- comment with comma's -->
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_PartialHTMLCommentAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<!-- comment";
var documentText = @"@addTagHelper *, TestAssembly
<!-- comment
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_HTMLIncludesBang()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<!input/>";
var documentText = @"@addTagHelper *, TestAssembly
<!input/>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
#endregion
@ -255,65 +314,137 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
[Fact]
public async Task GetSemanticTokens_HalfOfCommentAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}@* comment";
var documentText = @"@addTagHelper *, TestAssembly
@* comment
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_NoAttributesAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_WithAttributeAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 bool-val='true'></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_MinimizedAttribute_BoundAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 bool-val></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_MinimizedAttribute_NotBoundAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 notbound></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 notbound></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_IgnoresNonTagHelperAttributesAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true' class='display:none'></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 bool-val='true' class='display:none'></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_TagHelpersNotAvailableInRazorAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true' class='display:none'></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 bool-val='true' class='display:none'></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_DoesNotApplyOnNonTagHelpersAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<p bool-val='true'></p> ";
var documentText = @"@addTagHelper *, TestAssembly
<p bool-val='true'></p>
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
#endregion TagHelpers
@ -322,85 +453,136 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
public async Task GetSemanticTokens_Razor_MinimizedDirectiveAttributeParameters()
{
// Capitalized, non-well-known-HTML elements should not be marked as TagHelpers
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<NotATagHelp @minimized:something /> ";
var documentText = @"@addTagHelper *, TestAssembly
}<NotATagHelp @minimized:something />
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_ComponentAttributeAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<Component1 bool-val=\"true\"></Component1>";
var documentText = @"@addTagHelper *, TestAssembly
<Component1 bool-val=""true""></Component1>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_DirectiveAttributesParametersAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<Component1 @test:something='Function'></Component1> ";
var documentText = @"@addTagHelper *, TestAssembly
<Component1 @test:something='Function'></Component1>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_NonComponentsDoNotShowInRazorAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 bool-val='true'></test1> ";
var documentText = @"@addTagHelper *, TestAssembly
<test1 bool-val='true'></test1>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_DirectivesAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<Component1 @test='Function'></Component1> ";
var documentText = @"@addTagHelper *, TestAssembly
<Component1 @test='Function'></Component1>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_HandleTransitionEscape()
{
var txt = $"@@text";
var documentText = @"@@text
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_DoNotColorNonTagHelpersAsync()
{
var txt = $"{Environment.NewLine}<p @test='Function'></p> ";
var documentText = @"
<p @test='Function'></p>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_DoesNotApplyOnNonTagHelpersAsync()
{
var txt = $"@addTagHelpers *, TestAssembly{Environment.NewLine}<p></p> ";
var documentText = @"@addTagHelpers *, TestAssembly
<p></p>
";
await AssertSemanticTokensAsync(txt, isRazor: true);
}
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
[Fact(Skip = "https://github.com/dotnet/razor-tooling/issues/5948")]
public async Task GetSemanticTokens_Razor_InRangeAsync()
{
var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1> ";
var startIndex = txt.IndexOf("test1", StringComparison.Ordinal); ;
var endIndex = startIndex + 5;
var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers);
codeDocument.GetSourceText().GetLineAndOffset(startIndex, out var startLine, out var startChar);
codeDocument.GetSourceText().GetLineAndOffset(endIndex, out var endLine, out var endChar);
var startPosition = new Position(startLine, startChar);
var endPosition = new Position(endLine, endChar);
var location = new OmniSharpRange(startPosition, endPosition);
await AssertSemanticTokensAsync(txt, isRazor: false, range: location);
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
#endregion DirectiveAttributes
@ -408,120 +590,186 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Test.Semantic
[Fact]
public async Task GetSemanticTokens_Razor_CodeDirectiveAsync()
{
var txt = $"@code {{}}";
var documentText = @"@code {}
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_CodeDirectiveBodyAsync()
{
var txt = @$"@code {{
var documentText = @"@code {
public void SomeMethod()
{{
{
@DateTime.Now
}}
}}";
}
}
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 6, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_UsingDirective()
{
var txt = $"@using Microsoft.AspNetCore.Razor";
var documentText = @"@using Microsoft.AspNetCore.Razor
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_FunctionsDirectiveAsync()
{
var txt = $"@functions {{}}";
var documentText = @"@functions {}
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_NestedTextDirectives()
{
var txt = @$"@functions {{
var documentText = @"@functions {
private void BidsByShipment(string generatedId, int bids)
{{
{
if (bids > 0)
{{
{
<a class=""Thing"">
@if(bids > 0)
{{
{
<text>@DateTime.Now</text>
}}
}
</a>
}}
}}";
}
}
}
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 14, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_NestedTransitions()
{
var txt = @$"@functions {{
var documentText = @"@functions {
Action<object> abc = @<span></span>;
}}";
}
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 3, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
#endregion
[Fact]
public async Task GetSemanticTokens_Razor_CommentAsync()
{
var txt = $"@* A comment *@";
var documentText = @"@* A comment *@
";
await AssertSemanticTokensAsync(txt, isRazor: true);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 1, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: true);
await AssertSemanticTokensAsync(documentText, isRazorFile: true, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_MultiLineCommentMidlineAsync()
{
var txt = $@"<a />@* kdl
var documentText = @"<a />@* kdl
skd
slf*@";
slf*@
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
[Fact]
public async Task GetSemanticTokens_Razor_MultiLineCommentAsync()
{
var txt = $"@* {Environment.NewLine}" +
$"stuff{Environment.NewLine}" +
$" things *@";
var documentText = @$"@*stuff
things *@
";
await AssertSemanticTokensAsync(txt, isRazor: false);
var razorRange = new OSharp.Range
{
Start = new OSharp.Position { Line = 0, Character = 0 },
End = new OSharp.Position { Line = 2, Character = 0 }
};
var csharpTokens = await GetCSharpSemanticTokensResponseAsync(documentText, razorRange, isRazorFile: false);
await AssertSemanticTokensAsync(documentText, isRazorFile: false, razorRange, csharpTokens: csharpTokens);
}
private async Task AssertSemanticTokensAsync(
string txt,
bool isRazor,
OmniSharpRange? range = null,
string documentText,
bool isRazorFile,
OSharp.Range range,
RazorSemanticTokensInfoService? service = null,
ProvideSemanticTokensResponse? csharpTokens = null,
int? documentVersion = 0)
{
if (range is null)
{
var lines = txt.Split(Environment.NewLine);
range = new OmniSharpRange { Start = new Position { Line = 0, Character = 0 }, End = new Position { Line = lines.Length - 1, Character = lines[^1].Length } };
};
await AssertSemanticTokensAsync(new string[] { txt }, new bool[] { isRazor }, range, service, csharpTokens, documentVersion);
await AssertSemanticTokensAsync(new string[] { documentText }, new bool[] { isRazorFile }, range, service, csharpTokens, documentVersion);
}
private async Task AssertSemanticTokensAsync(
string[] txtArray,
string[] documentTexts,
bool[] isRazorArray,
OmniSharpRange range,
OSharp.Range range,
RazorSemanticTokensInfoService? service = null,
ProvideSemanticTokensResponse? csharpTokens = null,
int? documentVersion = 0)
@ -537,7 +785,7 @@ slf*@";
csharpTokens = new ProvideSemanticTokensResponse(tokens: null, isFinalized: true, documentVersion);
}
var (documentSnapshots, textDocumentIdentifiers) = CreateDocumentSnapshot(txtArray, isRazorArray, DefaultTagHelpers);
var (documentSnapshots, textDocumentIdentifiers) = CreateDocumentSnapshot(documentTexts, isRazorArray, DefaultTagHelpers);
if (service is null)
{
@ -565,12 +813,12 @@ slf*@";
var languageServer = new Mock<ClientNotifierServiceBase>(MockBehavior.Strict);
languageServer
.Setup(l => l.SendRequestAsync(LanguageServerConstants.RazorProvideSemanticTokensRangeEndpoint, It.IsAny<SemanticTokensParams>()))
.Setup(l => l.SendRequestAsync(LanguageServerConstants.RazorProvideSemanticTokensRangeEndpoint, It.IsAny<OSharp.SemanticTokensParams>()))
.Returns(Task.FromResult(responseRouterReturns.Object));
var documentMappingService = new DefaultRazorDocumentMappingService(TestLoggerFactory.Instance);
var loggingFactory = TestLoggerFactory.Instance;
var projectSnapshotManagerDispatcher = LegacyDispatcher;
var projectSnapshotManagerDispatcher = Dispatcher;
var documentResolver = new TestDocumentResolver(documentSnapshots);
var documentVersionCache = new Mock<DocumentVersionCache>(MockBehavior.Strict);

Просмотреть файл

@ -6,23 +6,42 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.LanguageServer.Completion;
using Microsoft.AspNetCore.Razor.LanguageServer.Extensions;
using Microsoft.AspNetCore.Razor.LanguageServer.JsonRpc;
using Microsoft.AspNetCore.Razor.LanguageServer.Semantic.Models;
using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Razor.Workspaces.Extensions;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Xunit;
using Xunit.Sdk;
using OS = OmniSharp.Extensions.LanguageServer.Protocol.Models;
using VS = Microsoft.VisualStudio.LanguageServer.Protocol;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
{
public abstract class SemanticTokenTestBase : TagHelperServiceTestBase
{
private static readonly AsyncLocal<string?> s_fileName = new AsyncLocal<string?>();
private static readonly AsyncLocal<string?> s_fileName = new();
private static readonly string s_projectPath = TestProject.GetProjectDirectory(typeof(TagHelperServiceTestBase));
protected static readonly ServerCapabilities SemanticTokensServerCapabilities = new()
{
SemanticTokensOptions = new()
{
Full = false,
Range = true
}
};
// Used by the test framework to set the 'base' name for test files.
public static string? FileName
{
@ -39,7 +58,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
protected int BaselineTestCount { get; set; }
protected int BaselineEditTestCount { get; set; }
internal void AssertSemanticTokensMatchesBaseline(IEnumerable<int>? actualSemanticTokens)
protected void AssertSemanticTokensMatchesBaseline(IEnumerable<int>? actualSemanticTokens)
{
if (FileName is null)
{
@ -79,7 +98,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
Assert.True(semanticArray.Length == actual.Length, $"Expected length: {semanticArray.Length}, Actual length: {actual.Length}");
}
internal int[]? GetBaselineTokens(string baselineFileName)
protected int[]? GetBaselineTokens(string baselineFileName)
{
var semanticFile = TestFile.Create(baselineFileName, GetType().GetTypeInfo().Assembly);
if (!semanticFile.Exists())
@ -92,6 +111,58 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
return semanticArray;
}
private protected async Task<ProvideSemanticTokensResponse> GetCSharpSemanticTokensResponseAsync(
string documentText, OS.Range razorRange, bool isRazorFile, int hostDocumentSyncVersion = 0)
{
var codeDocument = CreateCodeDocument(documentText, isRazorFile, DefaultTagHelpers);
var csharpRange = GetMappedCSharpRange(codeDocument, razorRange);
var csharpTokens = Array.Empty<int>();
var isFinalized = true;
if (csharpRange is not null)
{
var csharpSourceText = codeDocument.GetCSharpSourceText();
var files = new List<(Uri, SourceText)>();
var documentUri = new Uri("C:\\TestSolution\\TestProject\\TestDocument.cs");
files.Add((documentUri, csharpSourceText));
var exportProvider = TestCompositions.Roslyn.ExportProviderFactory.CreateExportProvider();
using var workspace = CreateTestWorkspace(files, exportProvider);
await using var csharpLspServer = await CreateCSharpLspServerAsync(workspace, exportProvider, SemanticTokensServerCapabilities);
var result = await csharpLspServer.ExecuteRequestAsync<SemanticTokensRangeParams, VSSemanticTokensResponse>(
Methods.TextDocumentSemanticTokensRangeName,
CreateVSSemanticTokensRangeParams(csharpRange.AsVSRange(), documentUri), CancellationToken.None);
csharpTokens = result?.Data;
isFinalized = result?.IsFinalized ?? false;
}
var csharpResponse = new ProvideSemanticTokensResponse(
tokens: csharpTokens, isFinalized, hostDocumentSyncVersion);
return csharpResponse;
}
protected static OS.Range? GetMappedCSharpRange(RazorCodeDocument codeDocument, OS.Range razorRange)
{
var documentMappingService = new DefaultRazorDocumentMappingService(TestLoggerFactory.Instance);
if (!documentMappingService.TryMapToProjectedDocumentRange(codeDocument, razorRange, out var csharpRange) &&
!DefaultRazorSemanticTokensInfoService.TryGetMinimalCSharpRange(codeDocument, razorRange, out csharpRange))
{
// No C# in the range.
return null;
}
return csharpRange;
}
protected static SemanticTokensRangeParams CreateVSSemanticTokensRangeParams(VS.Range range, Uri uri)
=> new()
{
TextDocument = new TextDocumentIdentifier { Uri = uri },
Range = range
};
private static void GenerateSemanticBaseline(IEnumerable<int>? actual, string baselineFileName)
{
var builder = new StringBuilder();
@ -140,5 +211,11 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Semantic
return results.ToArray();
}
private class VSSemanticTokensResponse : SemanticTokens
{
[DataMember(Name = "isFinalized")]
public bool IsFinalized { get; set; }
}
}
}

Просмотреть файл

@ -2,17 +2,15 @@
0 0 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
1 4 3 15 0 //keyword
0 4 1 8 0 //variable
0 4 1 34 0 //local name
0 2 1 21 0 //operator
0 2 1 43 0 //punctuation
0 1 1 18 0 //string
0 1 1 43 0 //punctuation
0 1 1 43 0 //punctuation
0 2 3 18 0 //string
0 3 1 43 0 //punctuation
1 4 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 1 1 91 0 //markupTagDelimiter
0 6 1 84 0 //razorTransition
0 1 1 8 0 //variable
0 1 1 34 0 //local name
0 1 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement

Просмотреть файл

@ -4,6 +4,6 @@
1 0 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
0 1 8 8 0 //variable
0 8 1 43 0 //punctuation
0 8 1 21 0 //operator
0 1 3 8 0 //variable
0 3 1 84 0 //razorTransition

Просмотреть файл

@ -4,6 +4,6 @@
1 0 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
0 2 3 15 0 //keyword
0 4 1 8 0 //variable
0 4 1 34 0 //local name
0 2 1 21 0 //operator
0 2 1 84 0 //razorTransition

Просмотреть файл

@ -4,12 +4,10 @@
1 0 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
0 2 3 15 0 //keyword
0 4 1 8 0 //variable
0 4 1 34 0 //local name
0 2 1 21 0 //operator
0 2 1 21 0 //operator
0 1 3 18 0 //string
0 3 1 21 0 //operator
0 1 1 21 0 //operator
0 2 5 18 0 //string
0 5 1 43 0 //punctuation
0 1 1 84 0 //razorTransition
1 0 1 84 0 //razorTransition
0 1 1 8 0 //variable
0 1 1 34 0 //local name

Просмотреть файл

@ -5,12 +5,10 @@
0 4 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
0 1 3 15 0 //keyword
0 4 1 8 0 //variable
0 4 1 34 0 //local name
0 2 1 21 0 //operator
0 2 1 43 0 //punctuation
0 1 6 18 0 //string
0 6 1 43 0 //punctuation
0 1 1 43 0 //punctuation
0 2 8 18 0 //string
0 8 1 43 0 //punctuation
0 1 1 84 0 //razorTransition
0 1 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement

Просмотреть файл

@ -0,0 +1,11 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 4 87 0 //razorDirective
1 0 1 84 0 //razorTransition
1 4 6 15 0 //keyword
0 7 3 15 0 //keyword
0 4 1 31 1 //field name
0 2 1 21 0 //operator
0 2 1 19 0 //number
0 1 1 43 0 //punctuation
1 0 1 84 0 //razorTransition

Просмотреть файл

@ -1,9 +0,0 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
1 0 1 84 0 //razorTransition
0 1 1 84 0 //razorTransition
0 2 3 15 0 //keyword
0 4 1 8 1 //variable
0 2 1 21 0 //operator
0 2 1 84 0 //razorTransition

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 2 8 94 0 //markupAttribute

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 4 97 0 //markupCommentPunctuation
0 4 22 98 0 //markupComment
0 22 3 97 0 //markupCommentPunctuation

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 1 84 0 //razorTransition
0 1 5 92 0 //markupElement

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 89 0 //razorCommentTransition
0 1 1 90 0 //razorCommentStar
0 1 8 88 0 //razorComment

Просмотреть файл

@ -6,7 +6,8 @@
0 6 8 83 0 //razorTagHelperAttribute
0 8 1 93 0 //markupOperator
0 1 1 95 0 //markupAttributeQuote
0 5 1 95 0 //markupAttributeQuote
0 1 4 15 0 //keyword
0 4 1 95 0 //markupAttributeQuote
0 2 5 94 0 //markupAttribute
0 5 1 93 0 //markupOperator
0 1 1 95 0 //markupAttributeQuote

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 82 0 //razorTagHelperElement
0 6 8 83 0 //razorTagHelperAttribute

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 82 0 //razorTagHelperElement
0 6 8 94 0 //markupAttribute

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 92 0 //markupElement
0 5 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,7 +1,8 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
3 0 1 91 0 //markupTagDelimiter
0 13 15 18 0 //string
2 0 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 1 1 91 0 //markupTagDelimiter
1 6 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 82 0 //razorTagHelperElement
0 5 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,3 +1,4 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string

Просмотреть файл

@ -2,5 +2,15 @@
0 0 1 84 0 //razorTransition
0 1 4 87 0 //razorDirective
0 5 1 84 0 //razorTransition
3 0 1 84 0 //razorTransition
2 0 1 84 0 //razorTransition
1 4 6 15 0 //keyword
0 7 4 15 0 //keyword
0 5 10 35 0 //method name
0 10 1 43 0 //punctuation
0 1 1 43 0 //punctuation
1 4 1 43 0 //punctuation
1 0 1 84 0 //razorTransition
0 1 8 8 0 //variable
0 8 1 21 0 //operator
0 1 3 8 0 //variable
1 4 1 43 0 //punctuation
1 0 1 84 0 //razorTransition

Просмотреть файл

@ -3,10 +3,11 @@
0 1 12 87 0 //razorDirective
1 0 1 91 0 //markupTagDelimiter
0 1 10 100 0 //razorComponentElement
0 11 8 101 0 //razorComponentAttribute
0 11 8 101 0 //RazorComponentAttribute
0 8 1 93 0 //markupOperator
0 1 1 95 0 //markupAttributeQuote
0 5 1 95 0 //markupAttributeQuote
0 1 4 15 0 //keyword
0 4 1 95 0 //markupAttributeQuote
0 1 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 10 100 0 //razorComponentElement
0 11 1 84 0 //razorTransition

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 10 100 0 //razorComponentElement
0 11 1 84 0 //razorTransition

Просмотреть файл

@ -1,5 +1,6 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 13 8 0 //variable
1 0 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 1 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,7 +1,8 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
1 0 1 91 0 //markupTagDelimiter
0 13 15 18 0 //string
1 1 1 91 0 //markupTagDelimiter
0 1 11 92 0 //markupElement
0 12 1 84 0 //razorTransition
0 1 9 86 0 //razorDirectiveAttribute

Просмотреть файл

@ -1,8 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 89 0 //razorCommentTransition
0 1 1 90 0 //razorCommentStar
0 1 1 88 0 //razorComment
1 0 5 88 0 //razorComment
1 0 8 88 0 //razorComment
0 8 1 90 0 //razorCommentStar
0 1 5 88 0 //razorComment
1 0 7 88 0 //razorComment
0 7 1 90 0 //razorCommentStar
0 1 1 89 0 //razorCommentTransition

Просмотреть файл

@ -2,7 +2,25 @@
0 0 1 84 0 //razorTransition
0 1 9 87 0 //razorDirective
0 10 1 84 0 //razorTransition
5 24 1 91 0 //markupTagDelimiter
1 16 7 15 0 //keyword
0 8 4 15 0 //keyword
0 5 14 35 0 //method name
0 14 1 43 0 //punctuation
0 1 6 15 0 //keyword
0 7 11 39 0 //parameter name
0 11 1 43 0 //punctuation
0 2 3 15 0 //keyword
0 4 4 39 0 //parameter name
0 4 1 43 0 //punctuation
1 16 1 43 0 //punctuation
1 20 2 24 0 //keyword - control
0 3 1 43 0 //punctuation
0 1 4 39 0 //parameter name
0 5 1 21 0 //operator
0 2 1 19 0 //number
0 1 1 43 0 //punctuation
1 20 1 43 0 //punctuation
1 24 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 2 5 94 0 //markupAttribute
0 5 1 93 0 //markupOperator
@ -11,10 +29,24 @@
0 5 1 95 0 //markupAttributeQuote
0 1 1 91 0 //markupTagDelimiter
1 28 1 84 0 //razorTransition
2 32 6 87 0 //razorDirective
0 1 2 24 0 //keyword - control
0 2 1 43 0 //punctuation
0 1 4 39 0 //parameter name
0 5 1 21 0 //operator
0 2 1 19 0 //number
0 1 1 43 0 //punctuation
1 28 1 43 0 //punctuation
1 32 6 87 0 //razorDirective
0 6 1 84 0 //razorTransition
0 13 7 87 0 //razorDirective
2 24 1 91 0 //markupTagDelimiter
0 1 8 8 0 //variable
0 8 1 21 0 //operator
0 1 3 8 0 //variable
0 3 7 87 0 //razorDirective
1 28 1 43 0 //punctuation
1 24 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter
0 1 1 92 0 //markupElement
0 1 1 91 0 //markupTagDelimiter
1 20 1 43 0 //punctuation
1 16 1 43 0 //punctuation
1 12 1 84 0 //razorTransition

Просмотреть файл

@ -2,7 +2,13 @@
0 0 1 84 0 //razorTransition
0 1 9 87 0 //razorDirective
0 10 1 84 0 //razorTransition
1 37 1 84 0 //razorTransition
1 16 6 8 0 //variable
0 6 1 43 0 //punctuation
0 1 6 15 0 //keyword
0 6 1 43 0 //punctuation
0 2 3 31 0 //field name
0 4 1 21 0 //operator
0 2 1 84 0 //razorTransition
0 1 1 91 0 //markupTagDelimiter
0 1 4 92 0 //markupElement
0 4 1 91 0 //markupTagDelimiter
@ -10,4 +16,5 @@
0 1 1 91 0 //markupTagDelimiter
0 1 4 92 0 //markupElement
0 4 1 91 0 //markupTagDelimiter
0 1 1 43 0 //punctuation
1 12 1 84 0 //razorTransition

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 92 0 //markupElement
0 6 8 94 0 //markupAttribute

Просмотреть файл

@ -1,2 +1,8 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 5 15 0 //keyword
0 6 9 8 0 //variable
0 9 1 21 0 //operator
0 1 10 8 0 //variable
0 10 1 21 0 //operator
0 1 5 8 0 //variable

Просмотреть файл

@ -1,6 +1,7 @@
//line,characterPos,length,tokenType,modifier
0 0 1 84 0 //razorTransition
0 1 12 87 0 //razorDirective
0 13 15 18 0 //string
1 0 1 91 0 //markupTagDelimiter
0 1 5 92 0 //markupElement
0 6 8 94 0 //markupAttribute

Просмотреть файл

@ -6,7 +6,8 @@
0 6 8 83 0 //razorTagHelperAttribute
0 8 1 93 0 //markupOperator
0 1 1 95 0 //markupAttributeQuote
0 5 1 95 0 //markupAttributeQuote
0 1 4 15 0 //keyword
0 4 1 95 0 //markupAttributeQuote
0 1 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter
0 1 1 91 0 //markupTagDelimiter

Просмотреть файл

@ -1,4 +1,5 @@
{
"methodDisplay": "method",
"shadowCopy": false
"shadowCopy": false,
"parallelizeTestCollections": false
}

Просмотреть файл

@ -24,6 +24,8 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
private static readonly ConcurrentDictionary<string, Scope> s_scopes = new();
private const string DefaultScope = "default";
private static readonly object s_lock = new();
internal static bool Enabled { get; private set; }
internal static ExportProvider[] ExportProvidersForCleanup
@ -44,12 +46,15 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
internal static void SetEnabled_OnlyUseExportProviderAttributeCanCall(bool value)
{
Enabled = value;
if (!Enabled)
lock (s_lock)
{
foreach (var scope in s_scopes.Values.ToArray())
Enabled = value;
if (!Enabled)
{
scope.Clear();
foreach (var scope in s_scopes.Values.ToArray())
{
scope.Clear();
}
}
}
}
@ -146,7 +151,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
_exportProviderFactory = exportProviderFactory;
}
public ExportProvider GetOrCreateExportProvider()
private ExportProvider GetOrCreateExportProvider()
{
if (!Enabled)
{
@ -210,7 +215,10 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
//
// It may be clearer to refactor the implementation to only allow one call to CreateExportProvider in
// the context of a single test. https://github.com/dotnet/roslyn/issues/25863
return GetOrCreateExportProvider();
lock (s_lock)
{
return GetOrCreateExportProvider();
}
}
private void RequireForSingleExportProvider([DoesNotReturnIf(false)] bool condition)

Просмотреть файл

@ -8,7 +8,7 @@ using System.Threading;
namespace Microsoft.AspNetCore.Razor.Test.Common
{
internal partial class TestExportJoinableTaskContext
public partial class TestExportJoinableTaskContext
{
/// <summary>
/// Defines a <see cref="SynchronizationContext"/> for use in cases where the synchronization context should not

Просмотреть файл

@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Common
// Starting with 15.3 the editor took a dependency on JoinableTaskContext
// in Text.Logic and IntelliSense layers as an editor host provided service.
[Export]
internal partial class TestExportJoinableTaskContext
public partial class TestExportJoinableTaskContext
{
[ImportingConstructor]
//[Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]