1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
mod reserved_word;
pub use reserved_word::ReservedWord;
mod list;
pub(crate) use list::RESERVED_WORDS;

/// Returns a `ReservedWord` for a given string slice.
///
/// Returns `None` if given word is not a reserved word in Ruby.
pub fn reserved_word(tok: &[u8]) -> Option<&'static ReservedWord> {
    let bucket = RESERVED_WORDS.get(tok.len())?;
    let idx = bucket
        .binary_search_by(|e| e.name.as_bytes().cmp(tok))
        .ok()?;

    Some(&bucket[idx])
}