1use harper_core::parsers::{self, Parser, PlainEnglish};
2use harper_core::{Token, TokenKind};
3use harper_tree_sitter::TreeSitterMasker;
4use tree_sitter::Node;
5
6pub struct HtmlParser {
7 inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,
9}
10
11impl HtmlParser {
12 fn node_condition(n: &Node) -> bool {
13 n.kind() == "text"
14 }
15}
16
17impl Default for HtmlParser {
18 fn default() -> Self {
19 Self {
20 inner: parsers::Mask::new(
21 TreeSitterMasker::new(tree_sitter_html::LANGUAGE.into(), Self::node_condition),
22 PlainEnglish,
23 ),
24 }
25 }
26}
27
28impl Parser for HtmlParser {
29 fn parse(&self, source: &[char]) -> Vec<Token> {
30 let mut tokens = self.inner.parse(source);
31
32 for token in &mut tokens {
33 if let TokenKind::Space(v) = &mut token.kind {
34 *v = (*v).clamp(0, 1);
35 }
36 }
37
38 tokens
39 }
40}