Skip to content

Commit 98fda76

Browse files
committed
暂存
1 parent 0d539c1 commit 98fda76

64 files changed

Lines changed: 5468 additions & 3625 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

crates/emmylua_code_analysis/src/compilation/analyzer/unresolve/find_decl_function.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ use smol_str::SmolStr;
44

55
use crate::{
66
InFiled, InferFailReason, InferGuardRef, LuaInferCache, LuaInstanceType, LuaMemberId,
7-
LuaMemberOwner, LuaOperatorOwner, TypeOps, TypeSubstitutor, check_type_compact,
7+
LuaMemberOwner, LuaOperatorOwner, TypeOps, TypeSubstitutor,
88
db_index::{
99
DbIndex, LuaGenericType, LuaIntersectionType, LuaMemberKey, LuaObjectType,
1010
LuaOperatorMetaMethod, LuaTupleType, LuaType, LuaTypeDeclId, LuaUnionType,
1111
},
12-
infer_expr, instantiate_type_generic,
12+
infer_expr, instantiate_type_generic, is_assignable,
1313
semantic::InferGuard,
1414
};
1515

@@ -316,7 +316,7 @@ fn find_index_metamethod(
316316
LuaIndexKey::Expr(expr) => infer_expr(db, cache, expr.clone())?,
317317
};
318318

