rl_lang/checker/scope/
declare.rs1use crate::{
4 checker::structs::{CheckType, ScopeItem, TypeChecker},
5 utils::span::Span,
6};
7
8impl TypeChecker {
9 pub fn declare(&mut self, name: String, item_type: CheckType, is_const: bool, span: Span) {
15 if let Some(scope) = self.scopes.last_mut() {
16 if is_const && scope.contains_key(&name) {
17 self.errors
18 .push(self.err(format!("'{}' is already declared", name), span));
19 return;
20 }
21
22 let kind = if is_const { "const" } else { "variable" };
23 let hover_text = format!("```rl\n{} {}: {}\n```", kind, name, item_type.info());
24
25 scope.insert(name, ScopeItem::new(item_type, is_const));
26 self.push_hover(span, hover_text);
27 }
28 }
29}