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
//! Node kinds classified as decorator usage.
//!
//! Detects TypeScript and JavaScript decorator syntax (`@Injectable()`,
//! `@Component({...})`, `@Get('/')`, `@IsString()`, etc.) via the `decorator`
//! node kind, and Python decorator syntax (`@dataclass`, `@app.get(...)`,
//! `@pytest.fixture`) via the `decorated_definition` node kind. Detection is
//! node-kind only — no callee allowlist is applied.
//!
//! ## Count semantics
//!
//! TypeScript/JavaScript: one instance **per decorator** (`decorator` node) —
//! three stacked `@`-lines on one class = three instances.
//!
//! Python: one instance **per decorated function or class**
//! (`decorated_definition` wrapper node) — three stacked `@`-lines on one
//! function = **one** instance. This v0 simplification is intentional; see
//! `docs/pattern-categories.md` for the rationale and future-alignment note.
/// Tree-sitter node kinds for decorator usage.
///
/// Two node kinds are classified here:
///
/// - `decorator` — TypeScript/JavaScript `@`-syntax (tree-sitter-typescript
/// and tree-sitter-javascript Stage-3 proposals). One instance per decorator
/// line.
/// - `decorated_definition` — Python `@`-decorated function or class wrapper
/// (tree-sitter-python). One instance per decorated function/class definition,
/// regardless of how many `@`-lines are stacked above it.
///
/// # Examples
///
/// ```rust
/// use sdivi_patterns::queries::decorators::NODE_KINDS;
///
/// assert!(NODE_KINDS.contains(&"decorator"));
/// assert!(NODE_KINDS.contains(&"decorated_definition"));
/// ```
pub const NODE_KINDS: & = &;