I think the rust compiler kind of does this: https://mobile.twitter.com/hmemcpy/status/115189096847766732...
Only a partial set, though: https://github.com/rust-lang/rust/blob/master/compiler/rustc...
That's only the lexer check. We have further lints that run after parsing to detect Unicode confusables in identifiers as well, as well as two lints for text flow codepoints that can change what the code looks like in editors (one for comments and one for string literals).
Yeah, but Rust does it properly by following UTS-39, and not blindly checking for just confusable matches.
Ooh, good job, Rust!
So you scroll through source code and hit this weirdly spaced line with a big "h" character and go-- oh-- that's some buggy crap in there.
Then maybe have a map for ranges that you want to include in your allowable set, and we're all good to go. :)