diff --git a/index.js b/index.js
index 2399edb..11dd4d8 100644
--- a/index.js
+++ b/index.js
@@ -1,5 +1,6 @@
const { parsers: babelParsers } = require('prettier/parser-babel');
const { parsers: htmlParsers } = require('prettier/parser-html');
+const { parsers: svelteParsers } = require('prettier-plugin-svelte');
const { parsers: typescriptParsers } = require('prettier/parser-typescript');
const { organize } = require('./lib/organize');
@@ -59,6 +60,7 @@ const plugin = {
parsers: {
babel: withOrganizeImportsPreprocess(babelParsers.babel),
'babel-ts': withOrganizeImportsPreprocess(babelParsers['babel-ts']),
+ svelte: withOrganizeImportsPreprocess(svelteParsers.svelte),
typescript: withOrganizeImportsPreprocess(typescriptParsers.typescript),
vue: withOrganizeImportsPreprocess(htmlParsers.vue),
},
diff --git a/lib/get-language-service.js b/lib/get-language-service.js
index 016af6a..82e669b 100644
--- a/lib/get-language-service.js
+++ b/lib/get-language-service.js
@@ -10,6 +10,12 @@ const { getTypeScriptLanguageServiceHost, getVueLanguageServiceHost } = require(
* @returns {ts.LanguageService}
*/
const getLanguageService = (parser, filepath, code) => {
+ if (parser === 'svelte') {
+ return require('@volar-examples/svelte-typescript').createLanguageService(
+ getVueLanguageServiceHost(filepath, code),
+ );
+ }
+
if (parser === 'vue') {
return require('@volar/vue-typescript').createLanguageService(getVueLanguageServiceHost(filepath, code));
}
diff --git a/lib/organize.js b/lib/organize.js
index 6dab8e2..fc108cb 100644
--- a/lib/organize.js
+++ b/lib/organize.js
@@ -12,7 +12,7 @@ module.exports.organize = (
code,
{ filepath = 'file.ts', organizeImportsSkipDestructiveCodeActions, parentParser, parser },
) => {
- if (parentParser === 'vue') {
+ if (parentParser === 'vue' || parentParser === 'svelte') {
// we already did the preprocessing in the parent parser, so we skip the child parsers
return code;
}
diff --git a/package.json b/package.json
index 5704ece..5aab338 100644
--- a/package.json
+++ b/package.json
@@ -24,26 +24,36 @@
"repository": "simonhaenisch/prettier-plugin-organize-imports",
"homepage": "https://github.com/simonhaenisch/prettier-plugin-organize-imports#readme",
"peerDependencies": {
+ "@volar-examples/svelte-typescript": "^1.0.4",
"@volar/vue-language-plugin-pug": "^1.0.4",
"@volar/vue-typescript": "^1.0.4",
"prettier": ">=2.0",
+ "prettier-plugin-svelte": "^2.8.0",
"typescript": ">=2.9"
},
"peerDependenciesMeta": {
+ "@volar-examples/svelte-typescript": {
+ "optional": true
+ },
"@volar/vue-language-plugin-pug": {
"optional": true
},
"@volar/vue-typescript": {
"optional": true
+ },
+ "prettier-plugin-svelte": {
+ "optional": true
}
},
"devDependencies": {
"@types/node": "18.11.9",
"@types/prettier": "2.7.1",
+ "@volar-examples/svelte-typescript": "1.0.9",
"@volar/vue-language-plugin-pug": "1.0.9",
"@volar/vue-typescript": "1.0.9",
"ava": "3.15.0",
"prettier": "2.7.1",
+ "prettier-plugin-svelte": "2.8.0",
"typescript": "4.8.4"
},
"prettier": {
diff --git a/test.js b/test.js
index c33d5e1..a287c91 100644
--- a/test.js
+++ b/test.js
@@ -182,6 +182,32 @@ Foo
t.is(formattedCode, code);
});
+test('has basic Svelte support', (t) => {
+ const code = `
+
+
+
+
+ `;
+
+ const expectedCode = `
+
+
+
+`;
+
+ const formattedCode = prettify(code, { plugins: ['prettier-plugin-svelte', '.'], filepath: 'file.svelte' });
+
+ t.is(formattedCode, expectedCode);
+});
+
test('does not remove unused imports with `organizeImportsSkipDestructiveCodeActions` enabled', (t) => {
const code = `import { foo } from "./bar";
`;