Cam McHenry
Cam McHenry
@camchenry.com
dad | software engineer @github.com | core team member of oxc.rs | ✝️
565 followers321 following147 posts
A brief update (since I realized I haven't posted an update on this in 3 months): I'm still working on this when I have time. It's gotten significantly better lately: on the ~8200 files the TS conformance suite has, it matches on 85.6% of types, and on 97.69% of assignability checks.
Okay here's my bad idea github.com/camchenry/ox...
Since this is a side project, there's no real deadlines or milestones. Once it hits 90%+ type matches though, I think I'll consider publishing to crates.io and improving the public APIs so people could try it.
Okay here's my bad idea github.com/camchenry/ox...
Against my better judgment, I have started a side project that is probably impossible to achieve practically. I'm gonna try anyway. Hopefully I will learn a lot 😅
Cam McHenry reposted
Speeding up the JS ecosystem OXC edition 🚀 We made both oxfmt and oxlint 50% faster on projects with >50k directories. marvinh.dev/blog/speedin...
oxlint now supports 100%* of the eslint-plugin-jsx-a11y rules! final rules will be in the next release. github.com/oxc-project/...
Cam McHenry reposted
Really interesting research from auvred on type-aware linting: github.com/auvred/hybri... This is the next frontier for developer tooling: cross-language interoperability and finding the right tradeoffs to make for extensibility/performance.
Thank you @andrewbran.ch for upstreaming some perf optimization from tsgolint! github.com/microsoft/ty... I guess this counts as my first typescript-go contribution? 😅
Cam McHenry reposted
Try it out!
Announcing Oxlint Type-Aware Linting Alpha 🎁 Just a few months after our technical preview, type-aware linting reaches the alpha milestone! ✨ Type-aware rules can now be configured 🙈 Inline comments to disable rules work for type-aware rules too ✔ Auto fixes for type-aware rules are now available
Cam McHenry reposted
Announcing Oxfmt: Oxc Formatter Alpha oxc.rs/blog/2025-1...
This has been in the works for a few months now! Excited for more people to try this out when it supports config options. A special thanks to the @typescript-eslint.io team who have set the standard for typed lint rules here. Much of this work is based on what has come before and on their rules.
Thank you @camchenry.com for the long development of configuring type-aware rules! tsgolint alpha soon! github.com/oxc-project/...
Cam McHenry reposted
Replying to @connorshea.bsky.social
So I started working on it in the evenings when I had time, and last week while I was off work for a week (recovering from eye surgery), in between naps I worked through most of the rule updates. So now almost all of them have documentation for their config options :) github.com/oxc-project/...
Cam McHenry reposted
I had been exploring ESLint alternatives and was bothered by the lack of consistent documentation for rule configs in oxlint. So I opened an issue about it and talked with the maintainers about the right way to solve it, and found out there was a system for auto-generating documentation with types.
Cam McHenry reposted
Cam McHenry reposted
Does anyone have experience with tools for benchmarking on every PR for Go projects? I'm looking to get a rough estimate of perf regressions/improvements in each PR for github.com/oxc-project/.... Looking into building something custom with `go tool pprof` currently.
On my laptop, oxlint 1.24 is 3% faster than 1.23 on the `vscode` repository, with even larger improvements for very large codebases. That means if you haven't updated to one of the latest versions in a few weeks, your linting step could be >10% slower than it should be!
Oxlint 1.23.0 just got released, which includes the latest in some of the performance optimization work I've been doing. Running on the vscode repository on my M1 laptop, 1.23.0 is ~7-9% faster than previous versions of oxlint with no changes other than just bumping the dependency.
Cam McHenry reposted
Big up to new #oxc contributor @arsh.sh, who showed up out of nowhere and is tearing through our issue list! He's just implemented support for all the comment-based APIs in Oxlint JS plugins. github.com/oxc-project/...
Just finished writing up an auto-fix for this in Oxlint, in case this was a blocker for anyone: github.com/oxc-project/...
I like this new lint rule 👏 Don't rethrow JS errors without a cause!
First of these optimizations rolled out in v1.15.0 with a reduced scope. Next version of oxlint will be even faster: github.com/oxc-project/... On my laptop: ~15% faster on `oven-sh/bun`, ~9% faster on `microsoft/vscode`, ~11% faster on `posthog/posthog`, and ~8% faster on `elastic/kibana`
Trying some new oxlint optimizations. This PR has gone over several iterations in the last few months and the core idea is simple: don't run rules for files if they don't apply (using an AST node bitset lookup). The result: linting is around 15% faster in practice.
Cam McHenry reposted
VoidZero x SquiggleConf: Win a ticket! VoidZero is a proud sponsor of this year's @squiggleconf.com on September 18th and 19th in Boston. We've got an extra ticket for the event and want to give it away to one of you so you can join us there! Learn in this thread how you can enter the raffle 👇
github.com/oxc-project/... Note that this is still very much a work in progress. Probably won't be merged for a bit as the hard part is ensuring correctness when skipping rules.
Cam McHenry reposted
Cool to see more tsgo-based linters! I think best practices here are not known yet, so it is great to see more teams innovating on this.
We have a new member in the Rstack family 🦀 Introducing Rslint - a TypeScript-first linter written in Go (powered by typescript-go, not Rust 🙃) Currently in experimental stage - check out the repo's README for more details: github.com/web-infra-de...
Just had a listen to this, it's well worth listening to catch up on the current state of JS linting, as Josh has lots of experience from working on ts-eslint. Lots of innovation happening in linting currently Overall, I think right now is a great time to learn more about linting, parsing, and ASTs.
This is one of my favorite podcast episodes I've ever been on. I love this conversation and the points covered: linting in 2025, performance vs. devX tradeoffs, and all sorts of interesting dives into architectures. If you never thought you should care about your linter, this will blow your mind! 🧠
First version is out! It's still pretty experimental, but we will keep improving performance and fixing bugs with each version. Most importantly though: you can use it now!
`oxlint --type-aware`. Mic drop. It's incomplete and have numerous problems, including a noticeable performance issue. BUT, you can finally see your floating promises quickly! Example PR: github.com/rolldown/rol... Problems: t.co/K7ZVnPjOPL
Cam McHenry reposted
`oxlint --type-aware`. Mic drop. It's incomplete and have numerous problems, including a noticeable performance issue. BUT, you can finally see your floating promises quickly! Example PR: github.com/rolldown/rol... Problems: t.co/K7ZVnPjOPL
It's been great to work on prototyping this! I'm really excited by typescript-go and looking forward to getting this released as soon as we can. The future is fast ⚡️
oxlint + tsgolint = no slow down! no-floating-promises completes 4.4k files in 3.2 seconds, in the vscode repo. typescript-go is the future, all credits to the ts-go team! We just glued everything together 😀 github.com/microsoft/ty...
Cam McHenry reposted
I am permitted to host tsgolint in Oxc and explore type aware linting! I am super excited! We reduced the original scope of tsgolint to be a backend for oxlint, taking the best out of both worlds! github.com/oxc-project/...