mod over_theyre_to_there;
mod typographic_theyre_to_their;
use crate::Token;
use crate::char_ext::CharExt;
use crate::char_string::CharStringExt;
use super::merge_linters::merge_linters;
use over_theyre_to_there::OverTheyreToThere;
use typographic_theyre_to_their::TypographicTheyreToTheir;
fn token_is_theyre(token: &Token, source: &[char]) -> bool {
if !token.kind.is_word() {
return false;
}
token.get_ch(source).normalized().eq_str("they're")
}
fn token_is_typographic_theyre(token: &Token, source: &[char]) -> bool {
if !token.kind.is_word() {
return false;
}
let content = token.get_ch(source);
content.iter().any(|c| c.normalized() != *c) && content.normalized().eq_str("they're")
}
fn token_is_likely_their_possession(token: &Token, source: &[char]) -> bool {
if !token.kind.is_word() {
return false;
}
let normalized = token.get_ch(source).normalized();
matches!(
normalized.as_ref(),
['b', 'a', 'c', 'k', 'p', 'a', 'c', 'k', 's']
| ['p', 'a', 't', 'i', 'e', 'n', 'c', 'e']
| ['d', 'o', 'g']
| ['p', 'r', 'o', 'p', 'o', 's', 'a', 'l']
| ['l', 'a', 'u', 'g', 'h', 't', 'e', 'r']
| ['l', 'a', 'd', 'd', 'e', 'r']
| ['a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't']
| ['m', 'i', 't', 't', 'e', 'n', 's']
| ['a', 'n', 's', 'w', 'e', 'r']
| ['s', 'k', 'e', 't', 'c', 'h', 'e', 's']
| ['s', 'e', 'r', 'v', 'e', 'r']
| ['b', 'a', 'c', 'k', 'u', 'p']
| ['e', 'v', 'i', 'd', 'e', 'n', 'c', 'e']
| ['g', 'a', 'r', 'd', 'e', 'n']
| ['m', 'a', 'p', 's']
| ['t', 'e', 'a', 'm']
| ['p', 'a', 's', 't']
| ['n', 'e', 'e', 'd', 's']
| ['p', 'a', 'w', 'n']
| ['a', 'b', 'i', 'l', 'i', 't', 'y']
| ['r', 'e', 't', 'u', 'r', 'n']
| ['h', 'e', 'a', 'r', 'i', 'n', 'g']
| ['h', 'o', 'u', 's', 'e']
| ['c', 'o', 'a', 't', 's']
| ['p', 'r', 'o', 'b', 'l', 'e', 'm', 's']
| [
'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 'i', 'n', 'g'
]
| ['n', 'e', 'w']
)
}
merge_linters!(
TheyreConfusions => OverTheyreToThere, TypographicTheyreToTheir =>
"Detects apostrophe and locative edge cases that are awkward to model with standard contraction checks."
);