use tree_sitter::Node;
use crate::error::Result;
use crate::types::{Chunk, ChunkKind, FileHash, Language, RelativePath};
use super::chunk_with_grammar;
pub(super) fn chunk(path: &RelativePath, file_hash: FileHash, content: &str) -> Result<Vec<Chunk>> {
chunk_with_grammar(
tree_sitter_c_sharp::LANGUAGE.into(),
"C#",
path,
Language::CSharp,
file_hash,
content,
csharp_chunk_kind,
)
}
fn csharp_chunk_kind(node: Node<'_>) -> Option<ChunkKind> {
match node.kind() {
"namespace_declaration" => Some(ChunkKind::Module),
"class_declaration" | "record_declaration" => Some(ChunkKind::Class),
"interface_declaration" => Some(ChunkKind::Interface),
"struct_declaration" => Some(ChunkKind::Struct),
"enum_declaration" => Some(ChunkKind::Enum),
"method_declaration" | "constructor_declaration" | "property_declaration" => {
Some(ChunkKind::Method)
}
_ => None,
}
}