From 2f801b9940eca81711c97204c6eeec0dcec6ac7b Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Thu, 3 Jul 2025 15:36:24 +0200 Subject: [PATCH] Add eslint-plugin-simple-import-sort to sort and group imports --- eslint.config.js | 25 +++++++++ package-lock.json | 25 +++++++-- package.json | 3 +- playwright.config.ts | 1 + src/App.svelte | 31 ++++++----- src/components/AddRepoButton.svelte | 24 ++++---- src/components/AnnounceSwitch.svelte | 3 +- src/components/AssigneeInput.svelte | 2 +- src/components/Changes.svelte | 6 +- src/components/Changeset.svelte | 4 +- src/components/Clipboard.svelte | 3 +- src/components/Command.svelte | 2 +- src/components/Comment.svelte | 6 +- src/components/CommentToggleInput.svelte | 2 +- src/components/CommitsContainer.svelte | 6 +- src/components/CompactCommitAuthorship.svelte | 3 +- src/components/ConfirmClear.svelte | 4 +- src/components/CopyableId.svelte | 2 +- src/components/Diff.svelte | 10 ++-- src/components/Discussion.svelte | 4 +- src/components/ExtendedTextarea.svelte | 21 ++++--- src/components/ExternalLink.svelte | 2 +- src/components/File.svelte | 4 +- src/components/FileDiff.svelte | 2 +- src/components/FontSizeSwitch.svelte | 4 +- src/components/FullWindowError.svelte | 10 ++-- src/components/GuideButton.svelte | 10 ++-- src/components/Header.svelte | 9 ++- src/components/HomeSidebar.svelte | 4 +- src/components/Id.svelte | 4 +- src/components/Inbox.svelte | 2 +- src/components/InboxButton.svelte | 13 ++--- src/components/IssueSecondColumn.svelte | 14 ++--- src/components/IssueStateButton.svelte | 2 +- src/components/IssueStateFilterButton.svelte | 16 +++--- src/components/IssueTeaser.svelte | 16 +++--- src/components/IssueTimeline.svelte | 9 +-- src/components/IssuesSecondColumn.svelte | 10 ++-- src/components/Link.svelte | 2 +- src/components/Markdown.svelte | 12 ++-- src/components/MoreBreadcrumbsButton.svelte | 8 +-- src/components/NewPatchButton.svelte | 12 ++-- src/components/NodeBreadcrumb.svelte | 3 +- src/components/NodeId.svelte | 2 +- src/components/NotificationTeaser.svelte | 19 ++++--- src/components/NotificationsByRepo.svelte | 8 +-- src/components/PatchMetadata.svelte | 14 ++--- src/components/PatchStateButton.svelte | 2 +- src/components/PatchStateButtonCompact.svelte | 4 +- src/components/PatchStateFilterButton.svelte | 3 +- src/components/PatchTeaser.svelte | 8 +-- src/components/PatchTimeline.svelte | 11 ++-- src/components/PatchesSecondColumn.svelte | 10 ++-- src/components/ReactionSelector.svelte | 7 ++- src/components/RepoCard.svelte | 8 +-- src/components/RepoCardPlaceholder.svelte | 13 ++--- src/components/RepoHeader.svelte | 2 +- src/components/RepoHomeSecondColumn.svelte | 10 ++-- src/components/RepoMetadata.svelte | 2 +- src/components/Review.svelte | 23 ++++---- src/components/Revision.svelte | 10 ++-- src/components/RevisionReviews.svelte | 17 +++--- src/components/RevisionSelector.svelte | 18 +++--- src/components/Revisions.svelte | 14 ++--- src/components/Settings.svelte | 22 ++++---- src/components/Sidebar.svelte | 7 +-- src/components/TextInput.svelte | 4 +- src/components/Textarea.svelte | 6 +- src/components/ThemeSwitch.svelte | 4 +- src/components/Thread.svelte | 6 +- src/components/UpdateSwitch.svelte | 2 +- src/components/VerdictBadge.svelte | 1 + src/components/VerdictButton.svelte | 2 +- src/lib/auth.svelte.ts | 5 +- src/lib/draftReviewStorage.ts | 13 +++-- src/lib/invoke.ts | 5 +- src/lib/markdown.ts | 6 +- src/lib/notification.ts | 2 +- src/lib/router.ts | 7 +-- src/lib/router/definitions.ts | 2 +- src/lib/startup.svelte.ts | 2 +- src/lib/syntax.ts | 55 +++++++++---------- src/lib/updateChecker.svelte.ts | 4 +- src/lib/useLocalStorage.svelte.ts | 2 +- src/lib/utils.ts | 5 +- src/main.ts | 5 +- src/views/booting/Auth.svelte | 13 +++-- src/views/booting/CreateIdentity.svelte | 7 ++- src/views/home/Repos.svelte | 10 ++-- src/views/home/router.ts | 2 +- src/views/repo/BreadcrumbCopyButton.svelte | 6 +- src/views/repo/CreateIssue.svelte | 12 ++-- src/views/repo/Issue.svelte | 21 ++++--- src/views/repo/Issues.svelte | 16 +++--- src/views/repo/Layout.svelte | 2 +- src/views/repo/Patch.svelte | 22 ++++---- src/views/repo/Patches.svelte | 18 +++--- src/views/repo/RepoBreadcrumb.svelte | 2 +- src/views/repo/router.ts | 12 ++-- tests/e2e/clipboard.spec.ts | 2 +- tests/e2e/repo/issue.spec.ts | 2 +- tests/e2e/repo/issues.spec.ts | 2 +- tests/e2e/theme.spec.ts | 2 +- tests/support/fixtures.ts | 11 ++-- tests/support/globalSetup.ts | 17 +++--- tests/support/peerManager.ts | 12 ++-- tests/support/router.ts | 1 + tests/support/support.ts | 7 ++- tests/unit/notifications.test.ts | 3 +- vite.config.ts | 5 +- 110 files changed, 492 insertions(+), 442 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 59b874d97..a6ce90d80 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -2,6 +2,7 @@ import globals from "globals"; import js from "@eslint/js"; import prettier from "eslint-config-prettier"; import svelte from "eslint-plugin-svelte"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; import svelteParser from "svelte-eslint-parser"; import ts from "typescript-eslint"; @@ -11,6 +12,9 @@ export default [ ...ts.configs.recommended, prettier, { + plugins: { + "simple-import-sort": simpleImportSort, + }, languageOptions: { parser: ts.parser, parserOptions: { @@ -45,6 +49,27 @@ export default [ // Require let or const instead of var. // https://eslint.org/docs/rules/no-var "no-var": "warn", + "simple-import-sort/imports": [ + "warn", + { + groups: [ + // Type imports + ["\\u0000$"], + // Node.js built-in modules + ["^node:"], + // Everything not matched, aka third party packages + ["^"], + // Files under @app and @lib without an extension + ["^(@app\/lib).*(\.svelte$|\.ts$|\.js$){0}"], + // Files under @app and @lib ending in .svelte or svelte.ts + ["^(@app\/lib).*(\.svelte$)"], + // Svelte components imported through @app + ["^(@app).*(\.svelte$)"], + // Everything else imported through relative imports + ["^\\."], + ], + }, + ], // Require `===` and `!==` comparisons. eqeqeq: "warn", "@typescript-eslint/no-floating-promises": "warn", diff --git a/package-lock.json b/package-lock.json index bc10ac6c7..e216a22e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "dompurify": "^3.2.5", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", + "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-svelte": "^3.5.1", "execa": "^9.5.3", "fuzzysort": "^3.1.0", @@ -2319,10 +2320,11 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2601,6 +2603,16 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-plugin-svelte": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.5.1.tgz", @@ -5051,10 +5063,11 @@ "dev": true }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, + "license": "MIT", "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" diff --git a/package.json b/package.json index 671ca03b1..4f5e6ebae 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "check-rs": "scripts/check-rs", "test:unit": "TZ='UTC' vitest run", "test:e2e": "TZ='UTC' playwright test", - "format": "npx prettier '**/*.@(ts|js|svelte|json|css|html|yml)' --write", + "format": "npx prettier '**/*.@(ts|js|svelte|json|css|html|yml)' '!crates/**/*' --write", "generate-types": "cargo test --manifest-path ./crates/radicle-types/Cargo.toml", "tauri": "npx tauri" }, @@ -57,6 +57,7 @@ "dompurify": "^3.2.5", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", + "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-svelte": "^3.5.1", "execa": "^9.5.3", "fuzzysort": "^3.1.0", diff --git a/playwright.config.ts b/playwright.config.ts index 14ea6abb4..2b44c7293 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,4 +1,5 @@ import type { PlaywrightTestConfig } from "@playwright/test"; + import { devices } from "@playwright/test"; const config: PlaywrightTestConfig = { diff --git a/src/App.svelte b/src/App.svelte index 06eb80237..d03ac3d1c 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,42 +1,43 @@