codetether_rlm/oracle/tree_sitter_oracle/
enums.rs1use anyhow::Result;
2
3use super::{EnumDefinition, TreeSitterOracle, extract};
4
5const ENUMS_QUERY: &str = r#"
6(enum_item
7 name: (type_identifier) @name
8 body: (enum_variant_list)? @body)
9"#;
10
11impl TreeSitterOracle {
12 pub fn get_enums(&mut self) -> Result<Vec<EnumDefinition>> {
14 let result = self.query(ENUMS_QUERY)?;
15 result.matches.into_iter().map(enum_definition).collect()
16 }
17}
18
19fn enum_definition(m: super::AstMatch) -> Result<EnumDefinition> {
20 let body = m.captures.get("body").cloned().unwrap_or_default();
21 Ok(EnumDefinition {
22 name: m.captures.get("name").cloned().unwrap_or_default(),
23 variants: extract::enum_variants(&body)?,
24 line: m.line,
25 })
26}