Skip to main content

codetether_rlm/oracle/tree_sitter_oracle/
enums.rs

1use 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    /// Get all enum definitions in the source.
13    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}