Skip to content

Conversation

@webpro
Copy link
Contributor

@webpro webpro commented Nov 13, 2023

This PR introduces Knip, a tool to find unused files, dependencies and exports. It can find all sort of unused (or unlisted) things, I'll show example output below.

pnpm knip

The current results are quite useful imho (see below for an idea).

Lots of unused exports from __tests__ files. Not sure whether test files should export anything? Those files could be ignored as well (but we'd lose their dependency usage).

This monorepo is such a great exercise for Knip! If we manage to reach "inbox zero" (i.e. no reported issues) I would love to add it to Knip's integration test suite which should prevent regressions, helping both projects.

Unfortunately I did have to make one change to the codebase: packages/vue-query-devtools/vite.config.js has both ESM (import) and CJS (__dirname) syntax. I think Vite itself bundles its config files using esbuild before execution. This is why I renamed vite.config.js Another solution could be to refactor __dirname into ESM-compliant code.

I wasn't sure if/how you'd like to a package.json script or CI workflow, so I didn't.

Let me know if you have any questions or feedback, happy to discuss any concerns or questions you may have :)

@vercel
Copy link

vercel bot commented Nov 13, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Ignored Deployment
Name Status Preview Comments Updated (UTC)
query ⬜️ Ignored (Inspect) Visit Preview Nov 29, 2023 2:32pm

@webpro
Copy link
Contributor Author

webpro commented Nov 13, 2023

