From 588cfe3ebf56300c4cc2b70e0630e7914a7efb6a Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Mon, 11 Jan 2021 17:42:46 +0100 Subject: [PATCH 1/4] (feat) bump prettier + config Make some prettier options configurable ### BREAKING CHANGE Bump to prettier-plugin-svelte 2.1.0 -> different formatting --- packages/language-server/package.json | 2 +- packages/language-server/src/ls-config.ts | 26 ++++++++++- .../src/plugins/svelte/SveltePlugin.ts | 17 ++++--- packages/svelte-vscode/README.md | 30 ++++++++++++- packages/svelte-vscode/package.json | 44 ++++++++++++++++++- packages/svelte-vscode/src/extension.ts | 2 +- yarn.lock | 8 ++-- 7 files changed, 114 insertions(+), 15 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index cee54acab..256a118a6 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -51,7 +51,7 @@ "estree-walker": "^2.0.1", "lodash": "^4.17.19", "prettier": "2.2.1", - "prettier-plugin-svelte": "~1.4.1", + "prettier-plugin-svelte": "~2.1.0", "source-map": "^0.7.3", "svelte": "3.31.0", "svelte-preprocess": "~4.6.1", diff --git a/packages/language-server/src/ls-config.ts b/packages/language-server/src/ls-config.ts index d5d01cf68..b52918619 100644 --- a/packages/language-server/src/ls-config.ts +++ b/packages/language-server/src/ls-config.ts @@ -42,7 +42,20 @@ const defaultLSConfig: LSConfig = { compilerWarnings: {}, diagnostics: { enable: true }, rename: { enable: true }, - format: { enable: true }, + format: { + enable: true, + config: { + svelteSortOrder: 'options-scripts-markup-styles', + svelteStrictMode: false, + svelteAllowShorthand: true, + svelteBracketNewLine: true, + svelteIndentScriptAndStyle: true, + printWidth: 80, + tabWidth: 2, + useTabs: false, + singleQuote: false + } + }, completions: { enable: true }, hover: { enable: true }, codeActions: { enable: true }, @@ -149,6 +162,17 @@ export interface LSSvelteConfig { }; format: { enable: boolean; + config: { + svelteSortOrder: string; + svelteStrictMode: boolean; + svelteAllowShorthand: boolean; + svelteBracketNewLine: boolean; + svelteIndentScriptAndStyle: boolean; + printWidth: number; + tabWidth: number; + useTabs: boolean; + singleQuote: boolean; + }; }; rename: { enable: boolean; diff --git a/packages/language-server/src/plugins/svelte/SveltePlugin.ts b/packages/language-server/src/plugins/svelte/SveltePlugin.ts index 6a604cd18..b5075597b 100644 --- a/packages/language-server/src/plugins/svelte/SveltePlugin.ts +++ b/packages/language-server/src/plugins/svelte/SveltePlugin.ts @@ -29,6 +29,7 @@ import { getHoverInfo } from './features/getHoverInfo'; import { SvelteCompileResult, SvelteDocument } from './SvelteDocument'; import { Logger } from '../../logger'; import { getSelectionRange } from './features/getSelectionRanges'; +import { merge } from 'lodash'; export class SveltePlugin implements @@ -73,12 +74,16 @@ export class SveltePlugin // Try resolving the config through prettier and fall back to possible editor config const config = returnObjectIfHasKeys(await prettier.resolveConfig(filePath, { editorconfig: true })) || - returnObjectIfHasKeys(this.configManager.getPrettierConfig()) || - // Be defensive here because IDEs other than VSCode might not have these settings - (options && { - tabWidth: options.tabSize, - useTabs: !options.insertSpaces - }); + merge( + this.configManager.get('svelte.format.config'), + returnObjectIfHasKeys(this.configManager.getPrettierConfig()) || + // Be defensive here because IDEs other than VSCode might not have these settings + (options && { + tabWidth: options.tabSize, + useTabs: !options.insertSpaces + }) || + {} + ); // Take .prettierignore into account const fileInfo = await prettier.getFileInfo(filePath, { ignorePath: this.configManager.getPrettierConfig()?.ignorePath ?? '.prettierignore', diff --git a/packages/svelte-vscode/README.md b/packages/svelte-vscode/README.md index 9623ef67e..b7ca3c911 100644 --- a/packages/svelte-vscode/README.md +++ b/packages/svelte-vscode/README.md @@ -200,7 +200,35 @@ Svelte compiler warning codes to ignore or to treat as errors. Example: { 'css-u ##### `svelte.plugin.svelte.format.enable` -Enable formatting for Svelte (includes css & js). _Default_: `true` +Enable formatting for Svelte (includes css & js). You can set some formatting options through this extension. They will be ignored if there's a `.prettierrc` configuration file. _Default_: `true` + +##### `svelte.plugin.svelte.format.config.svelteSortOrder` + +Format: join the keys `options`, `scripts`, `markup`, `styles` with a - in the order you want. _Default_: `options-scripts-markup-styles` + +##### `svelte.plugin.svelte.format.config.svelteStrictMode` + +More strict HTML syntax. _Default_: `false` + +##### `svelte.plugin.svelte.format.config.svelteAllowShorthand` + +Option to enable/disable component attribute shorthand if attribute name and expression are the same. _Default_: `true` + +##### `svelte.plugin.svelte.format.config.svelteBracketNewLine` + +Put the `>` of a multiline element on a new line. _Default_: `true` + +##### `svelte.plugin.svelte.format.config.svelteIndentScriptAndStyle` + +Whether or not to indent code inside `