contributing to rustc

2026-11-01

word count: 565

approx reading time: 3 mins

without exaggeration, ive been using rust for longer than i've been myself. even though i dont use it professionally, its been my go-to language for side projects, from gamedev (shoutout bevy) to webdev (shoutout axum and sqlx), to any other bullshit i can conjure up, like playing around with optics.

but ive never contributed to rust itself, like to the compiler or cargo or clippy. its always felt almost sacred, like it's the work of programming demigods. obviously, i know its not true. logically, i am aware that rustc is a program like any other, but emotionally, working on it is daunting. idk, it's scary! what if i open a pr and it's bad! everyone will know i'm not good. yk, the usual prisons of our own making.

but this month i went to eurorust! it was a lovely experience, and i got to talk to a lot of very cool people, among them a bunch of the hexcat/rustnl people, who, in kinder words, told me to stop being an idiot and that contributing is actually pretty easy. jana and jonathan especially were very encouraging.

jonathan sent me an easy issue to get started with, and ive now opened a pr on rust1! it improves diagnostics when a lint attribute (like #[allow()] or #[deny()]) has a literal as an argument, which is not correct. so for example, #[allow("meow")] goes from:

error[E0452]: malformed lint attribute input
 --> main.rs:5:9
  |
5 | #[allow("meow")]
  |         ^^^^^^ bad attribute argument

to:

error: expected path to a lint, found literal
 --> main.rs:5:9
  |
5 | #[allow("meow")]
  |         ^^^^^^ not a lint
  |
  = help: try using `#[allow(meow)]`

yay! isn't that so much nicer :D

it all feels a bit silly :3 its not a particularly hard change or anything, but it did take me a few hours of looking through the dev docs book, looking thru the code for this specific diagnostic, and looking at how other diagnostics for attributes like derive work. i got stuck for 20 mins on how to get logs working, since i added a println! which did nothing, and then a tracing::debug! which also did nothing. turns out i put my prints in a code branch that wasn't running. oops. im a bit rusty

i decided to not use llms at all for this. im doing this for fun more than for any extrinsic goal, so using the big automation machine would automate all my fun away, and then at that point what am i doing, yk?

and lowk i am rusty, but i'm way less rusty than i expected to be! all my debugging and code understanding skills came back to me really quick, which is a welcome surprise.

i had to go through pr review and after a few changes it got merged :D i'm really happy with myself.

on another note

for quite a bit of time now, ive missed being part of something bigger, working elbow to elbow with others in order to achieve something thats more than any one of us could do or think of. i get a bit of this at work, but i think something is missing there.

at work, most people are there just to get paid, not because they are extremely passionate about what we are building. which is fair enough! i dont want to force people to be in love with the company, and it can create power imbalances. but it means that it doesnt scratch this itch i have.

and its silly cause ive done almost nothing, but working on this pr does scratch that itch. which makes a lot of sense tbh.

separator line, for decoration