Bluesky app fork with some witchin' additions 💫

Use exact imports for icons (#4549)

* Use exact imports for icons

* Add a lint rule

authored by danabra.mov and committed by

GitHub e30575c0 e6213d7a

+27 -3
+1
.eslintrc.js
··· 31 31 }, 32 32 }, 33 33 ], 34 + 'bsky-internal/use-exact-imports': 'error', 34 35 'bsky-internal/use-typed-gates': 'error', 35 36 'bsky-internal/keep-i18n-patch-in-sync': 'error', 36 37 'simple-import-sort/imports': [
+1
eslint/index.js
··· 4 4 rules: { 5 5 'keep-i18n-patch-in-sync': require('./keep-i18n-patch-in-sync'), 6 6 'avoid-unwrapped-text': require('./avoid-unwrapped-text'), 7 + 'use-exact-imports': require('./use-exact-imports'), 7 8 'use-typed-gates': require('./use-typed-gates'), 8 9 }, 9 10 }
+22
eslint/use-exact-imports.js
··· 1 + /* eslint-disable bsky-internal/use-exact-imports */ 2 + const BANNED_IMPORTS = [ 3 + '@fortawesome/free-regular-svg-icons', 4 + '@fortawesome/free-solid-svg-icons', 5 + ] 6 + 7 + exports.create = function create(context) { 8 + return { 9 + Literal(node) { 10 + if (typeof node.value !== 'string') { 11 + return 12 + } 13 + if (BANNED_IMPORTS.includes(node.value)) { 14 + context.report({ 15 + node, 16 + message: 17 + 'Import the specific thing you want instead of the entire package', 18 + }) 19 + } 20 + }, 21 + } 22 + }
+3 -3
src/view/icons/index.tsx
··· 1 1 import {library} from '@fortawesome/fontawesome-svg-core' 2 - import {faAddressCard} from '@fortawesome/free-regular-svg-icons' 2 + import {faAddressCard} from '@fortawesome/free-regular-svg-icons/faAddressCard' 3 3 import {faBell as farBell} from '@fortawesome/free-regular-svg-icons/faBell' 4 4 import {faBookmark as farBookmark} from '@fortawesome/free-regular-svg-icons/faBookmark' 5 5 import {faCalendar as farCalendar} from '@fortawesome/free-regular-svg-icons/faCalendar' ··· 25 25 import {faSquarePlus} from '@fortawesome/free-regular-svg-icons/faSquarePlus' 26 26 import {faTrashCan} from '@fortawesome/free-regular-svg-icons/faTrashCan' 27 27 import {faUser} from '@fortawesome/free-regular-svg-icons/faUser' 28 - import {faFlask} from '@fortawesome/free-solid-svg-icons' 29 - import {faUniversalAccess} from '@fortawesome/free-solid-svg-icons' 30 28 import {faAngleDown} from '@fortawesome/free-solid-svg-icons/faAngleDown' 31 29 import {faAngleLeft} from '@fortawesome/free-solid-svg-icons/faAngleLeft' 32 30 import {faAngleRight} from '@fortawesome/free-solid-svg-icons/faAngleRight' ··· 62 60 import {faEye} from '@fortawesome/free-solid-svg-icons/faEye' 63 61 import {faFilter} from '@fortawesome/free-solid-svg-icons/faFilter' 64 62 import {faFire} from '@fortawesome/free-solid-svg-icons/faFire' 63 + import {faFlask} from '@fortawesome/free-solid-svg-icons/faFlask' 65 64 import {faGear} from '@fortawesome/free-solid-svg-icons/faGear' 66 65 import {faGlobe} from '@fortawesome/free-solid-svg-icons/faGlobe' 67 66 import {faHand} from '@fortawesome/free-solid-svg-icons/faHand' ··· 97 96 import {faSliders} from '@fortawesome/free-solid-svg-icons/faSliders' 98 97 import {faThumbtack} from '@fortawesome/free-solid-svg-icons/faThumbtack' 99 98 import {faTicket} from '@fortawesome/free-solid-svg-icons/faTicket' 99 + import {faUniversalAccess} from '@fortawesome/free-solid-svg-icons/faUniversalAccess' 100 100 import {faUserCheck} from '@fortawesome/free-solid-svg-icons/faUserCheck' 101 101 import {faUserPlus} from '@fortawesome/free-solid-svg-icons/faUserPlus' 102 102 import {faUsers} from '@fortawesome/free-solid-svg-icons/faUsers'