Skip to content

Commit b5ec461

Browse files
simplify the settings
1 parent 52a13f0 commit b5ec461

File tree

4 files changed

+34
-37
lines changed

4 files changed

+34
-37
lines changed

src/Protocol/Client/Capabilities/SynchronizationCapability.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@
55

66
namespace OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities
77
{
8-
public class SynchronizationCapability : DynamicCapability, ConnectedCapability<IDidChangeTextDocumentHandler>
8+
public class SynchronizationCapability : DynamicCapability,
9+
ConnectedCapability<IDidChangeTextDocumentHandler>,
10+
ConnectedCapability<IDidCloseTextDocumentHandler>,
11+
ConnectedCapability<IDidOpenTextDocumentHandler>,
12+
ConnectedCapability<IDidSaveTextDocumentHandler>,
13+
ConnectedCapability<IWillSaveTextDocumentHandler>,
14+
ConnectedCapability<IWillSaveWaitUntilTextDocumentHandler>
915
{
1016
/// <summary>
1117
/// The client supports sending will save notifications.

src/Protocol/Server/Capabilities/TextDocumentSyncOptions.cs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,25 @@ public class TextDocumentSyncOptions : ITextDocumentSyncOptions
3737
[Optional]
3838
public SaveOptions Save { get; set; }
3939

40-
public static Func<IEnumerable<ITextDocumentSyncOptions>, TextDocumentSyncOptions> Of(TextDocumentSyncOptions @default)
40+
public static TextDocumentSyncOptions Of(IEnumerable<ITextDocumentSyncOptions> options)
4141
{
42-
return options =>
42+
var change = TextDocumentSyncKind.None;
43+
if (options.Any())
4344
{
44-
var change = @default.Change;
45-
if (@default.Change == TextDocumentSyncKind.None && options.Any())
45+
change = options
46+
.Where(x => x.Change != TextDocumentSyncKind.None)
47+
.Min(z => z.Change);
48+
}
49+
return new TextDocumentSyncOptions()
50+
{
51+
OpenClose = options.Any(z => z.OpenClose),
52+
Change = change,
53+
WillSave = options.Any(z => z.WillSave),
54+
WillSaveWaitUntil = options.Any(z => z.WillSaveWaitUntil),
55+
Save = new SaveOptions()
4656
{
47-
change = @default.Change > 0 ? @default.Change : options
48-
.Where(x => x.Change != TextDocumentSyncKind.None)
49-
.Min(z => z.Change);
57+
IncludeText = options.Any(z => z.Save?.IncludeText == true)
5058
}
51-
return new TextDocumentSyncOptions()
52-
{
53-
OpenClose = @default.OpenClose || options.Any(z => z.OpenClose),
54-
Change = change,
55-
WillSave = @default.WillSave || options.Any(z => z.WillSave),
56-
WillSaveWaitUntil = @default.WillSaveWaitUntil || options.Any(z => z.WillSaveWaitUntil),
57-
Save = new SaveOptions()
58-
{
59-
IncludeText = @default.Save?.IncludeText ?? options.Any(z => z.Save?.IncludeText == true)
60-
}
61-
};
6259
};
6360
}
6461
}

src/Server/ClientCapabilityProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public bool HasStaticHandler<T>(Supports<T> capability)
3030
.Where(x => x.GetTypeInfo().IsGenericType && x.GetTypeInfo().GetGenericTypeDefinition() == typeof(ConnectedCapability<>))
3131
.Select(x => x.GetTypeInfo().GetGenericArguments()[0].GetTypeInfo());
3232

33-
return handlerTypes.All(_collection.ContainsHandler);
33+
return handlerTypes.Any(_collection.ContainsHandler);
3434
}
3535

3636
public IOptionsGetter GetStaticOptions<T>(Supports<T> capability)

src/Server/LanguageServer.cs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -410,17 +410,6 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
410410

411411
var ccp = new ClientCapabilityProvider(_collection);
412412

413-
var defaultTextDocumentSyncOptions = new TextDocumentSyncOptions()
414-
{
415-
Change = TextDocumentSyncKind.None,
416-
OpenClose = _collection.ContainsHandler(typeof(IDidOpenTextDocumentHandler)) || _collection.ContainsHandler(typeof(IDidCloseTextDocumentHandler)),
417-
Save = _collection.ContainsHandler(typeof(IDidSaveTextDocumentHandler)) ?
418-
new SaveOptions() { IncludeText = true /* TODO: Make configurable */ } :
419-
null,
420-
WillSave = _collection.ContainsHandler(typeof(IWillSaveTextDocumentHandler)),
421-
WillSaveWaitUntil = _collection.ContainsHandler(typeof(IWillSaveWaitUntilTextDocumentHandler))
422-
};
423-
424413
var serverCapabilities = new ServerCapabilities()
425414
{
426415
CodeActionProvider = ccp.GetStaticOptions(textDocumentCapabilities.CodeAction).Get<ICodeActionOptions, CodeActionOptions>(CodeActionOptions.Of),
@@ -434,7 +423,7 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
434423
DocumentRangeFormattingProvider = ccp.HasStaticHandler(textDocumentCapabilities.RangeFormatting),
435424
DocumentSymbolProvider = ccp.HasStaticHandler(textDocumentCapabilities.DocumentSymbol),
436425
ExecuteCommandProvider = ccp.GetStaticOptions(workspaceCapabilities.ExecuteCommand).Reduce<IExecuteCommandOptions, ExecuteCommandOptions>(ExecuteCommandOptions.Of),
437-
TextDocumentSync = ccp.GetStaticOptions(textDocumentCapabilities.Synchronization).Reduce<ITextDocumentSyncOptions, TextDocumentSyncOptions>(TextDocumentSyncOptions.Of(defaultTextDocumentSyncOptions)),
426+
TextDocumentSync = ccp.GetStaticOptions(textDocumentCapabilities.Synchronization).Reduce<ITextDocumentSyncOptions, TextDocumentSyncOptions>(TextDocumentSyncOptions.Of),
438427
HoverProvider = ccp.HasStaticHandler(textDocumentCapabilities.Hover),
439428
ReferencesProvider = ccp.HasStaticHandler(textDocumentCapabilities.References),
440429
RenameProvider = ccp.GetStaticOptions(textDocumentCapabilities.Rename).Get<IRenameOptions, RenameOptions>(RenameOptions.Of),
@@ -446,10 +435,6 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
446435
FoldingRangeProvider = ccp.GetStaticOptions(textDocumentCapabilities.FoldingRange).Get<IFoldingRangeOptions, FoldingRangeOptions>(FoldingRangeOptions.Of),
447436
DeclarationProvider = ccp.GetStaticOptions(textDocumentCapabilities.Declaration).Get<IDeclarationOptions, DeclarationOptions>(DeclarationOptions.Of),
448437
};
449-
if (serverCapabilities.TextDocumentSync.HasOptions)
450-
{
451-
defaultTextDocumentSyncOptions = serverCapabilities.TextDocumentSync.Options;
452-
}
453438

454439
if (_collection.ContainsHandler(typeof(IDidChangeWorkspaceFoldersHandler)))
455440
{
@@ -486,7 +471,16 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
486471
}
487472
else
488473
{
489-
defaultTextDocumentSyncOptions.Change = textDocumentSyncKind;
474+
serverCapabilities.TextDocumentSync = new TextDocumentSyncOptions()
475+
{
476+
Change = TextDocumentSyncKind.None,
477+
OpenClose = (_collection.ContainsHandler(typeof(IDidOpenTextDocumentHandler)) || _collection.ContainsHandler(typeof(IDidCloseTextDocumentHandler))),
478+
Save = _collection.ContainsHandler(typeof(IDidSaveTextDocumentHandler)) ?
479+
new SaveOptions() { IncludeText = true /* TODO: Make configurable */ } :
480+
null,
481+
WillSave = _collection.ContainsHandler(typeof(IWillSaveTextDocumentHandler)),
482+
WillSaveWaitUntil = _collection.ContainsHandler(typeof(IWillSaveWaitUntilTextDocumentHandler))
483+
};
490484
}
491485
}
492486

0 commit comments

Comments
 (0)