harper_core/linting/
boring_words.rs1use crate::{
2 Token, TokenStringExt,
3 patterns::{Pattern, WordPatternGroup},
4};
5
6use super::{Lint, LintKind, PatternLinter};
7
8pub struct BoringWords {
9 pattern: Box<dyn Pattern>,
10}
11
12impl Default for BoringWords {
13 fn default() -> Self {
14 let mut pattern = WordPatternGroup::default();
15
16 pattern.add_word("very");
17 pattern.add_word("interesting");
18 pattern.add_word("several");
19 pattern.add_word("most");
20 pattern.add_word("many");
21
22 Self {
23 pattern: Box::new(pattern),
24 }
25 }
26}
27
28impl PatternLinter for BoringWords {
29 fn pattern(&self) -> &dyn Pattern {
30 self.pattern.as_ref()
31 }
32
33 fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {
34 let matched_word = matched_tokens.span()?.get_content_string(source);
35
36 Some(Lint {
37 span: matched_tokens.span()?,
38 lint_kind: LintKind::Enhancement,
39 suggestions: vec![],
40 message: format!(
41 "“{}” is a boring word. Try something a little more exotic.",
42 matched_word
43 ),
44 priority: 127,
45 })
46 }
47
48 fn description(&self) -> &'static str {
49 "This rule looks for particularly boring or overused words. Using varied language is an easy way to keep a reader's attention."
50 }
51}