From b3294666548206f2385786db0a9c741e234a0413 Mon Sep 17 00:00:00 2001 From: Kapil Borle Date: Fri, 16 Jun 2017 14:18:33 -0700 Subject: [PATCH 1/2] Add enum type for code formatting presets --- .../Server/LanguageServerSettings.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs index 7ab833546..4cde0ef1a 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs @@ -93,6 +93,13 @@ public void Update( } } + public enum CodeFormattingPreset + { + Custom, + OTBS, + Allman + } + public class CodeFormattingSettings { /// @@ -120,6 +127,7 @@ public CodeFormattingSettings(CodeFormattingSettings codeFormattingSettings) } } + public CodeFormattingPreset Preset { get; set; } public bool OpenBraceOnSameLine { get; set; } public bool NewLineAfterOpenBrace { get; set; } public bool NewLineAfterCloseBrace { get; set; } From e83ad5adcbb10a3d2dcb893f65ba48bc56efd669 Mon Sep 17 00:00:00 2001 From: Kapil Borle Date: Fri, 16 Jun 2017 19:20:47 -0700 Subject: [PATCH 2/2] Add method to process formatting presets --- .../Server/LanguageServer.cs | 2 +- .../Server/LanguageServerSettings.cs | 57 ++++++++++++++++++- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index 897299631..8e157be92 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -1228,7 +1228,7 @@ private async Task> Format( Range range) { var scriptFile = editorSession.Workspace.GetFile(documentUri); - var pssaSettings = currentSettings.CodeFormatting.GetPSSASettingsHashTable( + var pssaSettings = currentSettings.CodeFormatting.GetPSSASettingsHashtable( options.TabSize, options.InsertSpaces); diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs index 4cde0ef1a..2b104e47e 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServerSettings.cs @@ -8,6 +8,8 @@ using System; using System.Reflection; using System.Collections; +using System.Linq; +using System.Collections.Generic; namespace Microsoft.PowerShell.EditorServices.Protocol.Server { @@ -93,10 +95,25 @@ public void Update( } } + /// + /// code formatting presets + /// public enum CodeFormattingPreset { + + /// + /// Use the formatting settings as-is. + /// Custom, + + /// + /// Configure the formatting settings to resemble the one true brace style variant of KR indent/brace style. + /// OTBS, + + /// + /// Configure the formatting settings to resemble the Allman indent/brace style. + /// Allman } @@ -104,7 +121,7 @@ public class CodeFormattingSettings { /// /// Default constructor. - /// + /// > public CodeFormattingSettings() { @@ -138,7 +155,43 @@ public CodeFormattingSettings(CodeFormattingSettings codeFormattingSettings) public bool IgnoreOneLineBlock { get; set; } public bool AlignPropertyValuePairs { get; set; } - public Hashtable GetPSSASettingsHashTable(int tabSize, bool insertSpaces) + + /// + /// Get the settings hashtable that will be consumed by PSScriptAnalyzer. + /// + /// The tab size in the number spaces. + /// If true, insert spaces otherwise insert tabs for indentation. + /// + public Hashtable GetPSSASettingsHashtable( + int tabSize, + bool insertSpaces) + { + var settings = GetCustomPSSASettingsHashtable(tabSize, insertSpaces); + var ruleSettings = (Hashtable)(settings["Rules"]); + var closeBraceSettings = (Hashtable)ruleSettings["PSPlaceCloseBrace"]; + var openBraceSettings = (Hashtable)ruleSettings["PSPlaceOpenBrace"]; + switch(Preset) + { + case CodeFormattingPreset.Allman: + openBraceSettings["OnSameLine"] = false; + openBraceSettings["NewLineAfter"] = true; + closeBraceSettings["NewLineAfter"] = true; + break; + + case CodeFormattingPreset.OTBS: + openBraceSettings["OnSameLine"] = true; + openBraceSettings["NewLineAfter"] = true; + closeBraceSettings["NewLineAfter"] = false; + break; + + default: + break; + } + + return settings; + } + + private Hashtable GetCustomPSSASettingsHashtable(int tabSize, bool insertSpaces) { return new Hashtable {