$ pnpm knip
Unused files (5)
integrations/react-cra4/src/react-app-env.d.ts
integrations/react-cra5/src/react-app-env.d.ts
integrations/svelte-vite/src/vite-env.d.ts
packages/react-query-devtools/src/__tests__/utils.tsx
packages/vue-query-devtools/src/production.ts
Unused dependencies (1)
@tanstack/react-query-devtools  integrations/react-next/package.json
Unused devDependencies (11)
@testing-library/react-hooks  package.json                                       
@testing-library/user-event   package.json                                       
concurrently                  package.json                                       
esbuild                       package.json                                       
ts-node                       package.json                                       
type-fest                     package.json                                       
vue                           package.json                                       
react-error-boundary          packages/react-query-devtools/package.json         
react-error-boundary          packages/react-query-next-experimental/package.json
vue2                          packages/vue-query/package.json                    
vue2.7                        packages/vue-query/package.json
Referenced optional peerDependencies (2)
react-dom             packages/react-query/package.json
@vue/composition-api  packages/vue-query/package.json
Unlisted dependencies (6)
@typescript-eslint/scope-manager  packages/eslint-plugin-query/src/utils/ast-utils.ts
svelte-eslint-parser              packages/svelte-query-devtools/.eslintrc.cjs       
svelte-eslint-parser              packages/svelte-query-persist-client/.eslintrc.cjs 
svelte-eslint-parser              packages/svelte-query/.eslintrc.cjs                
test-setup.ts                     packages/vue-query-devtools/vitest.config.ts       
rollup                            scripts/types.d.ts
Unlisted binaries (1)
corepack  package.json
Unused exports (76)
setActTimeout        packages/query-core/src/tests/utils.ts                                                 
Devtools             packages/query-devtools/src/Devtools.tsx                                               
DevtoolsPanel        packages/query-devtools/src/Devtools.tsx                                               
MutationRow          packages/query-devtools/src/Devtools.tsx                                               
MutationStatusCount  packages/query-devtools/src/Devtools.tsx                                               
QueryRow             packages/query-devtools/src/Devtools.tsx                                               
QueryStatus          packages/query-devtools/src/Devtools.tsx                                               
QueryStatusCount     packages/query-devtools/src/Devtools.tsx                                               
chunkArray           packages/query-devtools/src/Explorer.tsx                                               
convertPixelsToRem   packages/query-devtools/src/utils.tsx                                                  
queryStatusLabels    packages/query-devtools/src/utils.tsx                                                  
setActTimeout        packages/react-query-persist-client/src/__tests__/utils.ts                             
buttonPosition       packages/svelte-query-devtools/src/Devtools.svelte                                     
client               packages/svelte-query-devtools/src/Devtools.svelte                                     
errorTypes           packages/svelte-query-devtools/src/Devtools.svelte                                     
initialIsOpen        packages/svelte-query-devtools/src/Devtools.svelte                                     
position             packages/svelte-query-devtools/src/Devtools.svelte                                     
styleNonce           packages/svelte-query-devtools/src/Devtools.svelte                                     
client               packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte             
onSuccess            packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte             
persistOptions       packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte             
key                  packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte
states               packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte
key                  packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte      
onSuccess            packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte      
persistOptions       packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte      
queryClient          packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte      
states               packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte      
fetched              packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte          
key                  packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte          
states               packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte          
fetched              packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte           
key                  packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte           
persistOptions       packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte           
queryClient          packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte           
states               packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte           
key                  packages/svelte-query-persist-client/src/__tests__/InitialData/InitialData.svelte      
states               packages/svelte-query-persist-client/src/__tests__/InitialData/InitialData.svelte      
key                  packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte         
persistOptions       packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte         
queryClient          packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte         
states               packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte         
key                  packages/svelte-query-persist-client/src/__tests__/OnSuccess/OnSuccess.svelte          
key                  packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte           
onSuccess            packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte           
persistOptions       packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte           
queryClient          packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte           
key                  packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte         
persistOptions       packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte         
queryClient          packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte         
key                  packages/svelte-query-persist-client/src/__tests__/RemoveCache/RemoveCache.svelte      
key                  packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte        
persistOptions       packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte        
queryClient          packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte        
states               packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte        
key                  packages/svelte-query-persist-client/src/__tests__/RestoreCache/RestoreCache.svelte    
states               packages/svelte-query-persist-client/src/__tests__/RestoreCache/RestoreCache.svelte    
key                  packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte          
persistOptions       packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte          
queryClient          packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte          
states               packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte          
key                  packages/svelte-query-persist-client/src/__tests__/UseQueries/UseQueries.svelte        
states               packages/svelte-query-persist-client/src/__tests__/UseQueries/UseQueries.svelte        
setActTimeout        packages/svelte-query-persist-client/src/__tests__/utils.ts                            
options              packages/svelte-query/src/HydrationBoundary.svelte                                     
queryClient          packages/svelte-query/src/HydrationBoundary.svelte                                     
state                packages/svelte-query/src/HydrationBoundary.svelte                                     
client               packages/svelte-query/src/QueryClientProvider.svelte                                   
options              packages/svelte-query/src/__tests__/CreateMutation.svelte                              
options              packages/svelte-query/src/__tests__/CreateQueries.svelte                               
queryClient          packages/svelte-query/src/__tests__/CreateQueries.svelte                               
options              packages/svelte-query/src/__tests__/CreateQuery.svelte                                 
queryClient          packages/svelte-query/src/__tests__/CreateQuery.svelte                                 
createQueryClient    packages/svelte-query/src/__tests__/utils.ts                                           
queryKey             packages/svelte-query/src/__tests__/utils.ts                                           
setActTimeout        packages/svelte-query/src/__tests__/utils.ts
Unused exported types (8)
AtomicThemeColors  type       packages/query-devtools/src/theme.ts          
ThemeColors        type       packages/query-devtools/src/theme.ts          
ThemeColorsAll     type       packages/query-devtools/src/theme.ts          
ThemeConfigType    type       packages/query-devtools/src/theme.ts          
IQueryStatusLabel  type       packages/query-devtools/src/utils.tsx         
DevtoolsOptions    interface  packages/solid-query-devtools/src/devtools.tsx
QueriesOptions     type       packages/solid-query/src/createQueries.ts     
QueriesResults     type       packages/solid-query/src/createQueries.ts
Duplicate exports (5)
App, default                integrations/react-cra4/src/App.jsx     
App, default                integrations/react-cra5/src/App.jsx     
App, default                integrations/react-vite/src/App.jsx     
App, default                integrations/solid-vite/src/App.jsx     
DevtoolsComponent, default  packages/query-devtools/src/Devtools.tsx

@codesandbox-ci
Copy link

codesandbox-ci bot commented Nov 13, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 85e58e8:

Sandbox Source
@tanstack/query-example-react-basic-typescript Configuration
@tanstack/query-example-solid-basic-typescript Configuration
@tanstack/query-example-svelte-basic Configuration
@tanstack/query-example-vue-basic Configuration

@nx-cloud
Copy link

nx-cloud bot commented Nov 20, 2023

☁️ Nx Cloud Report

CI is running/has finished running commands for commit 85e58e8. As they complete they will appear below. Click to see the status, the terminal output, and the build insights.

📂 See all runs for this CI Pipeline Execution


✅ Successfully ran 1 target

Sent with 💌 from NxCloud.

@TkDodo
Copy link
Collaborator

TkDodo commented Nov 28, 2023

@webpro here's an update after I addressed / removed most things:

Unused files (1)
packages/vue-query-devtools/src/production.ts

I think this is a false-positive. If we look at vite.config.cjs, we can see that src/production.ts is an entry point:

entry: [
resolve(__dirname, 'src/index.ts'),
resolve(__dirname, 'src/production.ts'),
],

So either the vite config isn't picked up, or the entry points aren't respected.

Unused devDependencies (5)
esbuild    package.json                   
type-fest  package.json                   
vue        package.json                   
vue2       packages/vue-query/package.json
vue2.7     packages/vue-query/package.json
  • I think we need esbuild as it's a peerDependency of tsup 🤔
  • type-fest is actually used, but only as a type import here:

query/scripts/publish.js

Lines 437 to 440 in 7a9d2d0

/**
* @param {string} pathName
* @returns {Promise<import('type-fest').PackageJson>}
*/

I guess JsDoc annotations aren't picked up?

vue2 and vue2.7 are needed because we use vue-demi-switch to test against different versions of vue:

"test:2": "vue-demi-switch 2 vue2 && vitest",
"test:2.7": "vue-demi-switch 2.7 vue2.7 && vitest",
"test:3": "vue-demi-switch 3 && vitest",

Referenced optional peerDependencies (2)
react-dom             packages/react-query/package.json
@vue/composition-api  packages/vue-query/package.json

I don't really know what that means or refers to ... For react-query, we definitely need react-dom as a peerDependency, it's not optional 😅

Unlisted dependencies (1)
test-setup.ts  packages/vue-query-devtools/vitest.config.ts

test-setup.ts is a file we have, not a dependency, so this report doesn't make much sense to me.

Unused exports (61)
initialIsOpen   packages/svelte-query-devtools/src/Devtools.svelte:12:14                                    
buttonPosition  packages/svelte-query-devtools/src/Devtools.svelte:13:14                                    
position        packages/svelte-query-devtools/src/Devtools.svelte:14:14                                    
client          packages/svelte-query-devtools/src/Devtools.svelte:15:14                                    
errorTypes      packages/svelte-query-devtools/src/Devtools.svelte:16:14                                    
styleNonce      packages/svelte-query-devtools/src/Devtools.svelte:17:14                                    
client          packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte:11:14            
onSuccess       packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte:12:14            
persistOptions  packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte:13:14            
key             packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte:6:14
states          packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte:7:14
onSuccess       packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte:10:14     
states          packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte:11:14     
queryClient     packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte:7:14      
persistOptions  packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte:8:14      
key             packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte:9:14      
key             packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte:7:14          
states          packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte:8:14          
fetched         packages/svelte-query-persist-client/src/__tests__/FreshData/FreshData.svelte:9:14          
key             packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte:10:14          
states          packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte:11:14          
fetched         packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte:12:14          
queryClient     packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte:8:14           
persistOptions  packages/svelte-query-persist-client/src/__tests__/FreshData/Provider.svelte:9:14           
key             packages/svelte-query-persist-client/src/__tests__/InitialData/InitialData.svelte:7:14      
states          packages/svelte-query-persist-client/src/__tests__/InitialData/InitialData.svelte:8:14      
key             packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte:10:14        
states          packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte:11:14        
queryClient     packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte:8:14         
persistOptions  packages/svelte-query-persist-client/src/__tests__/InitialData/Provider.svelte:9:14         
key             packages/svelte-query-persist-client/src/__tests__/OnSuccess/OnSuccess.svelte:5:14          
queryClient     packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte:6:14           
persistOptions  packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte:7:14           
key             packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte:8:14           
onSuccess       packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte:9:14           
queryClient     packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte:6:14         
persistOptions  packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte:7:14         
key             packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte:8:14         
key             packages/svelte-query-persist-client/src/__tests__/RemoveCache/RemoveCache.svelte:5:14      
key             packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte:10:14       
states          packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte:11:14       
queryClient     packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte:8:14        
persistOptions  packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte:9:14        
key             packages/svelte-query-persist-client/src/__tests__/RestoreCache/RestoreCache.svelte:7:14    
states          packages/svelte-query-persist-client/src/__tests__/RestoreCache/RestoreCache.svelte:8:14    
key             packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte:10:14         
states          packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte:11:14         
queryClient     packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte:8:14          
persistOptions  packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte:9:14          
key             packages/svelte-query-persist-client/src/__tests__/UseQueries/UseQueries.svelte:7:14        
states          packages/svelte-query-persist-client/src/__tests__/UseQueries/UseQueries.svelte:8:14        
setActTimeout   packages/svelte-query-persist-client/src/__tests__/utils.ts:22:17                           
queryClient     packages/svelte-query/src/HydrationBoundary.svelte:10:14                                    
state           packages/svelte-query/src/HydrationBoundary.svelte:8:14                                     
options         packages/svelte-query/src/HydrationBoundary.svelte:9:14                                     
client          packages/svelte-query/src/QueryClientProvider.svelte:5:14                                   
options         packages/svelte-query/src/__tests__/CreateMutation.svelte:6:14                              
options         packages/svelte-query/src/__tests__/CreateQueries.svelte:5:14                               
queryClient     packages/svelte-query/src/__tests__/CreateQueries.svelte:9:14                               
options         packages/svelte-query/src/__tests__/CreateQuery.svelte:5:14                                 
queryClient     packages/svelte-query/src/__tests__/CreateQuery.svelte:6:14

