зеркало из https://github.com/dotnet/razor.git
Bump WebTools and remove legacy CLaSP package
This commit is contained in:
Родитель
21c7674ac4
Коммит
8dc0e5a518
|
@ -5,7 +5,7 @@
|
||||||
here should be _ prefixed to indicate that they are not meant to be used outside this file.
|
here should be _ prefixed to indicate that they are not meant to be used outside this file.
|
||||||
-->
|
-->
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_MicrosoftWebToolsPackageVersion>17.9.67-preview-0001</_MicrosoftWebToolsPackageVersion>
|
<_MicrosoftWebToolsPackageVersion>17.11.11-preview-0001</_MicrosoftWebToolsPackageVersion>
|
||||||
<_MicrosoftVisualStudioShellPackagesVersion>17.11.39721</_MicrosoftVisualStudioShellPackagesVersion>
|
<_MicrosoftVisualStudioShellPackagesVersion>17.11.39721</_MicrosoftVisualStudioShellPackagesVersion>
|
||||||
<_MicrosoftVisualStudioPackagesVersion>17.11.191</_MicrosoftVisualStudioPackagesVersion>
|
<_MicrosoftVisualStudioPackagesVersion>17.11.191</_MicrosoftVisualStudioPackagesVersion>
|
||||||
<_VisualStudioLanguageServerProtocolVersion>17.12.1-preview</_VisualStudioLanguageServerProtocolVersion>
|
<_VisualStudioLanguageServerProtocolVersion>17.12.1-preview</_VisualStudioLanguageServerProtocolVersion>
|
||||||
|
|
|
@ -102,12 +102,12 @@ internal class FormattingLanguageServerClient(ILoggerFactory loggerFactory) : IC
|
||||||
|
|
||||||
if (!contentTypeService.ContentTypes.Any(t => t.TypeName == HtmlContentTypeDefinition.HtmlContentType))
|
if (!contentTypeService.ContentTypes.Any(t => t.TypeName == HtmlContentTypeDefinition.HtmlContentType))
|
||||||
{
|
{
|
||||||
contentTypeService.AddContentType(HtmlContentTypeDefinition.HtmlContentType, new[] { StandardContentTypeNames.Text });
|
contentTypeService.AddContentType(HtmlContentTypeDefinition.HtmlContentType, [StandardContentTypeNames.Text]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var textBufferFactoryService = (ITextBufferFactoryService3)exportProvider.GetExportedValue<ITextBufferFactoryService>();
|
var textBufferFactoryService = (ITextBufferFactoryService3)exportProvider.GetExportedValue<ITextBufferFactoryService>();
|
||||||
var bufferManager = WebTools.BufferManager.New(contentTypeService, textBufferFactoryService, []);
|
var bufferManager = WebTools.BufferManager.New(contentTypeService, textBufferFactoryService, []);
|
||||||
var logger = new ClaspLoggingBridge(_loggerFactory);
|
var logger = _loggerFactory.GetOrCreateLogger("ApplyFormattedEditsHandler");
|
||||||
var applyFormatEditsHandler = WebTools.ApplyFormatEditsHandler.New(textBufferFactoryService, bufferManager, logger);
|
var applyFormatEditsHandler = WebTools.ApplyFormatEditsHandler.New(textBufferFactoryService, bufferManager, logger);
|
||||||
|
|
||||||
// Make sure the buffer manager knows about the source document
|
// Make sure the buffer manager knows about the source document
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT license. See License.txt in the project root for license information.
|
// Licensed under the MIT license. See License.txt in the project root for license information.
|
||||||
|
|
||||||
extern alias LegacyClasp;
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
|
@ -10,7 +8,8 @@ using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Razor.PooledObjects;
|
using Microsoft.AspNetCore.Razor.PooledObjects;
|
||||||
using Microsoft.CommonLanguageServerProtocol.Framework;
|
using Microsoft.CodeAnalysis.Razor.Logging;
|
||||||
|
using Microsoft.VisualStudio.Settings.Internal;
|
||||||
using Microsoft.VisualStudio.Text;
|
using Microsoft.VisualStudio.Text;
|
||||||
using Microsoft.VisualStudio.Utilities;
|
using Microsoft.VisualStudio.Utilities;
|
||||||
using Microsoft.WebTools.Languages.Shared.Editor.Composition;
|
using Microsoft.WebTools.Languages.Shared.Editor.Composition;
|
||||||
|
@ -32,6 +31,7 @@ internal static class WebTools
|
||||||
private const string ApplyFormatEditsParamTypeName = "Microsoft.WebTools.Languages.Shared.Editor.LanguageServer.ContainedLanguage.ApplyFormatEditsParam";
|
private const string ApplyFormatEditsParamTypeName = "Microsoft.WebTools.Languages.Shared.Editor.LanguageServer.ContainedLanguage.ApplyFormatEditsParam";
|
||||||
private const string ApplyFormatEditsResponseTypeName = "Microsoft.WebTools.Languages.Shared.Editor.LanguageServer.ContainedLanguage.ApplyFormatEditsResponse";
|
private const string ApplyFormatEditsResponseTypeName = "Microsoft.WebTools.Languages.Shared.Editor.LanguageServer.ContainedLanguage.ApplyFormatEditsResponse";
|
||||||
private const string TextChangeTypeName = "Microsoft.WebTools.Languages.Shared.Editor.EditorHelpers.TextChange";
|
private const string TextChangeTypeName = "Microsoft.WebTools.Languages.Shared.Editor.EditorHelpers.TextChange";
|
||||||
|
private const string LspLoggerTypeName = "Microsoft.WebTools.Languages.LanguageServer.Server.Shared.Clasp.LspLogger";
|
||||||
|
|
||||||
private static Assembly? s_serverAssembly;
|
private static Assembly? s_serverAssembly;
|
||||||
private static Assembly? s_editorAssembly;
|
private static Assembly? s_editorAssembly;
|
||||||
|
@ -240,29 +240,56 @@ internal static class WebTools
|
||||||
public static ApplyFormatEditsHandler New(
|
public static ApplyFormatEditsHandler New(
|
||||||
ITextBufferFactoryService3 textBufferFactoryService,
|
ITextBufferFactoryService3 textBufferFactoryService,
|
||||||
BufferManager bufferManager,
|
BufferManager bufferManager,
|
||||||
ILspLogger logger)
|
ILogger logger)
|
||||||
{
|
{
|
||||||
var instance = CreateInstance(Type, textBufferFactoryService, bufferManager.Instance, new LegacyClaspILspLogger(logger));
|
var instance = CreateInstance(Type, textBufferFactoryService, bufferManager.Instance, LspLogger.New(logger).Instance);
|
||||||
|
return new(instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class LspLogger(object instance) : ReflectedObject(instance)
|
||||||
|
{
|
||||||
|
private static Type? s_type;
|
||||||
|
|
||||||
|
public static Type Type
|
||||||
|
=> s_type ?? InterlockedOperations.Initialize(ref s_type,
|
||||||
|
WebTools.GetType(ServerAssembly, LspLoggerTypeName));
|
||||||
|
|
||||||
|
public static RequestContext New(ILogger logger)
|
||||||
|
{
|
||||||
|
var instance = CreateInstance(Type, new MicrosoftExtensionsLoggerWrapper(logger));
|
||||||
return new(instance);
|
return new(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
private class MicrosoftExtensionsLoggerWrapper(ILogger logger) : Microsoft.Extensions.Logging.ILogger
|
||||||
/// Wraps the razor logger (from the clasp source package) into the binary clasp logger that webtools uses.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="logger"></param>
|
|
||||||
private class LegacyClaspILspLogger(ILspLogger logger) : LegacyClasp.Microsoft.CommonLanguageServerProtocol.Framework.ILspLogger
|
|
||||||
{
|
{
|
||||||
public void LogEndContext(string message, params object[] @params) => logger.LogEndContext(message, @params);
|
public IDisposable? BeginScope<TState>(TState state) where TState : notnull
|
||||||
|
{
|
||||||
|
return NoOpDisposable.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
public void LogError(string message, params object[] @params) => logger.LogError(message, @params);
|
public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void LogException(Exception exception, string? message = null, params object[] @params) => logger.LogException(exception, message, @params);
|
public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, Microsoft.Extensions.Logging.EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
|
||||||
|
{
|
||||||
|
var message = formatter(state, exception);
|
||||||
|
var level = logLevel switch
|
||||||
|
{
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Trace => LogLevel.Trace,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Debug => LogLevel.Debug,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Information => LogLevel.Information,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Warning => LogLevel.Warning,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Error => LogLevel.Error,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.Critical => LogLevel.Critical,
|
||||||
|
Microsoft.Extensions.Logging.LogLevel.None => LogLevel.None,
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
};
|
||||||
|
|
||||||
public void LogInformation(string message, params object[] @params) => logger.LogInformation(message, @params);
|
logger.Log(level, message);
|
||||||
|
}
|
||||||
public void LogStartContext(string message, params object[] @params) => logger.LogStartContext(message, @params);
|
|
||||||
|
|
||||||
public void LogWarning(string message, params object[] @params) => logger.LogWarning(message, @params);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,18 +6,6 @@
|
||||||
<!-- To generate baselines, run tests with /p:GenerateBaselines=true -->
|
<!-- To generate baselines, run tests with /p:GenerateBaselines=true -->
|
||||||
<DefineConstants Condition="'$(GenerateBaselines)'=='true'">$(DefineConstants);GENERATE_BASELINES</DefineConstants>
|
<DefineConstants Condition="'$(GenerateBaselines)'=='true'">$(DefineConstants);GENERATE_BASELINES</DefineConstants>
|
||||||
<DefineConstants>$(DefineConstants);__RemoveThisBitTo__GENERATE_BASELINES</DefineConstants>
|
<DefineConstants>$(DefineConstants);__RemoveThisBitTo__GENERATE_BASELINES</DefineConstants>
|
||||||
|
|
||||||
<!--
|
|
||||||
Some tests instantiate and run handlers from the webtools packages.
|
|
||||||
However, the webtools packages currently require the binary version of clasp (they haven't been updated yet).
|
|
||||||
In order to run them, we need to ensure that the clasp binary version is available. Below we use the PackageDownload
|
|
||||||
feature to download the package and include it in the output (we can't use a package reference because it would conflict with the source package version).
|
|
||||||
|
|
||||||
We also reference the package in this project using an alias - some of the webtools types we instantiate take clasp binary types as parameter, which we have to create.
|
|
||||||
|
|
||||||
This should be removed once we can upgrade to new webtools package versions that use the source package version of clasp.
|
|
||||||
-->
|
|
||||||
<LegacyClaspVersion>4.7.0-1.23178.15</LegacyClaspVersion>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -35,17 +23,7 @@
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Shell.Framework" />
|
<PackageReference Include="Microsoft.VisualStudio.Shell.Framework" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Web" />
|
<PackageReference Include="Microsoft.VisualStudio.Web" />
|
||||||
<PackageReference Include="Microsoft.WebTools.Shared" />
|
<PackageReference Include="Microsoft.WebTools.Shared" />
|
||||||
</ItemGroup>
|
<PackageReference Include="Microsoft.Extensions.Logging" />
|
||||||
|
|
||||||
<!-- Ensure the legacy clasp binary package is available downloaded so we can drop it in the output folder. -->
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageDownload Include="Microsoft.CommonLanguageServerProtocol.Framework" Version="[$(LegacyClaspVersion)]" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="$(NuGetPackageRoot)\microsoft.commonlanguageserverprotocol.framework\$(LegacyClaspVersion)\lib\netstandard2.0\Microsoft.CommonLanguageServerProtocol.Framework.dll">
|
|
||||||
<Private>true</Private>
|
|
||||||
<Aliases>LegacyClasp</Aliases>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче