Skip to content

Commit

Permalink
Merge pull request #1998 from OmniSharp/upgrade/lsp
Browse files Browse the repository at this point in the history
Upgraded lsp to 0.18.3
  • Loading branch information
david-driscoll authored Nov 8, 2020
2 parents 1524750 + f99a545 commit ebabfb8
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 16 deletions.
6 changes: 6 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ insert_final_newline = true
indent_style = space
indent_size = 4

dotnet_diagnostic.VSTHRD002.severity = none
dotnet_diagnostic.VSTHRD003.severity = none
dotnet_diagnostic.VSTHRD105.severity = none
dotnet_diagnostic.VSTHRD110.severity = none
dotnet_diagnostic.VSTHRD200.severity = none

[*.cs]
indent_size = 4

Expand Down
4 changes: 2 additions & 2 deletions build/Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@
<PackageReference Update="NuGet.ProjectModel" Version="$(NuGetPackageVersion)" />
<PackageReference Update="NuGet.Versioning" Version="$(NuGetPackageVersion)" />

<PackageReference Update="OmniSharp.Extensions.LanguageServer" Version="0.18.0-beta0081" />
<PackageReference Update="OmniSharp.Extensions.LanguageProtocol.Testing" Version="0.18.0-beta0081" />
<PackageReference Update="OmniSharp.Extensions.LanguageServer" Version="0.18.3" />
<PackageReference Update="OmniSharp.Extensions.LanguageProtocol.Testing" Version="0.18.3" />

<PackageReference Update="SQLitePCLRaw.bundle_green" Version="1.1.2" />
<PackageReference Update="System.Collections.Immutable" Version="1.4.0" />
Expand Down
6 changes: 5 additions & 1 deletion src/OmniSharp.Host/MSBuild/Discovery/MSBuildLocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ protected override void DisposeCore(bool disposing)
{
if (RegisteredInstance != null)
{
AppDomain.CurrentDomain.AssemblyResolve -= Resolve;
try
{
AppDomain.CurrentDomain.AssemblyResolve -= Resolve;
}
catch (AppDomainUnloadedException){ } // Ignore if the AppDomain is going away (like during a test in xunit)
RegisteredInstance = null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

namespace OmniSharp.LanguageServerProtocol.Handlers
{
internal sealed class OmniSharpCodeActionHandler : CodeActionHandler, IExecuteCommandHandler
internal sealed class OmniSharpCodeActionHandler : CodeActionHandlerBase, IExecuteCommandHandler
{
public static IEnumerable<IJsonRpcHandler> Enumerate(
RequestHandlers handlers,
Expand Down Expand Up @@ -116,6 +116,11 @@ public override async Task<CommandOrCodeActionContainer> Handle(CodeActionParams
codeActions.Select(ca => new CommandOrCodeAction(ca)));
}

public override Task<CodeAction> Handle(CodeAction request, CancellationToken cancellationToken)
{
return Task.FromResult(request);
}

public async Task<Unit> Handle(ExecuteCommandParams request, CancellationToken cancellationToken)
{
Debug.Assert(request.Command == "omnisharp/executeCodeAction");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static LanguageProtocolInteropHandler Factory(
public class LanguageProtocolInteropHandler<TRequest, TResponse> : LanguageProtocolInteropHandler
{
private readonly IPredicateHandler _languagePredicateHandler;
private readonly Lazy<Task<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>>> _exports;
private readonly Lazy<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>> _exports;
private readonly bool _hasLanguageProperty;
private readonly bool _hasFileNameProperty;
private readonly bool _canBeAggregated;
Expand All @@ -60,11 +60,10 @@ public LanguageProtocolInteropHandler(IPredicateHandler languagePredicateHandler
_canBeAggregated = typeof(IAggregateResponse).IsAssignableFrom(metadata.ResponseType);
_updateBufferHandler = updateBufferHandler;

_exports = new Lazy<Task<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>>>(() =>
LoadExportHandlers(handlers));
_exports = new Lazy<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>>(() =>LoadExportHandlers(handlers));
}

private Task<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>> LoadExportHandlers(
private Dictionary<string, IRequestHandler<TRequest, TResponse>[]> LoadExportHandlers(
IEnumerable<Lazy<IRequestHandler, OmniSharpRequestHandlerMetadata>> handlers)
{
var interfaceHandlers = handlers
Expand All @@ -76,12 +75,12 @@ private Task<Dictionary<string, IRequestHandler<TRequest, TResponse>[]>> LoadExp
// .Select(plugin => (plugin.Config.Language, plugin));

// Group handlers by language and sort each group for consistency
return Task.FromResult(interfaceHandlers
return interfaceHandlers
// .Concat(plugins)
.GroupBy(export => export.Language, StringComparer.OrdinalIgnoreCase)
.ToDictionary(
group => group.Key,
group => group.OrderBy(g => g.Handler).Select(z => z.Handler).ToArray()));
group => group.OrderBy(g => g.Handler).Select(z => z.Handler).ToArray());
}

public string EndpointName { get; }
Expand Down Expand Up @@ -207,7 +206,7 @@ private async Task<object> GetFirstNotEmptyResponseFromHandlers(IRequestHandler<

private async Task<object> HandleRequestForLanguage(string language, TRequest request)
{
var exports = await _exports.Value;
var exports = _exports.Value;
if (exports.TryGetValue(language, out var handlers))
{
if (_canBeAggregated)
Expand All @@ -229,7 +228,7 @@ private async Task<object> HandleAllRequest(TRequest request)
$"Must be able to aggregate the response to spread them out across all plugins for {EndpointName}");
}

var exports = await _exports.Value;
var exports = _exports.Value;

IAggregateResponse aggregateResponse = null;
var responses = new List<Task<IAggregateResponse>>();
Expand Down
16 changes: 12 additions & 4 deletions src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,18 @@ public void Dispose()
_cancellationTokenSource?.Dispose();
}

private void Cancel()
{
try
{
_cancellationTokenSource.Cancel();
} catch (ObjectDisposedException){}
}

public async Task Start()
{
var server = Server = await LanguageServer.From(_options);
server.Exit.Subscribe(Observer.Create<int>(i => _cancellationTokenSource.Cancel()));
server.Exit.Subscribe(Observer.Create<int>(i => Cancel()));

var environment = _compositionHost.GetExport<IOmniSharpEnvironment>();
var logger = _compositionHost.GetExport<ILoggerFactory>().CreateLogger<LanguageServerHost>();
Expand All @@ -125,7 +133,7 @@ public async Task Start()

Console.CancelKeyPress += (sender, e) =>
{
_cancellationTokenSource.Cancel();
Cancel();
e.Cancel = true;
};

Expand All @@ -135,13 +143,13 @@ public async Task Start()
{
var hostProcess = Process.GetProcessById(environment.HostProcessId);
hostProcess.EnableRaisingEvents = true;
hostProcess.OnExit(() => _cancellationTokenSource.Cancel());
hostProcess.OnExit(Cancel);
}
catch
{
// If the process dies before we get here then request shutdown
// immediately
_cancellationTokenSource.Cancel();
Cancel();
}
}
}
Expand Down

0 comments on commit ebabfb8

Please # to comment.