Those are all svelte files, wich I haven't touched, because I don't know svelte and the docs say:

Svelte uses the export keyword to mark a variable declaration as a property or prop, which means it becomes accessible to consumers of the component

I don't really dare remove those - does knip understand svelte? cc @lachlancollins maybe those can all be removed, don't know ...


another thing I had to do was ignore certain .d.ts files:

ignore: ['**/react-app-env.d.ts', '**/vite-env.d.ts'],

at least for the react-app-env.d.ts, I know that react-scripts (create-react-app) creates that and needs it. If knip understands react-scripts, it should probably know that this isn't unused ? I don't know about the vite-env though ...

@lachlancollins
Copy link
Member

Svelte uses the export keyword to mark a variable declaration as a property or prop, which means it becomes accessible to consumers of the component

I don't really dare remove those - does knip understand svelte? cc @lachlancollins maybe those can all be removed, don't know ...

Definitely can't remove - this is a core feature of svelte v3/v4 props (there will be a new way to do this when v5 is released, but this current way will still be supported).

@webpro
Copy link
Contributor Author

webpro commented Nov 28, 2023

Getting there...

  • All the *.svelte files were included because of missing semi-colons (the initial regex matched against them).
  • JSDoc was parsed, but pretty minimal; improved in latest version.
  • There was no support for build.lib.entry in Vite plugin yet, added in latest version.

The rest we still need to do:

❯ knip
Unused devDependencies (4)
esbuild  package.json                   
^ tsup has esbuild as dependency so I think this can be removed?

vue      package.json                   
^ Unused?

vue2     packages/vue-query/package.json
vue2.7   packages/vue-query/package.json
^ This is super custom stuff, we should add to `ignoreBinaries`

Referenced optional peerDependencies (2)
react-dom             packages/react-query/package.json
^ This is marked as an optional peer dep, so the report seems valid

@vue/composition-api  packages/vue-query/package.json
^ This is probably a bug in Knip, will look into/fix

Unlisted dependencies (1)
test-setup.ts  packages/vue-query-devtools/vitest.config.ts
^ This file does not exist, but it's configured, so either add file or remove from config?

Unused exports (1)
setActTimeout  packages/svelte-query-persist-client/src/__tests__/utils.ts:22:17
^ Unused export

@codecov-commenter
Copy link

codecov-commenter commented Nov 29, 2023

Codecov Report

