diff --git a/package-lock.json b/package-lock.json index 874206f4..868781a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "prettier-plugin-svelte", + "name": "@mizchi/svelte-printer", "version": "2.1.6", "lockfileVersion": 1, "requires": true, @@ -357,6 +357,11 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, + "astring": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.7.0.tgz", + "integrity": "sha512-43bervUZNvahG1v74a+POdGlAWcOUGSvP9fJVj6sywzM/SquwDkA+CdP938e8tWHUV77fStCiqzaQHAt0u6MVA==" + }, "ava": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz", diff --git a/package.json b/package.json index 0f429d01..48a7de7b 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "prettier-plugin-svelte", + "name": "@mizchi/svelte-printer", "version": "2.1.6", "description": "Svelte plugin for prettier", "main": "plugin.js", @@ -28,13 +28,13 @@ }, "homepage": "https://github.com/sveltejs/prettier-plugin-svelte#readme", "devDependencies": { + "@rollup/plugin-commonjs": "14.0.0", + "@rollup/plugin-node-resolve": "11.0.1", "@types/node": "^10.12.18", "@types/prettier": "^2.1.6", "ava": "3.15.0", "prettier": "^2.2.1", "rollup": "2.36.0", - "@rollup/plugin-commonjs": "14.0.0", - "@rollup/plugin-node-resolve": "11.0.1", "rollup-plugin-typescript": "1.0.1", "svelte": "^3.30.0", "ts-node": "^9.1.1", @@ -44,5 +44,8 @@ "peerDependencies": { "prettier": "^1.16.4 || ^2.0.0", "svelte": "^3.2.0" + }, + "dependencies": { + "astring": "^1.7.0" } } diff --git a/src/index.ts b/src/index.ts index d1b11f60..18118098 100644 --- a/src/index.ts +++ b/src/index.ts @@ -65,3 +65,5 @@ export const printers: Record = { }; export { options } from './options'; + +export { printCode } from './printCode'; diff --git a/src/print/index.ts b/src/print/index.ts index 8e83e1d1..2ee19bb7 100644 --- a/src/print/index.ts +++ b/src/print/index.ts @@ -6,6 +6,7 @@ import { hasSnippedContent, unsnipContent } from '../lib/snipTagContent'; import { parseSortOrder, SortOrderPart } from '../options'; import { isEmptyDoc, isLine, trim, trimRight } from './doc-helpers'; import { flatten, isASTNode, isPreTagContent } from './helpers'; +import { generate } from 'astring'; import { checkWhitespaceAtEndOfSvelteBlock, checkWhitespaceAtStartOfSvelteBlock, @@ -622,8 +623,12 @@ export function print(path: FastPath, options: ParserOptions, print: PrintFn): D return concat([line, '{...', printJS(path, print, false, false, 'expression'), '}']); } - console.error(JSON.stringify(node, null, 4)); - throw new Error('unknown node type: ' + node.type); + try { + return generate(node); + } catch (err) { + console.error(JSON.stringify(node, null, 4)); + throw new Error('unknown node type: ' + node.type); + } } function printTopLevelParts( diff --git a/src/printCode.ts b/src/printCode.ts new file mode 100644 index 00000000..8efc85bf --- /dev/null +++ b/src/printCode.ts @@ -0,0 +1,22 @@ +import type { Ast } from 'svelte/types/compiler/interfaces'; +import prettier from 'prettier/standalone'; +import * as p from './index'; + +export function printCode(ast: Ast) { + const overridePlugin = { + ...p, + parsers: { + ...p.parsers, + svelte: { + ...p.parsers.svelte, + parse: () => { + return { ...ast, __isRoot: true }; + }, + }, + }, + }; + return prettier.format(' dummy ', { + parser: 'svelte', + plugins: [overridePlugin as any], + }); +}