rust-lang / rust-clippy

A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/
https://rust-lang.github.io/rust-clippy/
Other
11.44k stars 1.54k forks source link

Spell checking #2508

Open gnzlbg opened 6 years ago

gnzlbg commented 6 years ago

It would be nice if clippy could be able to spell-check comments, identifiers, ...

Previous work here: https://github.com/huonw/spellck

birkenfeld commented 6 years ago

Please make this opt-in. The "Add backticks here" lint is already annoying enough.

gnzlbg commented 6 years ago

I think that once this lint works properly it should be opt-out, but in any case some lints being annoying to some people is something that should be solved by https://github.com/rust-lang-nursery/rust-clippy/issues/1313

oli-obk commented 6 years ago

Spell checking is hard. Especially with identifiers. If I turn on a spell checker on my code I get squiggly lines everywhere for stuff like ident, expr, ... I'd be fine with a restriction lint though

gnzlbg commented 6 years ago

@oli-obk I think one should start with spell checking documentation comments. If a word is incorrectly typed in a comment, we can then check whether its an identifier in the code, and not emit a diagnostic. But spelling errors in documentation comments are annoying.

Spell checking identifiers should be done with great care, and probably will remain opt-in forever. Some people prefer idx over index and that should be alright, but imdex should probably raise a spell checker warning about meaning index instead. @huonw solved this by allowing the user to white-list words, but that's a lot of work.

oli-obk commented 6 years ago

Well we can skip text in backticks. And since one should be placing identifiers in backticks, they aren't linted in doc comments.

clarfonthey commented 6 years ago

I think that spelling isn't a huge issue considering how variable typos are compile errors, rather than runtime errors. Sure, I'd have loved this for the times when I was developing in PHP and didn't notice the difference between $receive and $recieve, but in Rust, the compiler itself already fuzzes the missing references to provide suggestions.

For docs, it might be useful, but it should ignore items in backticks.