diff --git a/plugins/.vscode/extensions.json b/plugins/.vscode/extensions.json index 6a302fe536..b7ed4cd502 100644 --- a/plugins/.vscode/extensions.json +++ b/plugins/.vscode/extensions.json @@ -1,8 +1,7 @@ { "recommendations": [ "nrwl.angular-console", - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint", - "firsttris.vscode-jest-runner" + "prettier.prettier-vscode", + "dbaeumer.vscode-eslint" ] } diff --git a/plugins/.vscode/settings.json b/plugins/.vscode/settings.json index 8b54f915c7..a672a367a3 100644 --- a/plugins/.vscode/settings.json +++ b/plugins/.vscode/settings.json @@ -1,3 +1,5 @@ { - "prettier.singleQuote": true + "prettier.singleQuote": true, + "editor.defaultFormatter": "prettier.prettier-vscode", + "editor.formatOnSave": true } diff --git a/plugins/apps/poc-state-plugin/src/app/app.component.ts b/plugins/apps/poc-state-plugin/src/app/app.component.ts index 9d5d6b7df4..8996e1eb83 100644 --- a/plugins/apps/poc-state-plugin/src/app/app.component.ts +++ b/plugins/apps/poc-state-plugin/src/app/app.component.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ import { Component, effect, signal } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import type { Shape } from '@penpot/plugin-types'; diff --git a/plugins/libs/ui/eslint.config.mjs b/plugins/libs/ui/eslint.config.mjs index a4612a9129..af94eada49 100644 --- a/plugins/libs/ui/eslint.config.mjs +++ b/plugins/libs/ui/eslint.config.mjs @@ -1,12 +1,39 @@ -import nx from '@nx/eslint-plugin'; -import baseConfig from '../../eslint.base.config.js'; +// @ts-check +import baseConfig, { compat } from '../../eslint.base.config.js'; +import storybook from 'eslint-plugin-storybook'; +import unusedImports from 'eslint-plugin-unused-imports'; +import reactHooks from 'eslint-plugin-react-hooks'; export default [ ...baseConfig, - ...nx.configs['flat/react'], + reactHooks.configs.flat.recommended, + ...storybook.configs['flat/recommended'], + ...compat.config({ extends: ['plugin:@nx/react-typescript'] }).map((config) => ({ + ...config, + files: ['**/*.ts', '**/*.tsx'], + })), { files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], - // Override or add rules here - rules: {}, + ignores: ['**/.storybook/**'], + }, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + plugins: { + 'unused-imports': unusedImports, + }, + rules: { + '@typescript-eslint/no-unused-vars': 'off', + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': [ + 'warn', + { + vars: 'all', + varsIgnorePattern: '^_', + args: 'after-used', + argsIgnorePattern: '^_', + }, + ], + }, }, ]; + diff --git a/plugins/package.json b/plugins/package.json index 267b297d19..08ea3214b4 100644 --- a/plugins/package.json +++ b/plugins/package.json @@ -83,7 +83,9 @@ "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.1", "eslint-plugin-react": "7.35.0", - "eslint-plugin-react-hooks": "5.0.0", + "eslint-plugin-react-hooks": "7.0.1", + "eslint-plugin-storybook": "^10.2.0", + "eslint-plugin-unused-imports": "^4.3.0", "fs-extra": "^11.3.3", "globals": "^17.0.0", "happy-dom": "^20.3.4", @@ -98,6 +100,7 @@ "tsx": "^4.21.0", "typedoc": "^0.28.16", "typescript": "5.9.3", + "typescript-eslint": "^8.53.1", "vite": "7.3.1", "vite-plugin-checker": "^0.12.0", "vite-plugin-dts": "4.5.4", diff --git a/plugins/pnpm-lock.yaml b/plugins/pnpm-lock.yaml index 3a2da47617..a83f0f52f2 100644 --- a/plugins/pnpm-lock.yaml +++ b/plugins/pnpm-lock.yaml @@ -220,8 +220,14 @@ importers: specifier: 7.35.0 version: 7.35.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: 5.0.0 - version: 5.0.0(eslint@9.39.2(jiti@2.6.1)) + specifier: 7.0.1 + version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-storybook: + specifier: ^10.2.0 + version: 10.2.0(eslint@9.39.2(jiti@2.6.1))(storybook@10.2.0(@testing-library/dom@10.4.0)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + eslint-plugin-unused-imports: + specifier: ^4.3.0 + version: 4.3.0(@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) fs-extra: specifier: ^11.3.3 version: 11.3.3 @@ -264,6 +270,9 @@ importers: typescript: specifier: 5.9.3 version: 5.9.3 + typescript-eslint: + specifier: ^8.53.1 + version: 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) vite: specifier: 7.3.1 version: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) @@ -5518,12 +5527,6 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-react-hooks@5.0.0: - resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-hooks@7.0.1: resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} engines: {node: '>=18'} @@ -5536,6 +5539,21 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-storybook@10.2.0: + resolution: {integrity: sha512-OtQJ153FOusr8bIMzccjkfMFJEex/3NFx0iXZ+UaeQ0WXearQ+37EGgBay3onkFElyu8AySggq/fdTknPAEvPA==} + peerDependencies: + eslint: '>=8' + storybook: ^10.2.0 + + eslint-plugin-unused-imports@4.3.0: + resolution: {integrity: sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -8971,6 +8989,13 @@ packages: peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x + typescript-eslint@8.53.1: + resolution: {integrity: sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -16525,10 +16550,6 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.0.0(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/core': 7.28.6 @@ -16562,6 +16583,21 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 + eslint-plugin-storybook@10.2.0(eslint@9.39.2(jiti@2.6.1))(storybook@10.2.0(@testing-library/dom@10.4.0)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): + dependencies: + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + storybook: 10.2.0(@testing-library/dom@10.4.0)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + eslint: 9.39.2(jiti@2.6.1) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -20706,6 +20742,17 @@ snapshots: typescript: 5.9.3 yaml: 2.8.2 + typescript-eslint@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.8.2: {} typescript@5.9.3: {}