diff --git a/packages/language-server/src/plugins/svelte/SveltePlugin.ts b/packages/language-server/src/plugins/svelte/SveltePlugin.ts index 2128e56ac..72463650f 100644 --- a/packages/language-server/src/plugins/svelte/SveltePlugin.ts +++ b/packages/language-server/src/plugins/svelte/SveltePlugin.ts @@ -35,7 +35,11 @@ export class SveltePlugin CodeActionsProvider { private docManager = new Map(); - constructor(private configManager: LSConfigManager, private prettierConfig: any) {} + constructor( + private configManager: LSConfigManager, + private prettierConfig: any, + private editorConfig?: any, + ) {} async getDiagnostics(document: Document): Promise { if (!this.featureEnabled('diagnostics')) { @@ -67,7 +71,13 @@ export class SveltePlugin const prettier = importPrettier(filePath); // Try resolving the config through prettier and fall back to possible editor config const config = - (await prettier.resolveConfig(filePath, { editorconfig: true })) || this.prettierConfig; + (await prettier.resolveConfig(filePath, { editorconfig: true })) || + this.prettierConfig || + // Be defensive here because IDEs other than VSCode might not have these settings + (this.editorConfig && this.editorConfig.tabSize && { + tabWidth: this.editorConfig.tabSize, + useTabs: !this.editorConfig.insertSpaces, + }); // Take .prettierignore into account const fileInfo = await prettier.getFileInfo(filePath, { ignorePath: this.prettierConfig?.ignorePath ?? '.prettierignore', diff --git a/packages/language-server/src/server.ts b/packages/language-server/src/server.ts index 1838b7af4..327fb2777 100644 --- a/packages/language-server/src/server.ts +++ b/packages/language-server/src/server.ts @@ -99,6 +99,7 @@ export function startServer(options?: LSOptions) { (sveltePlugin = new SveltePlugin( configManager, evt.initializationOptions?.prettierConfig || {}, + evt.initializationOptions?.editorConfig, // deliberatly don't fall back to empty object )), ); pluginHost.register(new HTMLPlugin(docManager, configManager)); diff --git a/packages/svelte-vscode/src/extension.ts b/packages/svelte-vscode/src/extension.ts index 4d7be8992..1d968b2a2 100644 --- a/packages/svelte-vscode/src/extension.ts +++ b/packages/svelte-vscode/src/extension.ts @@ -94,6 +94,7 @@ export function activate(context: ExtensionContext) { initializationOptions: { config: workspace.getConfiguration('svelte.plugin'), prettierConfig: workspace.getConfiguration('prettier'), + editorConfig: workspace.getConfiguration('editor', { languageId: 'svelte' }), dontFilterIncompleteCompletions: true, // VSCode filters client side and is smarter at it than us }, };