From 195a096841996c3fbe08057e463d70c6d280b615 Mon Sep 17 00:00:00 2001 From: sarayourfriend <24264157+sarayourfriend@users.noreply.github.com> Date: Wed, 23 Feb 2022 16:35:16 -0500 Subject: [PATCH] Add rules for linting import order --- .eslintrc.js | 56 +++++++++++++++++++ src/components/DownloadButton.vue | 2 + src/components/DropdownButton.vue | 4 +- src/components/ImageDetails/ReuseSurvey.vue | 1 + src/components/License/VLicense.vue | 4 +- .../VAllResultsGrid/VAllResultsGrid.vue | 4 +- src/components/VAllResultsGrid/VAudioCell.vue | 1 + src/components/VAllResultsGrid/VImageCell.vue | 1 + .../VAudioDetails/VAudioDetails.vue | 7 ++- .../VAudioDetails/VRelatedAudio.vue | 5 +- src/components/VAudioTrack/VAudioTrack.vue | 13 +++-- src/components/VAudioTrack/VPlayPause.vue | 4 +- src/components/VAudioTrack/VWaveform.vue | 1 + .../VAudioTrack/layouts/VRowLayout.vue | 1 + src/components/VBackToSearchResultsLink.vue | 1 + src/components/VButton.vue | 4 +- src/components/VCheckbox/VCheckbox.vue | 3 +- src/components/VContentLink/VContentLink.vue | 4 +- .../VContentReport/VContentReportButton.vue | 4 +- .../VContentReport/VContentReportForm.vue | 12 ++-- .../VContentReport/VContentReportPopover.vue | 7 ++- src/components/VContentReport/VDmcaNotice.vue | 1 + .../VContentReport/VReportDescForm.vue | 1 + .../VContentSwitcher/VMobileMenuModal.vue | 7 ++- .../VContentSwitcher/VSearchTypeButton.vue | 6 +- .../VContentSwitcher/VSearchTypeItem.vue | 2 + .../VContentSwitcher/VSearchTypePopover.vue | 2 + .../VContentSwitcher/VSearchTypeRadio.vue | 2 + .../VContentSwitcher/VSearchTypes.vue | 5 +- src/components/VFilters/VFilterChecklist.vue | 7 ++- .../VFilters/VLicenseExplanation.vue | 4 +- src/components/VFilters/VSearchGridFilter.vue | 1 + src/components/VFourOhFour.vue | 2 + .../VGlobalAudioSection.vue | 3 +- src/components/VHeader/VFilterButton.vue | 1 + src/components/VHeader/VHeader.vue | 5 +- src/components/VHeader/VHeaderFilter.vue | 4 +- src/components/VHeader/VHeaderMenu.vue | 12 ++-- src/components/VHeader/VLogoButton.vue | 2 + .../VHeader/VPageMenu/VMobilePageMenu.vue | 1 + .../VHeader/VSearchBar/VSearchBar.vue | 1 + .../VHeader/VSearchBar/VSearchButton.vue | 6 +- .../VImageDetails/VRelatedImages.vue | 2 + src/components/VItemGroup/VItem.vue | 8 ++- src/components/VItemGroup/VItemGroup.vue | 1 + .../VItemGroup/meta/VItemGroup.stories.js | 15 +++-- src/components/VLoadMore.vue | 2 + src/components/VLogoLoader/VLogoLoader.vue | 1 + src/components/VMediaInfo/VCopyLicense.vue | 5 +- src/components/VMediaInfo/VMediaLicense.vue | 4 +- src/components/VMediaInfo/VMediaReuse.vue | 2 + .../VMetaSearch/VMetaSourceList.vue | 1 + src/components/VModal/VMobileModalContent.vue | 4 +- src/components/VModal/VModal.vue | 2 + src/components/VModal/VModalContent.vue | 10 +++- src/components/VModal/VModalTarget.vue | 1 + src/components/VModal/VSidebarTarget.vue | 1 + src/components/VNotificationBanner.vue | 2 + src/components/VPopover/VPopover.vue | 3 +- src/components/VPopover/VPopoverContent.vue | 1 + .../VPopover/meta/VPopover.stories.js | 3 +- src/components/VScrollButton.vue | 1 + src/components/VSearchGrid.vue | 1 + src/components/VSearchResultsTitle.vue | 1 + src/components/VTeleport/VTeleport.vue | 1 + src/components/VTeleport/VTeleportTarget.vue | 4 +- src/components/VTranslationStatusBanner.vue | 1 + .../use-filter-sidebar-visibility.js | 1 + src/composables/use-focus-on-blur.js | 1 - src/composables/use-hide-on-click-outside.js | 1 + src/composables/use-i18n-sync.js | 1 + src/composables/use-i18n-utilities.js | 1 + src/composables/use-load-more.js | 1 + src/composables/use-media-query.js | 1 + src/composables/use-popover-content.js | 1 + src/composables/use-related.js | 1 + src/composables/use-scroll.js | 1 + src/composables/use-search-type.js | 2 + src/composables/use-storage.js | 1 + src/composables/use-window-scroll.js | 3 +- src/data/api-service.js | 1 + src/data/media-service.js | 1 - src/layouts/blank.vue | 3 + src/layouts/default.vue | 14 +++-- src/layouts/error.vue | 1 + src/locales/scripts/create-wp-locale-list.js | 4 +- src/locales/scripts/get-translations.js | 2 + src/locales/scripts/get-validated-locales.js | 1 + src/locales/scripts/json-to-pot.js | 4 +- src/locales/scripts/parse-vue-files.js | 1 + src/mixins/iframe-height.js | 1 + src/pages/about.vue | 3 +- src/pages/audio/_id.vue | 1 + src/pages/audio/index.vue | 1 + src/pages/extension.vue | 4 +- src/pages/image/_id.vue | 10 +++- src/pages/image/index.vue | 1 + src/pages/index.vue | 19 +++---- src/pages/meta-search.vue | 1 + src/pages/search.vue | 6 +- src/pages/search/audio.vue | 8 ++- src/pages/search/image.vue | 3 +- src/pages/search/index.vue | 4 +- src/pages/sources.vue | 2 + src/store/provider.js | 4 +- src/utils/search-query-transform.js | 4 +- test/e2e/filters.spec.js | 1 + test/e2e/search-navigation.spec.js | 1 + test/e2e/search-query-client.spec.js | 1 + test/e2e/search-query-server.spec.js | 1 + test/e2e/search-types.spec.js | 1 + test/e2e/search.spec.js | 1 + test/unit/setup.js | 3 +- .../components/AudioTrack/audio-track.spec.js | 4 +- .../ContentReport/content-report-form.spec.js | 2 + .../ImageDetails/reuse-survey.spec.js | 11 ++-- .../ImageDetails/v-copy-license.spec.js | 5 +- .../VHeader/SearchBar/search-bar.spec.js | 2 + .../VHeader/v-filter-button.spec.js | 7 ++- .../components/VMediaTag/v-media-tag.spec.js | 4 +- .../unit/specs/components/copy-button.spec.js | 1 + .../specs/components/download-button.spec.js | 6 +- .../specs/components/dropdown-button.spec.js | 3 +- test/unit/specs/components/dropdown.spec.js | 3 +- .../specs/components/filter-checklist.spec.js | 3 +- test/unit/specs/components/filter-tag.spec.js | 3 +- test/unit/specs/components/image-grid.spec.js | 4 +- .../specs/components/loading-icon.spec.js | 1 + .../specs/components/related-audios.spec.js | 6 +- .../specs/components/related-images.spec.js | 1 + .../specs/components/scroll-button.spec.js | 3 +- .../components/search-grid-filter.spec.js | 6 +- .../unit/specs/components/search-grid.spec.js | 3 +- .../specs/components/search-rating.spec.js | 6 +- test/unit/specs/components/v-button.spec.js | 3 +- test/unit/specs/components/v-checkbox.spec.js | 1 + .../specs/components/v-content-link.spec.js | 4 +- .../specs/components/v-item-group.spec.js | 6 +- test/unit/specs/components/v-license.spec.js | 3 +- test/unit/specs/components/v-link.spec.js | 3 +- .../specs/components/v-logo-loader.spec.js | 4 +- test/unit/specs/components/v-popover.spec.js | 7 ++- .../components/v-search-results-title.spec.js | 3 +- .../use-get-locale-formatted-number.spec.js | 2 +- .../composables/use-i18n-utilities.spec.js | 1 + test/unit/specs/pages/browse-page.spec.js | 3 +- test/unit/specs/store/user.spec.js | 3 +- .../utils/search-query-transform.spec.js | 1 + test/unit/test-utils/render.js | 2 + typings/vue/index.d.ts | 1 + 150 files changed, 409 insertions(+), 142 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index f304b2bcf8..d2b4f9aab5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -83,6 +83,62 @@ module.exports = { ignore: ['.svg'], }, ], + 'import/newline-after-import': ['error'], + 'import/order': [ + 'error', + { + 'newlines-between': 'always-and-inside-groups', + groups: [ + 'builtin', + 'external', + 'internal', + 'parent', + 'sibling', + 'index', + 'object', + 'type', + ], + pathGroups: [ + { + // Treate vue and composition-api as "builtin" + pattern: '(vue|@nuxtjs/composition-api)', + group: 'builtin', + position: 'before', + }, + { + // Move assets to the very end of the imports list + pattern: 'assets/**', + patternOptions: { partial: true }, + group: 'type', + position: 'after', + }, + { + // Treat components as their own group and move to the end of the internal imports list + pattern: '~/components/**', + group: 'parent', + position: 'before', + }, + /** + * These next two must come after any more specific matchers + * as the plugin uses the patterns in order and does not sort + * multiple-matches by specificity, it just takes the _first_ + * pattern that matches and applies that group to the import. + */ + { + // Document webpack alias + pattern: '~/**', + group: 'internal', + position: 'before', + }, + { + // Document webpack alias + pattern: '~~/**', + group: 'external', + position: 'after', + }, + ], + }, + ], }, settings: { 'vue-i18n': { diff --git a/src/components/DownloadButton.vue b/src/components/DownloadButton.vue index 200245f23b..e053f32e02 100644 --- a/src/components/DownloadButton.vue +++ b/src/components/DownloadButton.vue @@ -61,7 +61,9 @@