1use serde::Serialize;
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
5#[serde(rename_all = "snake_case")]
6pub enum SymbolKind {
7 Function,
8 Class,
9 Method,
10 Struct,
11 Interface,
12 Enum,
13 TypeAlias,
14 Variable,
16 Heading,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct Range {
27 pub start_line: u32,
28 pub start_col: u32,
29 pub end_line: u32,
30 pub end_col: u32,
31}
32
33impl serde::Serialize for Range {
34 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
35 use serde::ser::SerializeStruct;
36 let mut s = serializer.serialize_struct("Range", 4)?;
37 s.serialize_field("start_line", &(self.start_line + 1))?;
38 s.serialize_field("start_col", &(self.start_col + 1))?;
39 s.serialize_field("end_line", &(self.end_line + 1))?;
40 s.serialize_field("end_col", &(self.end_col + 1))?;
41 s.end()
42 }
43}
44
45#[derive(Debug, Clone, Serialize)]
47pub struct Symbol {
48 pub name: String,
49 pub kind: SymbolKind,
50 pub range: Range,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub signature: Option<String>,
54 pub scope_chain: Vec<String>,
56 pub exported: bool,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub parent: Option<String>,
61}
62
63#[derive(Debug, Clone, Serialize)]
65pub struct SymbolMatch {
66 pub symbol: Symbol,
67 pub file: String,
68}