Skip to content

Commit 2f9cb6d

Browse files
committed
clean type visit logic
1 parent ee55df9 commit 2f9cb6d

12 files changed

Lines changed: 1929 additions & 1838 deletions

File tree

crates/emmylua_code_analysis/src/db_index/type/types.rs

Lines changed: 0 additions & 1750 deletions
This file was deleted.

crates/emmylua_code_analysis/src/db_index/type/types/complex.rs

Lines changed: 982 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
use internment::ArcIntern;
2+
use rowan::TextRange;
3+
use smol_str::SmolStr;
4+
use std::{hash::Hash, sync::Arc};
5+
6+
use crate::db_index::LuaSignatureId;
7+
use crate::{FileId, InFiled};
8+
9+
use super::super::type_decl::LuaTypeDeclId;
10+
use super::complex::{
11+
GenericTpl, LuaAliasCallType, LuaArrayType, LuaAttributeType, LuaConditionalType,
12+
LuaFunctionType, LuaGenericType, LuaInstanceType, LuaIntersectionType, LuaMappedType,
13+
LuaMultiLineUnion, LuaObjectType, LuaStringTplType, LuaTupleType, LuaUnionType, VariadicType,
14+
};
15+
16+
#[derive(Debug, Clone)]
17+
pub enum LuaType {
18+
Unknown,
19+
Any,
20+
Nil,
21+
Table,
22+
Userdata,
23+
Function,
24+
Thread,
25+
Boolean,
26+
String,
27+
Integer,
28+
Number,
29+
Io,
30+
SelfInfer,
31+
Global,
32+
Never,
33+
BooleanConst(bool),
34+
StringConst(ArcIntern<SmolStr>),
35+
IntegerConst(i64),
36+
FloatConst(f64),
37+
TableConst(InFiled<TextRange>),
38+
Ref(LuaTypeDeclId),
39+
Def(LuaTypeDeclId),
40+
Array(Arc<LuaArrayType>),
41+
Tuple(Arc<LuaTupleType>),
42+
DocFunction(Arc<LuaFunctionType>),
43+
Object(Arc<LuaObjectType>),
44+
Union(Arc<LuaUnionType>),
45+
Intersection(Arc<LuaIntersectionType>),
46+
Generic(Arc<LuaGenericType>),
47+
TableGeneric(Arc<Vec<LuaType>>),
48+
TplRef(Arc<GenericTpl>),
49+
StrTplRef(Arc<LuaStringTplType>),
50+
Variadic(Arc<VariadicType>),
51+
Signature(LuaSignatureId),
52+
Instance(Arc<LuaInstanceType>),
53+
DocStringConst(ArcIntern<SmolStr>),
54+
DocIntegerConst(i64),
55+
DocBooleanConst(bool),
56+
Namespace(ArcIntern<SmolStr>),
57+
Call(Arc<LuaAliasCallType>),
58+
MultiLineUnion(Arc<LuaMultiLineUnion>),
59+
TypeGuard(Arc<LuaType>),
60+
ConstTplRef(Arc<GenericTpl>),
61+
Language(ArcIntern<SmolStr>),
62+
ModuleRef(FileId),
63+
DocAttribute(Arc<LuaAttributeType>),
64+
Conditional(Arc<LuaConditionalType>),
65+
ConditionalInfer(ArcIntern<SmolStr>),
66+
Mapped(Arc<LuaMappedType>),
67+
}
68+
69+
impl PartialEq for LuaType {
70+
fn eq(&self, other: &Self) -> bool {
71+
match (self, other) {
72+
(LuaType::Unknown, LuaType::Unknown) => true,
73+
(LuaType::Any, LuaType::Any) => true,
74+
(LuaType::Nil, LuaType::Nil) => true,
75+
(LuaType::Table, LuaType::Table) => true,
76+
(LuaType::Userdata, LuaType::Userdata) => true,
77+
(LuaType::Function, LuaType::Function) => true,
78+
(LuaType::Thread, LuaType::Thread) => true,
79+
(LuaType::Boolean, LuaType::Boolean) => true,
80+
(LuaType::String, LuaType::String) => true,
81+
(LuaType::Integer, LuaType::Integer) => true,
82+
(LuaType::Number, LuaType::Number) => true,
83+
(LuaType::Io, LuaType::Io) => true,
84+
(LuaType::SelfInfer, LuaType::SelfInfer) => true,
85+
(LuaType::Global, LuaType::Global) => true,
86+
(LuaType::BooleanConst(a), LuaType::BooleanConst(b)) => a == b,
87+
(LuaType::StringConst(a), LuaType::StringConst(b)) => a == b,
88+
(LuaType::IntegerConst(a), LuaType::IntegerConst(b)) => a == b,
89+
(LuaType::FloatConst(a), LuaType::FloatConst(b)) => a == b,
90+
(LuaType::TableConst(a), LuaType::TableConst(b)) => a == b,
91+
(LuaType::Ref(a), LuaType::Ref(b)) => a == b,
92+
(LuaType::Def(a), LuaType::Def(b)) => a == b,
93+
(LuaType::Array(a), LuaType::Array(b)) => a == b,
94+
(LuaType::Call(a), LuaType::Call(b)) => a == b,
95+
(LuaType::Tuple(a), LuaType::Tuple(b)) => a == b,
96+
(LuaType::DocFunction(a), LuaType::DocFunction(b)) => a == b,
97+
(LuaType::Object(a), LuaType::Object(b)) => a == b,
98+
(LuaType::Union(a), LuaType::Union(b)) => a == b,
99+
(LuaType::Intersection(a), LuaType::Intersection(b)) => a == b,
100+
(LuaType::Generic(a), LuaType::Generic(b)) => a == b,
101+
(LuaType::TableGeneric(a), LuaType::TableGeneric(b)) => a == b,
102+
(LuaType::TplRef(a), LuaType::TplRef(b)) => a == b,
103+
(LuaType::StrTplRef(a), LuaType::StrTplRef(b)) => a == b,
104+
(LuaType::Variadic(a), LuaType::Variadic(b)) => a == b,
105+
(LuaType::DocBooleanConst(a), LuaType::DocBooleanConst(b)) => a == b,
106+
(LuaType::Signature(a), LuaType::Signature(b)) => a == b,
107+
(LuaType::Instance(a), LuaType::Instance(b)) => a == b,
108+
(LuaType::DocStringConst(a), LuaType::DocStringConst(b)) => a == b,
109+
(LuaType::DocIntegerConst(a), LuaType::DocIntegerConst(b)) => a == b,
110+
(LuaType::Namespace(a), LuaType::Namespace(b)) => a == b,
111+
(LuaType::MultiLineUnion(a), LuaType::MultiLineUnion(b)) => a == b,
112+
(LuaType::TypeGuard(a), LuaType::TypeGuard(b)) => a == b,
113+
(LuaType::Never, LuaType::Never) => true,
114+
(LuaType::ConstTplRef(a), LuaType::ConstTplRef(b)) => a == b,
115+
(LuaType::Language(a), LuaType::Language(b)) => a == b,
116+
(LuaType::ModuleRef(a), LuaType::ModuleRef(b)) => a == b,
117+
(LuaType::DocAttribute(a), LuaType::DocAttribute(b)) => a == b,
118+
(LuaType::Conditional(a), LuaType::Conditional(b)) => a == b,
119+
(LuaType::ConditionalInfer(a), LuaType::ConditionalInfer(b)) => a == b,
120+
(LuaType::Mapped(a), LuaType::Mapped(b)) => a == b,
121+
_ => false,
122+
}
123+
}
124+
}
125+
126+
impl Eq for LuaType {}
127+
128+
impl Hash for LuaType {
129+
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
130+
match self {
131+
LuaType::Unknown => 0.hash(state),
132+
LuaType::Any => 1.hash(state),
133+
LuaType::Nil => 2.hash(state),
134+
LuaType::Table => 3.hash(state),
135+
LuaType::Userdata => 4.hash(state),
136+
LuaType::Function => 5.hash(state),
137+
LuaType::Thread => 6.hash(state),
138+
LuaType::Boolean => 7.hash(state),
139+
LuaType::String => 8.hash(state),
140+
LuaType::Integer => 9.hash(state),
141+
LuaType::Number => 10.hash(state),
142+
LuaType::Io => 11.hash(state),
143+
LuaType::SelfInfer => 12.hash(state),
144+
LuaType::Global => 13.hash(state),
145+
LuaType::BooleanConst(a) => (14, a).hash(state),
146+
LuaType::StringConst(a) => (15, a).hash(state),
147+
LuaType::IntegerConst(a) => (16, a).hash(state),
148+
LuaType::FloatConst(a) => (17, a.to_bits()).hash(state),
149+
LuaType::TableConst(a) => (18, a).hash(state),
150+
LuaType::Ref(a) => (19, a).hash(state),
151+
LuaType::Def(a) => (20, a).hash(state),
152+
LuaType::Array(a) => (22, a).hash(state),
153+
LuaType::Call(a) => (23, a).hash(state),
154+
LuaType::Tuple(a) => (25, a).hash(state),
155+
LuaType::DocFunction(a) => (26, a).hash(state),
156+
LuaType::Object(a) => (27, Arc::as_ptr(a)).hash(state),
157+
LuaType::Union(a) => (28, Arc::as_ptr(a)).hash(state),
158+
LuaType::Intersection(a) => (29, Arc::as_ptr(a)).hash(state),
159+
LuaType::Generic(a) => (30, Arc::as_ptr(a)).hash(state),
160+
LuaType::TableGeneric(a) => (31, Arc::as_ptr(a)).hash(state),
161+
LuaType::TplRef(a) => (32, Arc::as_ptr(a)).hash(state),
162+
LuaType::StrTplRef(a) => (33, Arc::as_ptr(a)).hash(state),
163+
LuaType::Variadic(a) => (34, Arc::as_ptr(a)).hash(state),
164+
LuaType::DocBooleanConst(a) => (35, a).hash(state),
165+
LuaType::Signature(a) => (36, a).hash(state),
166+
LuaType::Instance(a) => (37, a).hash(state),
167+
LuaType::DocStringConst(a) => (38, a).hash(state),
168+
LuaType::DocIntegerConst(a) => (39, a).hash(state),
169+
LuaType::Namespace(a) => (40, a).hash(state),
170+
LuaType::MultiLineUnion(a) => (43, Arc::as_ptr(a)).hash(state),
171+
LuaType::TypeGuard(a) => (44, Arc::as_ptr(a)).hash(state),
172+
LuaType::Never => 45.hash(state),
173+
LuaType::ConstTplRef(a) => (46, Arc::as_ptr(a)).hash(state),
174+
LuaType::Language(a) => (47, a).hash(state),
175+
LuaType::ModuleRef(a) => (48, a).hash(state),
176+
LuaType::Conditional(a) => (49, Arc::as_ptr(a)).hash(state),
177+
LuaType::ConditionalInfer(a) => (50, a).hash(state),
178+
LuaType::Mapped(a) => (51, Arc::as_ptr(a)).hash(state),
179+
LuaType::DocAttribute(a) => (52, a).hash(state),
180+
}
181+
}
182+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
mod complex;
2+
mod lua_type;
3+
mod predicates;
4+
mod test;
5+
mod traverse;
6+
7+
pub use complex::*;
8+
pub use lua_type::*;
9+
pub use traverse::LuaTypeNode;

0 commit comments

Comments
 (0)