Skip to main content

synaptic_splitters/
language.rs

1/// Programming language for language-aware text splitting.
2#[derive(Debug, Clone, Copy)]
3pub enum Language {
4    Python,
5    JavaScript,
6    TypeScript,
7    Rust,
8    Go,
9    Java,
10    Cpp,
11    Ruby,
12    Markdown,
13    Latex,
14    Html,
15}
16
17impl Language {
18    /// Get the hierarchical separators for this language.
19    pub fn separators(&self) -> Vec<String> {
20        match self {
21            Language::Python => vec![
22                "\nclass ".to_string(),
23                "\ndef ".to_string(),
24                "\n\tdef ".to_string(),
25                "\n\n".to_string(),
26                "\n".to_string(),
27                " ".to_string(),
28                String::new(),
29            ],
30            Language::JavaScript => vec![
31                "\nfunction ".to_string(),
32                "\nconst ".to_string(),
33                "\nlet ".to_string(),
34                "\nvar ".to_string(),
35                "\nclass ".to_string(),
36                "\n\n".to_string(),
37                "\n".to_string(),
38                " ".to_string(),
39                String::new(),
40            ],
41            Language::TypeScript => vec![
42                "\nfunction ".to_string(),
43                "\nconst ".to_string(),
44                "\nlet ".to_string(),
45                "\nvar ".to_string(),
46                "\nclass ".to_string(),
47                "\ninterface ".to_string(),
48                "\ntype ".to_string(),
49                "\nenum ".to_string(),
50                "\n\n".to_string(),
51                "\n".to_string(),
52                " ".to_string(),
53                String::new(),
54            ],
55            Language::Rust => vec![
56                "\nfn ".to_string(),
57                "\nstruct ".to_string(),
58                "\nimpl ".to_string(),
59                "\nenum ".to_string(),
60                "\nmod ".to_string(),
61                "\ntrait ".to_string(),
62                "\n\n".to_string(),
63                "\n".to_string(),
64                " ".to_string(),
65                String::new(),
66            ],
67            Language::Go => vec![
68                "\nfunc ".to_string(),
69                "\ntype ".to_string(),
70                "\n\n".to_string(),
71                "\n".to_string(),
72                " ".to_string(),
73                String::new(),
74            ],
75            Language::Java => vec![
76                "\nclass ".to_string(),
77                "\npublic ".to_string(),
78                "\nprotected ".to_string(),
79                "\nprivate ".to_string(),
80                "\nstatic ".to_string(),
81                "\n\n".to_string(),
82                "\n".to_string(),
83                " ".to_string(),
84                String::new(),
85            ],
86            Language::Cpp => vec![
87                "\nclass ".to_string(),
88                "\nvoid ".to_string(),
89                "\nint ".to_string(),
90                "\nfloat ".to_string(),
91                "\n\n".to_string(),
92                "\n".to_string(),
93                " ".to_string(),
94                String::new(),
95            ],
96            Language::Ruby => vec![
97                "\ndef ".to_string(),
98                "\nclass ".to_string(),
99                "\nmodule ".to_string(),
100                "\n\n".to_string(),
101                "\n".to_string(),
102                " ".to_string(),
103                String::new(),
104            ],
105            Language::Markdown => vec![
106                "\n## ".to_string(),
107                "\n### ".to_string(),
108                "\n#### ".to_string(),
109                "\n\n".to_string(),
110                "\n".to_string(),
111                " ".to_string(),
112                String::new(),
113            ],
114            Language::Latex => vec![
115                "\n\\chapter{".to_string(),
116                "\n\\section{".to_string(),
117                "\n\\subsection{".to_string(),
118                "\n\n".to_string(),
119                "\n".to_string(),
120                " ".to_string(),
121                String::new(),
122            ],
123            Language::Html => vec![
124                "<div".to_string(),
125                "<p".to_string(),
126                "<br".to_string(),
127                "<li".to_string(),
128                "<h1".to_string(),
129                "<h2".to_string(),
130                "<h3".to_string(),
131                "<table".to_string(),
132                "<tr".to_string(),
133                "\n\n".to_string(),
134                "\n".to_string(),
135                " ".to_string(),
136                String::new(),
137            ],
138        }
139    }
140}