-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy pathgetter.rs
111 lines (97 loc) · 3.05 KB
/
getter.rs
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
use tree_sitter::Node;
use crate::enums::NodeKind;
use crate::*;
pub trait Getter {
fn get_func_name<'a>(node: &Node, code: &'a [u8]) -> Option<&'a str> {
Self::get_func_space_name(node, code)
}
fn get_func_space_name<'a>(node: &Node, code: &'a [u8]) -> Option<&'a str> {
// we're in a function or in a class
if let Some(name) = node.child_by_field_name("name") {
let code = &code[name.start_byte()..name.end_byte()];
std::str::from_utf8(code).ok()
} else {
Some("<anonymous>")
}
}
fn get_kind(_node: &Node) -> NodeKind {
NodeKind::Unknown
}
}
impl Getter for PythonCode {
fn get_kind(node: &Node) -> NodeKind {
let typ = node.kind_id();
match typ.into() {
Python::FunctionDefinition => NodeKind::Function,
Python::ClassDefinition => NodeKind::Class,
Python::Module => NodeKind::Unit,
_ => NodeKind::Unknown,
}
}
}
impl Getter for MozjsCode {
fn get_kind(node: &Node) -> NodeKind {
use Mozjs::*;
let typ = node.kind_id();
match typ.into() {
Function | GeneratorFunction | FunctionDeclaration | GeneratorFunctionDeclaration => {
NodeKind::Function
}
Class | ClassDeclaration => NodeKind::Class,
Program => NodeKind::Unit,
_ => NodeKind::Unknown,
}
}
}
impl Getter for JavascriptCode {
fn get_kind(node: &Node) -> NodeKind {
use Javascript::*;
let typ = node.kind_id();
match typ.into() {
Function | GeneratorFunction | FunctionDeclaration | GeneratorFunctionDeclaration => {
NodeKind::Function
}
Class | ClassDeclaration => NodeKind::Class,
Program => NodeKind::Unit,
_ => NodeKind::Unknown,
}
}
}
impl Getter for TypescriptCode {
fn get_kind(node: &Node) -> NodeKind {
use Typescript::*;
let typ = node.kind_id();
match typ.into() {
Function | GeneratorFunction | FunctionDeclaration | GeneratorFunctionDeclaration => {
NodeKind::Function
}
Class | ClassDeclaration => NodeKind::Class,
Program => NodeKind::Unit,
_ => NodeKind::Unknown,
}
}
}
impl Getter for TsxCode {
fn get_kind(node: &Node) -> NodeKind {
use Tsx::*;
let typ = node.kind_id();
match typ.into() {
Function | GeneratorFunction | FunctionDeclaration | GeneratorFunctionDeclaration => {
NodeKind::Function
}
Class | ClassDeclaration => NodeKind::Class,
Program => NodeKind::Unit,
_ => NodeKind::Unknown,
}
}
}
impl Getter for PreprocCode {}
impl Getter for CcommentCode {}
impl Getter for CCode {}
impl Getter for CppCode {}
impl Getter for CSharpCode {}
impl Getter for JavaCode {}
impl Getter for GoCode {}
impl Getter for CssCode {}
impl Getter for HtmlCode {}
impl Getter for RustCode {}