pedant_types/resolution/
reference.rs1use std::sync::Arc;
4
5use serde::{Deserialize, Serialize};
6
7use crate::Language;
8
9use super::id::{DefinitionId, ReferenceId, ResolutionUnitId};
10use super::span::SourceSpan;
11
12#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
14#[serde(rename_all = "snake_case")]
15pub enum ReferenceKind {
16 Module,
18 Import,
20 Call,
22 Type,
24 Implementation,
26}
27
28#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
33#[serde(deny_unknown_fields)]
34pub struct SymbolReference {
35 id: ReferenceId,
36 unit: ResolutionUnitId,
37 language: Language,
38 kind: ReferenceKind,
39 text: Arc<str>,
40 span: SourceSpan,
41 enclosing_definition: Option<DefinitionId>,
42}
43
44impl SymbolReference {
45 pub(crate) fn new(
46 id: ReferenceId,
47 unit: ResolutionUnitId,
48 language: Language,
49 kind: ReferenceKind,
50 text: Arc<str>,
51 span: SourceSpan,
52 enclosing_definition: Option<DefinitionId>,
53 ) -> Self {
54 Self {
55 id,
56 unit,
57 language,
58 kind,
59 text,
60 span,
61 enclosing_definition,
62 }
63 }
64
65 pub fn id(&self) -> ReferenceId {
67 self.id
68 }
69
70 pub fn unit(&self) -> ResolutionUnitId {
72 self.unit
73 }
74
75 pub fn language(&self) -> Language {
77 self.language
78 }
79
80 pub fn kind(&self) -> ReferenceKind {
82 self.kind
83 }
84
85 pub fn text(&self) -> &str {
87 &self.text
88 }
89
90 pub fn span(&self) -> &SourceSpan {
92 &self.span
93 }
94
95 pub(super) fn span_mut(&mut self) -> &mut SourceSpan {
97 &mut self.span
98 }
99
100 pub fn enclosing_definition(&self) -> Option<DefinitionId> {
102 self.enclosing_definition
103 }
104}