Skip to main content

codetether_rlm/oracle/tree_sitter_oracle/
verify.rs

1use crate::oracle::QueryType;
2
3use super::{TreeSitterOracle, TreeSitterVerification};
4
5impl TreeSitterOracle {
6    /// Verify a FINAL() answer against AST truth.
7    pub fn verify(&mut self, answer: &str, query: &str) -> TreeSitterVerification {
8        if Self::classify_query(query) != QueryType::Structural {
9            return TreeSitterVerification::CannotVerify {
10                reason: "Not a structural query".to_string(),
11            };
12        }
13        self.verify_structural(answer, query)
14    }
15
16    fn verify_structural(&mut self, answer: &str, query: &str) -> TreeSitterVerification {
17        let lower = query.to_lowercase();
18        if lower.contains("function") {
19            self.verify_functions(answer)
20        } else if lower.contains("struct") {
21            self.verify_structs(answer)
22        } else if lower.contains("enum") {
23            unimplemented_verification("Enum")
24        } else if lower.contains("impl") {
25            unimplemented_verification("Impl")
26        } else {
27            TreeSitterVerification::CannotVerify {
28                reason: "Unknown structural query type".to_string(),
29            }
30        }
31    }
32}
33
34fn unimplemented_verification(kind: &str) -> TreeSitterVerification {
35    TreeSitterVerification::CannotVerify {
36        reason: format!("{kind} verification not yet implemented"),
37    }
38}