1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! `Checker` implementation for Mozilla C++.
#![allow(clippy::wildcard_imports, clippy::enum_glob_use)]
use super::*;
impl Checker for MozcppCode {
fn is_comment(node: &Node) -> bool {
node.kind_id() == Mozcpp::Comment
}
fn is_useful_comment(node: &Node, code: &[u8]) -> bool {
get_aho_corasick_match(&code[node.start_byte()..node.end_byte()])
}
// Issue #285 contract: every `Mozcpp::FunctionDefinition*` alias must
// be enumerated here AND in `is_func`, `get_func_space_name`, and
// `get_space_kind` (see `src/getter.rs`). Aliased kind_ids
// 489/491/494 are not emitted by the currently pinned
// `tree-sitter-mozcpp` parse tables on any input we can construct,
// so a missing variant won't fail a parse-and-assert test — it
// will silently drop those nodes from FuncSpace creation the next
// time a grammar bump starts emitting them (see lesson 2 in
// `docs/development/lessons_learned.md`).
fn is_func_space(node: &Node) -> bool {
matches!(
node.kind_id().into(),
Mozcpp::TranslationUnit
| Mozcpp::FunctionDefinition
| Mozcpp::FunctionDefinition2
| Mozcpp::FunctionDefinition3
| Mozcpp::FunctionDefinition4
| Mozcpp::StructSpecifier
| Mozcpp::ClassSpecifier
| Mozcpp::NamespaceDefinition
)
}
// Issue #285 contract: keep this in sync with `is_func_space` and
// the C++ getters — see comment above `is_func_space`.
fn is_func(node: &Node) -> bool {
matches!(
node.kind_id().into(),
Mozcpp::FunctionDefinition
| Mozcpp::FunctionDefinition2
| Mozcpp::FunctionDefinition3
| Mozcpp::FunctionDefinition4
)
}
fn is_closure(node: &Node) -> bool {
node.kind_id() == Mozcpp::LambdaExpression
}
fn is_call(node: &Node) -> bool {
node.kind_id() == Mozcpp::CallExpression
}
fn is_non_arg(node: &Node) -> bool {
matches!(
node.kind_id().into(),
Mozcpp::LPAREN | Mozcpp::LPAREN2 | Mozcpp::COMMA | Mozcpp::RPAREN
)
}
impl_simple_is_string!(Mozcpp, StringLiteral, ConcatenatedString, RawStringLiteral);
impl_is_else_if_parent_clause!(Mozcpp, IfStatement, ElseClause);
#[inline]
fn is_primitive(node: &Node) -> bool {
node.kind_id() == Mozcpp::PrimitiveType
}
}