codeprism_lang_rust/
adapter.rs1use crate::parser::{ParseContext as RustParseContext, RustParser};
4use crate::types as rust_types;
5
6pub struct RustLanguageParser {
8 parser: std::sync::Mutex<RustParser>,
9}
10
11impl RustLanguageParser {
12 pub fn new() -> Self {
14 Self {
15 parser: std::sync::Mutex::new(RustParser::new()),
16 }
17 }
18}
19
20impl Default for RustLanguageParser {
21 fn default() -> Self {
22 Self::new()
23 }
24}
25
26pub trait ParseResultConverter {
29 type Node;
30 type Edge;
31 type ParseResult;
32
33 fn convert_node(node: rust_types::Node) -> Self::Node;
34 fn convert_edge(edge: rust_types::Edge) -> Self::Edge;
35 fn create_parse_result(
36 tree: tree_sitter::Tree,
37 nodes: Vec<Self::Node>,
38 edges: Vec<Self::Edge>,
39 ) -> Self::ParseResult;
40}
41
42pub fn parse_file(
44 parser: &RustLanguageParser,
45 repo_id: &str,
46 file_path: std::path::PathBuf,
47 content: String,
48 old_tree: Option<tree_sitter::Tree>,
49) -> Result<
50 (
51 tree_sitter::Tree,
52 Vec<rust_types::Node>,
53 Vec<rust_types::Edge>,
54 ),
55 crate::error::Error,
56> {
57 let context = RustParseContext {
58 repo_id: repo_id.to_string(),
59 file_path,
60 old_tree,
61 content,
62 };
63
64 let mut parser = parser.parser.lock().unwrap();
65 let result = parser.parse(&context)?;
66
67 Ok((result.tree, result.nodes, result.edges))
68}