提交 b3a39bef 编写于 作者: D David Barbet

Export client side server as separate types to avoid deduplication.

上级 64c2ceda
......@@ -16,6 +16,8 @@ internal abstract class AbstractLspClientServiceFactory : ICollaborationServiceF
{
protected abstract string LanguageSpecificProviderName { get; }
protected abstract RoslynLSPClientLifeTimeService LspClientLifeTimeService { get; }
public ILanguageServerClient ActiveLanguageServerClient { get; private set; }
public Task<ICollaborationService> CreateServiceAsync(CollaborationSession collaborationSession, CancellationToken cancellationToken)
......@@ -104,7 +106,7 @@ public Task<ICollaborationService> CreateServiceAsync(CollaborationSession colla
TextDocumentSync = null,
})));
var lifeTimeService = new RoslynLSPClientLifeTimeService();
var lifeTimeService = LspClientLifeTimeService;
lifeTimeService.Disposed += (s, e) =>
{
ActiveLanguageServerClient?.Dispose();
......@@ -114,7 +116,7 @@ public Task<ICollaborationService> CreateServiceAsync(CollaborationSession colla
return Task.FromResult<ICollaborationService>(lifeTimeService);
}
protected class RoslynLSPClientLifeTimeService : ICollaborationService, IDisposable
protected abstract class RoslynLSPClientLifeTimeService : ICollaborationService, IDisposable
{
public event EventHandler Disposed;
......@@ -126,7 +128,7 @@ public void Dispose()
}
[Export]
[ExportCollaborationService(typeof(RoslynLSPClientLifeTimeService),
[ExportCollaborationService(typeof(CSharpLSPClientLifeTimeService),
Scope = SessionScope.Guest,
Role = ServiceRole.LocalService,
Features = "LspServices",
......@@ -134,10 +136,16 @@ public void Dispose()
internal class CSharpLspClientServiceFactory : AbstractLspClientServiceFactory
{
protected override string LanguageSpecificProviderName => StringConstants.CSharpProviderName;
protected override RoslynLSPClientLifeTimeService LspClientLifeTimeService => new CSharpLSPClientLifeTimeService();
private class CSharpLSPClientLifeTimeService : RoslynLSPClientLifeTimeService
{
}
}
[Export]
[ExportCollaborationService(typeof(RoslynLSPClientLifeTimeService),
[ExportCollaborationService(typeof(VisualBasicLSPClientLifeTimeService),
Scope = SessionScope.Guest,
Role = ServiceRole.LocalService,
Features = "LspServices",
......@@ -145,10 +153,16 @@ internal class CSharpLspClientServiceFactory : AbstractLspClientServiceFactory
internal class VisualBasicLspClientServiceFactory : AbstractLspClientServiceFactory
{
protected override string LanguageSpecificProviderName => StringConstants.VisualBasicProviderName;
protected override RoslynLSPClientLifeTimeService LspClientLifeTimeService => new VisualBasicLSPClientLifeTimeService();
private class VisualBasicLSPClientLifeTimeService : RoslynLSPClientLifeTimeService
{
}
}
[Export]
[ExportCollaborationService(typeof(RoslynLSPClientLifeTimeService),
[ExportCollaborationService(typeof(TypeScriptLSPClientLifeTimeService),
Scope = SessionScope.Guest,
Role = ServiceRole.LocalService,
Features = "LspServices",
......@@ -156,5 +170,11 @@ internal class VisualBasicLspClientServiceFactory : AbstractLspClientServiceFact
internal class TypeScriptLspClientServiceFactory : AbstractLspClientServiceFactory
{
protected override string LanguageSpecificProviderName => StringConstants.TypeScriptProviderName;
protected override RoslynLSPClientLifeTimeService LspClientLifeTimeService => new TypeScriptLSPClientLifeTimeService();
private class TypeScriptLSPClientLifeTimeService : RoslynLSPClientLifeTimeService
{
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册