From 4e2ef47b1b84defd39e96ec46c29c8177d29417e Mon Sep 17 00:00:00 2001 From: ivanjermakov Date: Tue, 12 Mar 2024 01:25:37 +0100 Subject: [PATCH] Semantic: fix tests --- src/scope/trait.spec.ts | 1 - src/scope/trait.ts | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/scope/trait.spec.ts b/src/scope/trait.spec.ts index 8f278a5b..e2055b70 100644 --- a/src/scope/trait.spec.ts +++ b/src/scope/trait.spec.ts @@ -52,7 +52,6 @@ describe('trait', () => { expect(formatImplTypes(findSuperRelChains(vidFromString('std::list::List'), ctx))).toEqual([ ['std::iter::Iterable'], ['std::iter::Collector'], - ['std::io::Display'], ['std::io::Display'] ]) diff --git a/src/scope/trait.ts b/src/scope/trait.ts index 15e7e0f3..d2c829e3 100644 --- a/src/scope/trait.ts +++ b/src/scope/trait.ts @@ -233,13 +233,14 @@ export const resolveTypeImpl = ( if (!traitRef || traitRef.def.kind !== 'trait-def') return undefined const trait = ctx.impls.find(i => i.instanceDef === traitRef.def)! const candidates = ctx.impls - .filter( - i => + .filter(i => { + return ( (i.instanceDef.kind === 'impl-def' || i.instanceDef.block.statements.every(s => s.kind === 'fn-def' && s.block)) && isAssignable(type, i.forType, ctx) && typeEq(i.implType, traitType) - ) + ) + }) .toSorted((a, b) => relComparator(b, ctx, type, traitType) - relComparator(a, ctx, type, traitType)) const impl = candidates.at(0) return impl ? { trait, impl } : undefined