Does this have support (or is there a plan to have support) for something similar to knip plugins? For example, a webpack.config.js file might import some packages or files, and the knip webpack plugin is able to parse it to understand these dependencies, and feed that information back into all the checks (e.g. unused files, undeclared package.json dependencies, etc.).
Just curious. It's great to have a performance-focused option in this space either way!
Not yet, currently it supports typescript path aliases and ESM imports/exports map. So industry standard I would say.
I don't think making plugins system is feasible because project focuses on performance. It's build in Go, so compiled language, so it's not easy to extend it like you can with JavaScript based tools.
But definitely I would like to support some reasonable amount of leading frameworks/build tools if they define some syntax / resolving mechanism that is beyond ESM specification.
I prefer to have unused code detected during linting, but sadly, eslint has decided to kill off the APIs that support rules like `no-unused-modules`. Running a separate tool like this one or knip in place of a few lint rules just seems impractical.
eslint is a good example of why coding in javascript is annoying. Your tools just constantly changing wildly over a version upgrade, so you look for a better one and find there's a new Rust linting tool but it's alpha and is missing half the features.
+1 for the idea. Enforcing hard boundaries between is surprisingly helpful for AIs to reason about how to structure their changes.
We recently rolled out our own static analysis using oxc-parser and oxc-resolver, and it runs surprisingly fast (<1s for ~100K LOC). For us, it was definitely worth adding this layer of defence against The Slop.
Nice!
I’ve come to similar conclusions recently, with the recent increase in code changes velocity, solid static analysis is more important than ever.
When it comes to the performance, I've learned that reading code from file system and parsing it takes most of the time. Then resolving modules takes a little also.
Once that is done, running different checks is almost instant - like miliseconds.
astegmaier|2 days ago
Just curious. It's great to have a performance-focused option in this space either way!
jayu_dev|14 hours ago
I don't think making plugins system is feasible because project focuses on performance. It's build in Go, so compiled language, so it's not easy to extend it like you can with JavaScript based tools.
But definitely I would like to support some reasonable amount of leading frameworks/build tools if they define some syntax / resolving mechanism that is beyond ESM specification.
silverwind|3 days ago
dmix|3 days ago
skybrian|3 days ago
jayu_dev|3 days ago
But if it won't work feel free to open issue on GH :)
esafak|3 days ago
e1g|3 days ago
We recently rolled out our own static analysis using oxc-parser and oxc-resolver, and it runs surprisingly fast (<1s for ~100K LOC). For us, it was definitely worth adding this layer of defence against The Slop.
jayu_dev|3 days ago
When it comes to the performance, I've learned that reading code from file system and parsing it takes most of the time. Then resolving modules takes a little also.
Once that is done, running different checks is almost instant - like miliseconds.