use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) enum Kind {
Class,
Module,
Method,
Function,
Struct,
Enum,
Trait,
}
impl Kind {
pub(crate) fn as_str(self) -> &'static str {
match self {
Kind::Class => "class",
Kind::Module => "module",
Kind::Method => "method",
Kind::Function => "function",
Kind::Struct => "struct",
Kind::Enum => "enum",
Kind::Trait => "trait",
}
}
}
impl fmt::Display for Kind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct Symbol {
pub name: String,
pub kind: Kind,
pub language: String,
pub file: String,
pub line: u32,
pub end_line: u32,
pub parent: Option<String>,
pub visibility: Option<&'static str>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn kind_tag_is_stable_and_lowercase() {
assert_eq!(Kind::Class.as_str(), "class");
assert_eq!(Kind::Module.to_string(), "module");
assert_eq!(Kind::Method.as_str(), "method");
assert_eq!(Kind::Function.as_str(), "function");
assert_eq!(Kind::Struct.as_str(), "struct");
assert_eq!(Kind::Enum.as_str(), "enum");
assert_eq!(Kind::Trait.as_str(), "trait");
}
}