Skip to content

Commit 2c03f82

Browse files
committed
ready type flow
1 parent 2069b45 commit 2c03f82

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

crates/emmylua_code_analysis/src/compilation/analyzer/doc/type_ref_tags.rs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,37 @@ pub fn analyze_type(analyzer: &mut DocAnalyzer, tag: LuaDocTagType) -> Option<()
4242
let position = name_token.get_position();
4343
let file_id = analyzer.file_id;
4444
let decl_id = LuaDeclId::new(file_id, position);
45-
let decl = analyzer.db.get_decl_index_mut().get_decl_mut(&decl_id)?;
46-
47-
decl.set_decl_type(type_ref.clone());
45+
if let Some(decl) = analyzer.db.get_decl_index_mut().get_decl_mut(&decl_id)
46+
{
47+
decl.set_decl_type(type_ref.clone());
48+
} else {
49+
analyzer.context.type_flow.insert(
50+
InFiled {
51+
file_id: analyzer.file_id,
52+
value: name_expr.get_syntax_id(),
53+
},
54+
type_ref.clone(),
55+
);
56+
}
4857
}
4958
LuaVarExpr::IndexExpr(index_expr) => {
5059
let member_id =
5160
LuaMemberId::new(index_expr.get_syntax_id(), analyzer.file_id);
52-
let member = analyzer
61+
if let Some(member) = analyzer
5362
.db
5463
.get_member_index_mut()
55-
.get_member_mut(&member_id)?;
56-
member.set_decl_type(type_ref.clone());
64+
.get_member_mut(&member_id)
65+
{
66+
member.set_decl_type(type_ref.clone());
67+
} else {
68+
analyzer.context.type_flow.insert(
69+
InFiled {
70+
file_id: analyzer.file_id,
71+
value: index_expr.get_syntax_id(),
72+
},
73+
type_ref.clone(),
74+
);
75+
}
5776
}
5877
}
5978
}

crates/emmylua_code_analysis/src/compilation/analyzer/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ mod unresolve;
66

77
use std::{collections::HashMap, sync::Arc};
88

9-
use crate::{db_index::DbIndex, profile::Profile, Emmyrc, InFiled, WorkspaceId};
10-
use emmylua_parser::LuaChunk;
9+
use crate::{db_index::DbIndex, profile::Profile, Emmyrc, InFiled, LuaType, WorkspaceId};
10+
use emmylua_parser::{LuaChunk, LuaSyntaxId};
1111
use unresolve::UnResolve;
1212

1313
pub fn analyze(db: &mut DbIndex, need_analyzed_files: Vec<InFiled<LuaChunk>>, config: Arc<Emmyrc>) {
@@ -79,6 +79,7 @@ pub struct AnalyzeContext {
7979
tree_list: Vec<InFiled<LuaChunk>>,
8080
#[allow(unused)]
8181
config: Arc<Emmyrc>,
82+
type_flow: HashMap<InFiled<LuaSyntaxId>, LuaType>,
8283
unresolves: Vec<UnResolve>,
8384
}
8485

@@ -87,6 +88,7 @@ impl AnalyzeContext {
8788
Self {
8889
tree_list: Vec::new(),
8990
config: emmyrc,
91+
type_flow: HashMap::new(),
9092
unresolves: Vec::new(),
9193
}
9294
}

0 commit comments

Comments
 (0)