diff --git a/.eslintrc.js b/.eslintrc.js index 66c533eb5d..fff483ac0a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { root: true, - extends: '@sveltejs', + extends: ['@sveltejs', 'prettier'], settings: { 'import/core-modules': [ 'svelte', diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93116a8df0..2082d2cfba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: with: node-version: 16 cache: pnpm - - run: 'pnpm i && pnpm lint' + - run: 'pnpm i && pnpm format:check && pnpm lint' Unit: runs-on: ${{ matrix.os }} timeout-minutes: 10 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..447573c618 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,13 @@ +/* +!/elements +!/scripts +# TODO: after launch new site, format site dir. +/site +!/src +src/compiler/compile/internal_exports.ts +!/test +/test/**/*.svelte +/test/**/_expected* +/test/**/_actual* +/test/**/expected* +/types diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..7d51464eeb --- /dev/null +++ b/.prettierrc @@ -0,0 +1,16 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { + "files": "site/**/*.md", + "options": { + "requirePragma": true + } + } + ], + "pluginSearchDirs": ["."] +} diff --git a/package.json b/package.json index 790302e2c5..9c2ada6782 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,8 @@ }, "types": "types/runtime/index.d.ts", "scripts": { + "format:fix": "prettier . --cache --plugin-search-dir=. --write", + "format:check": "prettier . --cache --plugin-search-dir=. --check", "test": "npm run test:unit && npm run test:integration && echo \"manually check that there are no type errors in test/types by opening the files in there\"", "test:integration": "mocha --exit", "test:unit": "mocha --config .mocharc.unit.js --exit", @@ -133,6 +135,7 @@ "code-red": "^1.0.0", "css-tree": "^2.3.1", "eslint": "^8.35.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-svelte3": "^4.0.0", "estree-walker": "^3.0.3", @@ -143,6 +146,8 @@ "magic-string": "^0.30.0", "mocha": "^10.2.0", "periscopic": "^3.1.0", + "prettier": "^2.8.8", + "prettier-plugin-svelte": "^2.10.0", "puppeteer": "^19.8.5", "rollup": "^3.20.2", "source-map": "^0.7.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68bf1304f6..ed6da5e726 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,6 +70,9 @@ devDependencies: eslint: specifier: ^8.35.0 version: 8.35.0 + eslint-config-prettier: + specifier: ^8.8.0 + version: 8.8.0(eslint@8.35.0) eslint-plugin-import: specifier: ^2.27.5 version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.35.0) @@ -100,6 +103,12 @@ devDependencies: periscopic: specifier: ^3.1.0 version: 3.1.0 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + prettier-plugin-svelte: + specifier: ^2.10.0 + version: 2.10.0(prettier@2.8.8)(svelte@3.58.0) puppeteer: specifier: ^19.8.5 version: 19.8.5(typescript@5.0.4) @@ -1238,6 +1247,15 @@ packages: source-map: 0.6.1 dev: true + /eslint-config-prettier@8.8.0(eslint@8.35.0): + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.35.0 + dev: true + /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: @@ -2552,6 +2570,22 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0): + resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} + peerDependencies: + prettier: ^1.16.4 || ^2.0.0 + svelte: ^3.2.0 + dependencies: + prettier: 2.8.8 + svelte: 3.58.0 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'}