From 62c4b75bc956c3b290ea533384f2485f82d6427b Mon Sep 17 00:00:00 2001 From: Kapil Borle Date: Wed, 1 Feb 2017 13:05:02 -0800 Subject: [PATCH 1/3] Format space around braces, parens and binary operators --- src/features/DocumentFormatter.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/features/DocumentFormatter.ts b/src/features/DocumentFormatter.ts index 7943eb35c7..980bd69410 100644 --- a/src/features/DocumentFormatter.ts +++ b/src/features/DocumentFormatter.ts @@ -139,6 +139,7 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider private readonly ruleOrder: string[] = [ "PSPlaceCloseBrace", "PSPlaceOpenBrace", + "PSUseWhitespace", "PSUseConsistentIndentation"]; // Allows edits to be undone and redone is a single step. @@ -232,12 +233,13 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider }); // We cannot handle multiple edits at the same point hence we - // filter the markers so that there is only one edit per line - // This ideally should not happen but it is good to have some additional safeguard + // filter the markers so that there is only one edit per region if (edits.length > 0) { uniqueEdits.push(edits[0]); for (let edit of edits.slice(1)) { - if (editComparer(uniqueEdits[uniqueEdits.length - 1], edit) !== 0) { + let lastEdit: ScriptRegion = uniqueEdits[uniqueEdits.length - 1]; + if (lastEdit.startLineNumber !== edit.startLineNumber + || (edit.startColumnNumber + edit.text.length) < lastEdit.startColumnNumber) { uniqueEdits.push(edit); } } @@ -332,6 +334,11 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider ruleSettings["IndentationSize"] = vscode.workspace.getConfiguration("editor").get("tabSize"); break; + case "PSUseWhitespace": + ruleSettings["CheckOpenBrace"] = true; + ruleSettings["CheckOpenParen"] = true; + ruleSettings["CheckOperator"] = true; + default: break; } From 4aa302211856f9ea8a3f0e6722c4bc5a22122a0c Mon Sep 17 00:00:00 2001 From: Kapil Borle Date: Fri, 3 Feb 2017 17:33:22 -0800 Subject: [PATCH 2/3] Add formatting options for whitespace style --- package.json | 22 +++++++++++++++++++++- src/features/DocumentFormatter.ts | 8 +++++--- src/settings.ts | 10 +++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 691fec7421..0bdbb511ef 100644 --- a/package.json +++ b/package.json @@ -346,9 +346,29 @@ "type": "boolean", "default": true, "description": "A new line must follow an open brace." + }, + "powershell.codeFormatting.whitespaceBeforeOpenBrace": { + "type": "boolean", + "default": true, + "description": "There must be a whitespace between a keyword and its associated scriptblock expression." + }, + "powershell.codeFormatting.whitespaceBeforeOpenParen": { + "type": "boolean", + "default": true, + "description": "There must be whitespace between an keyword (if, elseif, while, switch, etc) and its associated conditional expression." + }, + "powershell.codeFormatting.whitespaceAroundOperator": { + "type": "boolean", + "default": true, + "description": "There must be whitespaces around both sides of a binary or assignment operator ('=', '+', '-', etc.)." + }, + "powershell.codeFormatting.whitespaceAfterSeparator": { + "type": "boolean", + "default": true, + "description": "There must be a whitespaces after a separator (',' and ';')." } } } }, "private": true -} +} \ No newline at end of file diff --git a/src/features/DocumentFormatter.ts b/src/features/DocumentFormatter.ts index 980bd69410..7f0c1d757d 100644 --- a/src/features/DocumentFormatter.ts +++ b/src/features/DocumentFormatter.ts @@ -335,9 +335,11 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider break; case "PSUseWhitespace": - ruleSettings["CheckOpenBrace"] = true; - ruleSettings["CheckOpenParen"] = true; - ruleSettings["CheckOperator"] = true; + ruleSettings["CheckOpenBrace"] = psSettings.codeFormatting.whitespaceBeforeOpenBrace; + ruleSettings["CheckOpenParen"] = psSettings.codeFormatting.whitespaceBeforeOpenParen; + ruleSettings["CheckOperator"] = psSettings.codeFormatting.whitespaceAroundOperator; + ruleSettings["CheckSeparator"] = psSettings.codeFormatting.whitespaceAfterSeparator; + break; default: break; diff --git a/src/settings.ts b/src/settings.ts index 382f8d9351..8950584025 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -9,6 +9,10 @@ import vscode = require('vscode'); export interface ICodeFormattingSettings { openBraceOnSameLine: boolean; newLineAfterOpenBrace: boolean; + whitespaceBeforeOpenBrace: boolean; + whitespaceBeforeOpenParen: boolean; + whitespaceAroundOperator: boolean; + whitespaceAfterSeparator: boolean; } export interface IScriptAnalysisSettings { @@ -50,7 +54,11 @@ export function load(myPluginId: string): ISettings { let defaultCodeFormattingSettings: ICodeFormattingSettings = { openBraceOnSameLine: true, - newLineAfterOpenBrace: true + newLineAfterOpenBrace: true, + whitespaceBeforeOpenBrace: true, + whitespaceBeforeOpenParen: true, + whitespaceAroundOperator: true, + whitespaceAfterSeparator: true }; return { From 9dd216c3a4b40d0c514e9d9e80524454681631e4 Mon Sep 17 00:00:00 2001 From: Kapil Borle Date: Mon, 6 Feb 2017 11:11:24 -0800 Subject: [PATCH 3/3] Rename PSUseWhitespace rule to PSUseConsistentWhitespace --- src/features/DocumentFormatter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/DocumentFormatter.ts b/src/features/DocumentFormatter.ts index 7f0c1d757d..04bfc35f9d 100644 --- a/src/features/DocumentFormatter.ts +++ b/src/features/DocumentFormatter.ts @@ -139,7 +139,7 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider private readonly ruleOrder: string[] = [ "PSPlaceCloseBrace", "PSPlaceOpenBrace", - "PSUseWhitespace", + "PSUseConsistentWhitespace", "PSUseConsistentIndentation"]; // Allows edits to be undone and redone is a single step. @@ -334,7 +334,7 @@ class PSDocumentFormattingEditProvider implements DocumentFormattingEditProvider ruleSettings["IndentationSize"] = vscode.workspace.getConfiguration("editor").get("tabSize"); break; - case "PSUseWhitespace": + case "PSUseConsistentWhitespace": ruleSettings["CheckOpenBrace"] = psSettings.codeFormatting.whitespaceBeforeOpenBrace; ruleSettings["CheckOpenParen"] = psSettings.codeFormatting.whitespaceBeforeOpenParen; ruleSettings["CheckOperator"] = psSettings.codeFormatting.whitespaceAroundOperator;