Attention: 1 lines in your changes are missing coverage. Please review.

Comparison is base (f62e079) 86.35% compared to head (85e58e8) 87.74%.
Report is 4 commits behind head on main.

Files Patch % Lines
packages/query-devtools/src/utils.tsx 0.00% 1 Missing ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #6368      +/-   ##
==========================================
+ Coverage   86.35%   87.74%   +1.39%     
==========================================
  Files          87       79       -8     
  Lines        2880     2832      -48     
  Branches      802      796       -6     
==========================================
- Hits         2487     2485       -2     
+ Misses        328      288      -40     
+ Partials       65       59       -6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

I think I've fixed the issue with the @vue/composition-api false positive. It's kinda complicated... In short (comment in Knip code base):

        // A dependency may not be referenced, but it may be a peer dep of another.
        // If that host is also not referenced we'll report this dependency as unused.
        // Except if the host has this dependency as an optional peer dep itself.

That last "except..." line is what's fixed today in v3.3.1 and just added to this PR.

So for now I think from Knip perspective we're good :) Happy to hear any questions or feedback!

@DamianOsipiuk
Copy link
Contributor

@webpro
The only think left is

Referenced optional peerDependencies (1)
react-dom  packages/react-query/package.json

And i think it's false-positive since react-dom is used in tests

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

@webpro The only think left is

Referenced optional peerDependencies (1)
react-dom  packages/react-query/package.json

And i think it's false-positive since react-dom is used in tests

It's reported as an optional peerDependency, but it's referenced. So I think it should not be optional?

@TkDodo
Copy link
Collaborator

TkDodo commented Nov 29, 2023

It's reported as an optional peerDependency, but it's referenced. So I think it should not be optional?

it's optional for consumers because they can also use react-native instead. It's not optional for our tests 🤔

@TkDodo
Copy link
Collaborator

TkDodo commented Nov 29, 2023

not sure what we'd need to change this to?

"peerDependencies": {
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-native": "*"
},
"peerDependenciesMeta": {
"react-dom": {
"optional": true
},
"react-native": {
"optional": true
}
}

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

Ah, now I see it's in devDependencies as well, that's for the tests. Then it should not be reported by Knip I think. I'll look into it!

@DamianOsipiuk
Copy link
Contributor

@TkDodo Well, actually... Why do we list it as peerDependency when we do not use it in code anywhere? It should still work without installing it no? We only need react as peer dep i guess?

@TkDodo
Copy link
Collaborator

TkDodo commented Nov 29, 2023

@DamianOsipiuk yes, I think you're right. We used to have unstable_batchedUpdates from react-dom or react-native respectively, but we don't anymore since v5.

This is such a nice catch - I think we can remove the peerDependency on both react-dom and react-native 🎉

@TkDodo
Copy link
Collaborator

TkDodo commented Nov 29, 2023

here's the v4 link for reference:

import * as ReactDOM from 'react-dom'

@DamianOsipiuk
Copy link
Contributor

DamianOsipiuk commented Nov 29, 2023

@webpro Seems like we are green with minimal config! Awesome 🚀

And the stuff that was found... 🤯

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

This is great, what a nice team effort! 😎

@DamianOsipiuk DamianOsipiuk merged commit 5d29f8f into TanStack:main Nov 29, 2023
@lachlancollins
Copy link
Member

@webpro this is awesome, thanks for contributing! I might have missed something, can I ask why svelte-eslint-parser was added?

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

@webpro this is awesome, thanks for contributing!

My pleasure!

I might have missed something, can I ask why svelte-eslint-parser was added?

If you look up svelte-eslint-parser in the report above you can see why: it's referenced in ESLint config files.

@lachlancollins
Copy link
Member

If you look up svelte-eslint-parser in the report above you can see why: it's referenced in ESLint config files.

Ah I see - it is a dependency of eslint-plugin-svelte so it isn't absolutely necessary, but also doesn't change anything I guess :)

@webpro
Copy link
Contributor Author

webpro commented Nov 29, 2023

I think it's a pretty common best practice to try and not rely on transitive dependencies (https://knip.dev/guides/handling-issues/#unlisted-dependencies)

@webpro webpro deleted the feat/introduce-knip branch November 29, 2023 17:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants