diff --git a/src/Protocol/Models/FormattingOptions.cs b/src/Protocol/Models/FormattingOptions.cs index bb18b4f71..16b21927d 100644 --- a/src/Protocol/Models/FormattingOptions.cs +++ b/src/Protocol/Models/FormattingOptions.cs @@ -15,7 +15,7 @@ public class FormattingOptions : Dictionary [JsonIgnore] public long TabSize { - get => this["tabSize"].IsLong ? this["tabSize"].Long : -1; + get => TryGetValue("tabSize", out var tabSize) && tabSize.IsLong ? tabSize.Long : -1; set => this["tabSize"] = value; } @@ -25,7 +25,7 @@ public long TabSize [JsonIgnore] public bool InsertSpaces { - get => this["insertSpaces"].IsBool ? this["insertSpaces"].Bool : false; + get => TryGetValue("insertSpaces", out var insertSpaces) && insertSpaces.IsBool && insertSpaces.Bool; set => this["insertSpaces"] = value; } @@ -37,7 +37,7 @@ public bool InsertSpaces [JsonIgnore] public bool TrimTrailingWhitespace { - get => this["trimTrailingWhitespace"].IsBool ? this["trimTrailingWhitespace"].Bool : false; + get => TryGetValue("trimTrailingWhitespace", out var trimTrailingWhitespace) && trimTrailingWhitespace.IsBool && trimTrailingWhitespace.Bool; set => this["trimTrailingWhitespace"] = value; } @@ -49,7 +49,7 @@ public bool TrimTrailingWhitespace [JsonIgnore] public bool InsertFinalNewline { - get => this["insertFinalNewline"].IsBool ? this["insertFinalNewline"].Bool : false; + get => TryGetValue("insertFinalNewline", out var insertFinalNewline) && insertFinalNewline.IsBool && insertFinalNewline.Bool; set => this["insertFinalNewline"] = value; } @@ -61,7 +61,7 @@ public bool InsertFinalNewline [JsonIgnore] public bool TrimFinalNewlines { - get => this["trimFinalNewlines"].IsBool ? this["trimFinalNewlines"].Bool : false; + get => TryGetValue("trimFinalNewlines", out var trimFinalNewlines) && trimFinalNewlines.IsBool && trimFinalNewlines.Bool; set => this["trimFinalNewlines"] = value; } } diff --git a/test/Lsp.Tests/Models/FormattingOptionsTests.cs b/test/Lsp.Tests/Models/FormattingOptionsTests.cs index 3906013fc..27dec2e08 100644 --- a/test/Lsp.Tests/Models/FormattingOptionsTests.cs +++ b/test/Lsp.Tests/Models/FormattingOptionsTests.cs @@ -1,4 +1,5 @@ using FluentAssertions; +using Microsoft.CodeAnalysis.CSharp.Syntax; using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; using OmniSharp.Extensions.LanguageServer.Protocol.Models; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; @@ -24,5 +25,27 @@ public void SimpleTest(string expected) var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject(expected); deresult.Should().BeEquivalentTo(model); } + + [Fact] + public void Should_Not_Require_A_Value_To_Be_Defined() + { + var model = new FormattingOptions(); + model.InsertSpaces.Should().BeFalse(); + model.TabSize.Should().Be(-1L); + model.InsertFinalNewline.Should().BeFalse(); + model.TrimFinalNewlines.Should().BeFalse(); + model.TrimTrailingWhitespace.Should().BeFalse(); + } + + [Fact] + public void Should_Allow_Values_To_Be_Set() + { + var model = new FormattingOptions(); + model.InsertSpaces = true; + model.TabSize = 4; + model.InsertFinalNewline = true; + model.TrimFinalNewlines = true; + model.TrimTrailingWhitespace = true; + } } }