I created a thread here a couple years ago about this. Ultimately it was decided that for diagnostic purposes this is fine, and there's been an open issue for it ever since.
For the purposes of a binary crate, since there's no external interface to put pub symbols in, it might make sense for us to warn about unused items even if they're pub.
The one case I can think of where that might cause issues would be sharing source files between a library and binary crate, but that's usually a bad idea anyway.
Is that true though? If you have a pub extern āCā item (presumably no_mangle as well), that can be used from dlopened libraries that you load, via dlsym. I assume the same will be true in crabi if that happens.
I'm distinguishing here between pub and exported symbols (a property that for instance #[no_mangle] implies, and that we've talked about providing orthogonally to #[no_mangle]).