Auto merge of #99918 - WaffleLapkin:fnFnfun, r=estebank
Recover wrong-cased keywords that start items (_this pr was inspired by [this tweet](https://twitter.com/Azumanga/status/1552982326409367561)_) r? `@estebank` We've talked a bit about this recovery, but I just wanted to make sure that this is the right approach :) For now I've only added the case insensitive recovery to `use`s, since most other items like `impl` blocks, modules, functions can start with multiple keywords which complicates the matter.
This commit is contained in:
commit
5b82ea74b7
10 changed files with 286 additions and 42 deletions
|
@ -29,6 +29,7 @@ extern crate rustc_macros;
|
|||
extern crate tracing;
|
||||
|
||||
pub mod util {
|
||||
pub mod case;
|
||||
pub mod classify;
|
||||
pub mod comments;
|
||||
pub mod literal;
|
||||
|
|
|
@ -5,6 +5,7 @@ pub use TokenKind::*;
|
|||
|
||||
use crate::ast;
|
||||
use crate::ptr::P;
|
||||
use crate::util::case::Case;
|
||||
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
|
@ -615,6 +616,15 @@ impl Token {
|
|||
self.is_non_raw_ident_where(|id| id.name == kw)
|
||||
}
|
||||
|
||||
/// Returns `true` if the token is a given keyword, `kw` or if `case` is `Insensitive` and this token is an identifier equal to `kw` ignoring the case.
|
||||
pub fn is_keyword_case(&self, kw: Symbol, case: Case) -> bool {
|
||||
self.is_keyword(kw)
|
||||
|| (case == Case::Insensitive
|
||||
&& self.is_non_raw_ident_where(|id| {
|
||||
id.name.as_str().to_lowercase() == kw.as_str().to_lowercase()
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn is_path_segment_keyword(&self) -> bool {
|
||||
self.is_non_raw_ident_where(Ident::is_path_segment_keyword)
|
||||
}
|
||||
|
|
6
compiler/rustc_ast/src/util/case.rs
Normal file
6
compiler/rustc_ast/src/util/case.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
/// Whatever to ignore case (`fn` vs `Fn` vs `FN`) or not. Used for recovering.
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
pub enum Case {
|
||||
Sensitive,
|
||||
Insensitive,
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue