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
74
75
76
77
//! Node kinds classified as comprehension usage.
//!
//! Python comprehension forms — list comprehensions, set comprehensions,
//! dictionary comprehensions, and generator expressions — are classified here.
//! These constructs are Python-specific; no equivalent dedicated node kind exists
//! in the other supported grammars. Cross-language consumers see an empty bucket
//! for non-Python repos, consistent with how `class_hierarchy` reads empty for Go.
//!
//! ## Count semantics
//!
//! One instance per comprehension node. Nested comprehensions emit one node each —
//! `[x for row in matrix for x in row]` is one `list_comprehension` node (one instance),
//! while `[[x for x in row] for row in matrix]` contains an inner `list_comprehension`
//! nested inside an outer one and emits two instances.
/// Tree-sitter node kinds for comprehension usage.
///
/// All four forms are Python-only in v0:
///
/// - `dictionary_comprehension` — `{k: v for k, v in items}`
/// - `generator_expression` — `(x for x in xs)`, `sum(x*x for x in xs)`
/// - `list_comprehension` — `[x for x in xs]`
/// - `set_comprehension` — `{x for x in xs}`
///
/// # Examples
///
/// ```rust
/// use sdivi_patterns::queries::comprehensions::NODE_KINDS;
///
/// assert!(NODE_KINDS.contains(&"list_comprehension"));
/// assert!(NODE_KINDS.contains(&"set_comprehension"));
/// assert!(NODE_KINDS.contains(&"dictionary_comprehension"));
/// assert!(NODE_KINDS.contains(&"generator_expression"));
/// assert_eq!(NODE_KINDS.len(), 4);
/// ```
pub const NODE_KINDS: & = &;