1
use forget_diagnostics::Diagnostic;
2
use forget_estree::{
3
- BreakStatement, ContinueStatement, ESTreeNode, LabeledStatement, VariableDeclarationKind,
3
+ BreakStatement, ContinueStatement, ESTreeNode, LabeledStatement, SourceRange,
4
+ VariableDeclarationKind,
5
};
6
use forget_utils::PointerAddress;
7
use indexmap::IndexMap;
44
declarations: Default::default(),
45
references: Default::default(),
46
children: Default::default(),
47
+ unresolved: Default::default(),
48
}],
49
labels: Default::default(),
50
declarations: Default::default(),
77
&self.scopes[id.0]
78
}
79
80
+ pub fn mut_scope(&mut self, id: ScopeId) -> &mut Scope {
81
+ &mut self.scopes[id.0]
82
+ }
83
+
84
pub fn is_descendant_of(&self, maybe_descendant: ScopeId, maybe_ancestor: ScopeId) -> bool {
85
let mut current = maybe_descendant;
86
loop {
198
declarations: Default::default(),
199
references: Default::default(),
200
children: Default::default(),
201
+ unresolved: Default::default(),
202
});
203
self.scopes[parent.0].children.push(id);
204
id
259
self.scopes[scope.0].references.push(id);
260
id
261
}
262
+
263
+ pub(crate) fn push_unresolved_reference(
264
+ &mut self,
265
+ scope: ScopeId,
266
+ reference: UnresolvedReference,
267
+ ) {
268
+ self.scopes[scope.0].unresolved.push(reference);
269
+ }
270
+
271
+ pub(crate) fn add_unresolved_reference(
272
+ &mut self,
273
+ scope: ScopeId,
274
+ ast: AstNode,
275
+ name: String,
276
+ kind: ReferenceKind,
277
+ range: Option<SourceRange>,
278
+ ) {
279
+ self.scopes[scope.0].unresolved.push(UnresolvedReference {
280
+ ast,
281
+ scope,
282
+ name,
283
+ kind,
284
+ range,
285
+ });
286
+ }
287
}
288
289
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Copy, Clone)]
318
pub declarations: IndexMap<String, DeclarationId>,
319
pub references: Vec<ReferenceId>,
320
pub children: Vec<ScopeId>,
321
+ pub unresolved: Vec<UnresolvedReference>,
322
+}
323
+
324
+#[derive(Debug, Clone)]
325
+pub struct UnresolvedReference {
326
+ pub scope: ScopeId,
327
+ pub ast: AstNode,
328
+ pub name: String,
329
+ pub kind: ReferenceKind,
330
+ pub range: Option<SourceRange>,
331
}
332
333
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Copy, Clone)]