319-
if check_type_compact(db, key_type, &access_key_type).is_ok() {
319+
if is_assignable(db, &access_key_type, key_type) {
320320
return Ok(value_type.clone());
321321
}
322322

@@ -548,7 +548,7 @@ fn find_member_by_index_table(
548548
LuaMemberKey::Integer(i) => LuaType::IntegerConst(*i),
549549
_ => continue,
550550
};
551-
if check_type_compact(db, &key_type, &member_key_type).is_ok() {
551+
if is_assignable(db, &member_key_type, &key_type) {
552552
let member_type = db
553553
.get_type_index()
554554
.get_type_cache(&member.get_id().into())
@@ -663,7 +663,7 @@ fn infer_member_by_index_array(
663663
} else if member_key.is_expr() {
664664
let expr = member_key.get_expr().ok_or(InferFailReason::None)?;
665665
let expr_type = infer_expr(db, cache, expr.clone())?;
666-
if check_type_compact(db, &LuaType::Number, &expr_type).is_ok() {
666+
if is_assignable(db, &expr_type, &LuaType::Number) {
667667
return Ok(base.clone());
668668
}
669669
}
@@ -683,7 +683,7 @@ fn infer_member_by_index_object(
683683
let expr = member_key.get_expr().ok_or(InferFailReason::None)?;
684684
let expr_type = infer_expr(db, cache, expr.clone())?;
685685
for (key, field) in access_member_type {
686-
if check_type_compact(db, key, &expr_type).is_ok() {
686+
if is_assignable(db, &expr_type, key) {
687687
return Ok(field.clone());
688688
}
689689
}

crates/emmylua_code_analysis/src/compilation/test/closure_return_test.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ mod test {
1010
let ty = ws.expr_ty("result");
1111
let expected = ws.ty("integer");
1212
let nil = ws.ty("nil");
13-
assert!(ws.check_type(&ty, &expected));
14-
assert!(!ws.check_type(&ty, &nil));
13+
assert!(ws.check_type(&expected, &ty));
14+
assert!(!ws.check_type(&nil, &ty));
1515
}
1616

1717
#[test]
@@ -364,8 +364,8 @@ mod test {
364364
let ty = ws.expr_ty("result");
365365
let expected = ws.ty("integer|string");
366366
let nil = ws.ty("nil");
367-
assert!(ws.check_type(&ty, &expected));
368-
assert!(!ws.check_type(&ty, &nil));
367+
assert!(ws.check_type(&expected, &ty));
368+
assert!(!ws.check_type(&nil, &ty));
369369
}
370370

371371
#[test]
@@ -393,7 +393,7 @@ mod test {
393393
let ty = ws.expr_ty("result");
394394
let expected = ws.ty("integer|string");
395395
let nil = ws.ty("nil");
396-
assert!(ws.check_type(&ty, &expected));
397-
assert!(!ws.check_type(&ty, &nil));
396+
assert!(ws.check_type(&expected, &ty));
397+
assert!(!ws.check_type(&nil, &ty));
398398
}
399399
}

crates/emmylua_code_analysis/src/compilation/test/member_infer_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ mod test {
7272

7373
let result_ty = ws.expr_ty("Result");
7474
let expected_ty = ws.ty("string?");
75-
assert!(ws.check_type(&result_ty, &expected_ty));
75+
assert!(ws.check_type(&expected_ty, &result_ty));
7676
}
7777

7878
#[test]

crates/emmylua_code_analysis/src/compilation/test/module_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ mod test {
139139
let ty = ws.expr_ty(r#"require("virtual_0")"#);
140140
let integer = ws.ty("integer");
141141
let nil = ws.ty("nil");
142-
assert!(ws.check_type(&ty, &integer));
143-
assert!(!ws.check_type(&ty, &nil));
142+
assert!(ws.check_type(&integer, &ty));
143+
assert!(!ws.check_type(&nil, &ty));
144144
}
145145

146146
#[test]

crates/emmylua_code_analysis/src/compilation/test/return_overload_generic_test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,17 +161,17 @@ mod test {
161161

162162
let status_ty = ws.expr_ty("status");
163163
let boolean_ty = ws.ty("boolean");
164-
assert!(ws.check_type(&status_ty, &boolean_ty));
164+
assert!(ws.check_type(&boolean_ty, &status_ty));
165165
assert!(!status_ty.is_always_truthy());
166166
assert!(!status_ty.is_always_falsy());
167167

168168
let value_ty = ws.expr_ty("value");
169169
let integer_or_string_ty = ws.ty("integer|string");
170170
let integer_ty = ws.ty("integer");
171171
let string_ty = ws.ty("string");
172-
assert!(ws.check_type(&value_ty, &integer_or_string_ty));
173-
assert!(ws.check_type(&value_ty, &integer_ty));
174-
assert!(ws.check_type(&value_ty, &string_ty));
172+
assert!(ws.check_type(&integer_or_string_ty, &value_ty));
173+
assert!(ws.check_type(&integer_ty, &value_ty));
174+
assert!(ws.check_type(&string_ty, &value_ty));
175175
}
176176

177177
#[test]

crates/emmylua_code_analysis/src/db_index/member/lua_owner_members.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ impl LuaOwnerMembers {
4242
self.members.values()
4343
}
4444

45+
pub fn iter(&self) -> impl Iterator<Item = (&LuaMemberKey, &LuaMemberIndexItem)> {
46+
self.members.iter()
47+
}
48+
4549
pub fn iter_mut(&mut self) -> impl Iterator<Item = (&LuaMemberKey, &mut LuaMemberIndexItem)> {
4650
self.members.iter_mut()
4751
}

crates/emmylua_code_analysis/src/db_index/member/mod.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,13 @@ impl LuaMemberIndex {
191191
Some(members)
192192
}
193193

194-
#[allow(unused)]
194+
pub fn get_member_items(
195+
&self,
196+
owner: &LuaMemberOwner,
197+
) -> Option<impl Iterator<Item = (&LuaMemberKey, &LuaMemberIndexItem)>> {
198+
Some(self.owner_members.get(owner)?.iter())
199+
}
200+
195201
pub fn get_member_item_by_member_id(
196202
&self,
197203
member_id: LuaMemberId,

crates/emmylua_code_analysis/src/db_index/signature/signature.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,7 @@ impl LuaSignature {
153153
return false;
154154
}
155155

156-
semantic_model
157-
.type_check(owner_type, &param_info.type_ref)
158-
.is_ok()
156+
semantic_model.is_assignable(&param_info.type_ref, owner_type)
159157
}
160158
None => param_info.name == "self",
161159
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ impl LuaFunctionType {
196196
{
197197
return false;
198198
}
199-
if semantic_model.type_check(owner_type, t).is_ok() {
199+
if semantic_model.is_assignable(t, owner_type) {
200200
return true;
201201
}
202-
name == "self" && semantic_model.type_check(t, owner_type).is_ok()
202+
name == "self" && semantic_model.is_assignable(owner_type, t)
203203
}
204204
None => name == "self",
205205
}

crates/emmylua_code_analysis/src/diagnostic/checker/assign_type_mismatch.rs

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use rowan::{NodeOrToken, TextRange};
88

99
use crate::{
1010
DbIndex, DiagnosticCode, LuaDeclExtra, LuaDeclId, LuaMemberKey, LuaSemanticDeclId, LuaType,
11-
SemanticDeclLevel, SemanticModel, TypeCheckFailReason, TypeCheckResult, VariadicType,
12-
get_real_type, infer_index_expr,
11+
SemanticDeclLevel, SemanticModel, TypeMismatch, VariadicType, get_real_type, infer_index_expr,
12+
render_type_mismatch,
1313
};
1414

1515
use super::{Checker, DiagnosticContext, humanize_lint_type};
@@ -378,15 +378,14 @@ fn check_assign_type_mismatch(
378378
_ => {}
379379
}
380380

381-
let result = semantic_model.type_check_detail(source_type, value_type);
382-
if result.is_err() {
381+
if let Err(mismatch) = semantic_model.check_assignable(value_type, source_type) {
383382
add_type_check_diagnostic(
384383
context,
385384
semantic_model,
386385
range,
387386
source_type,
388387
value_type,
389-
result,
388+
&mismatch,
390389
);
391390
return Some(true);
392391
}
@@ -399,32 +398,21 @@ fn add_type_check_diagnostic(
399398
range: TextRange,
400399
source_type: &LuaType,
401400
value_type: &LuaType,
402-
result: TypeCheckResult,
401+
mismatch: &TypeMismatch,
403402
) {
404403
let db = semantic_model.get_db();
405-
match result {
406-
Ok(_) => (),
407-
Err(reason) => {
408-
let reason_message = match reason {
409-
TypeCheckFailReason::TypeNotMatchWithReason(reason) => reason,
410-
TypeCheckFailReason::TypeRecursion => t!("type recursion").to_string(),
411-
_ => "".to_string(),
412-
};
413-
414-
context.add_diagnostic(
415-
DiagnosticCode::AssignTypeMismatch,
416-
range,
417-
t!(
418-
"Cannot assign `%{value}` to `%{source}`. %{reason}",
419-
value = humanize_lint_type(db, value_type),
420-
source = humanize_lint_type(db, source_type),
421-
reason = reason_message
422-
)
423-
.to_string(),
424-
None,
425-
);
426-
}
427-
}
404+
context.add_diagnostic(
405+
DiagnosticCode::AssignTypeMismatch,
406+
range,
407+
t!(
408+
"Cannot assign `%{value}` to `%{source}`. %{reason}",
409+
value = humanize_lint_type(db, value_type),
410+
source = humanize_lint_type(db, source_type),
411+
reason = render_type_mismatch(db, mismatch)
412+
)
413+
.to_string(),
414+
None,
415+
);
428416
}
429417

430418
fn get_real_type_or_self<'a>(db: &'a DbIndex, ty: &'a LuaType) -> &'a LuaType {

0 commit comments

Comments
 (0)