Skip to content

Commit cc17a8d

Browse files
authored
Merge pull request #310 from pontem-network/simplify-analyzer
Simplify analyzer
2 parents 90d6177 + 8b4aa8e commit cc17a8d

5 files changed

Lines changed: 39 additions & 21 deletions

File tree

src/main/kotlin/org/move/ide/inspections/imports/ImportAnalyzer.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class ImportAnalyzer2(val holder: ProblemsHolder): MvVisitor() {
3838
.flatMap { it.descendantsOfType<MvPath>() }
3939
.filter { it.basePath() == it }
4040
.filter { it.usageScope == itemScope }
41+
// remove paths inside the use stmts
4142
.filter { !it.hasAncestor<MvUseSpeck>() }
4243

4344
for (path in reachablePaths) {
@@ -75,15 +76,15 @@ class ImportAnalyzer2(val holder: ProblemsHolder): MvVisitor() {
7576
for (itemsOwner in reachableItemsOwners) {
7677
val scopeUseStmts = itemsOwner.useStmtList.filter { it.usageScope == itemScope }
7778
for (useStmt in scopeUseStmts) {
78-
val unusedUseItems = useStmt.useItems.toSet() - allUseItemsHit
79-
holder.registerStmtSpeckError2(useStmt, unusedUseItems)
79+
holder.registerStmtSpeckError(useStmt, allUseItemsHit)
8080
}
8181
}
8282
}
8383
}
8484

85-
fun ProblemsHolder.registerStmtSpeckError2(useStmt: MvUseStmt, useItems: Set<UseItem>) {
86-
val moduleUseItems = useItems.filter { it.type is UseItemType.Module }
85+
fun ProblemsHolder.registerStmtSpeckError(useStmt: MvUseStmt, allUseItemsHit: Set<UseItem>) {
86+
val unusedUseItems = useStmt.useItems.toSet() - allUseItemsHit
87+
val moduleUseItems = unusedUseItems.filter { it.type is UseItemType.Module }
8788
if (moduleUseItems.isNotEmpty()) {
8889
this.registerProblem(
8990
useStmt,
@@ -93,15 +94,15 @@ fun ProblemsHolder.registerStmtSpeckError2(useStmt: MvUseStmt, useItems: Set<Use
9394
return
9495
}
9596

96-
if (useStmt.useItems.size == useItems.size) {
97+
if (useStmt.useItems.size == unusedUseItems.size) {
9798
// all inner speck types are covered, highlight complete useStmt
9899
this.registerProblem(
99100
useStmt,
100101
"Unused use item",
101102
ProblemHighlightType.LIKE_UNUSED_SYMBOL
102103
)
103104
} else {
104-
for (useItem in useItems) {
105+
for (useItem in unusedUseItems) {
105106
this.registerProblem(
106107
useItem.useSpeck,
107108
"Unused use item",

src/main/kotlin/org/move/lang/core/types/infer/Patterns.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fun MvPat.collectBindings(fcx: TypePsiWalker, ty: Ty, defBm: RsBindingModeKind =
5454
}
5555

5656
val namedFields = item?.namedFields?.associateBy { it.name } ?: emptyMap()
57-
val tyAdtSubst = if (ty is TyAdt) ty.substitution else emptySubstitution
57+
val tyAdtSubst = if (expected is TyAdt) expected.substitution else emptySubstitution
5858
for (fieldPat in this.patFieldList) {
5959
val kind = fieldPat.kind
6060
// wil have TyUnknown on unresolved item

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@
257257
implementationClass="org.move.ide.inspections.MvTypeCheckInspection" />
258258
<localInspection language="Move" groupName="Move"
259259
displayName="Acquires checking"
260-
enabledByDefault="false" level="WARNING"
260+
enabledByDefault="true" level="WARNING"
261261
implementationClass="org.move.ide.inspections.MvAcquiresCheckInspection" />
262262
<localInspection language="Move" groupName="Move"
263263
displayName="Unused struct type parameter"

src/test/kotlin/org/move/ide/inspections/MvTypeCheckInspectionTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,4 +1699,22 @@ module 0x1::pool {
16991699
}
17001700
}
17011701
""")
1702+
1703+
fun `test match expr should use generic substitution of unreferenced object`() = checkByText("""
1704+
module 0x1::mod {
1705+
struct Object<T> {
1706+
val: T
1707+
}
1708+
enum Relationship<phantom RelSource> {
1709+
V1 {
1710+
source: Object<RelSource>
1711+
}
1712+
}
1713+
// This function triggers the false positive error
1714+
public fun get_source<FunSource: key>(relationship: Relationship<FunSource>): Object<FunSource> {
1715+
match(&relationship) {
1716+
Relationship::V1 { source,.. } => *source
1717+
}
1718+
}
1719+
} """)
17021720
}

src/test/kotlin/org/move/ide/inspections/MvUnusedImportInspectionTest.kt

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -491,19 +491,18 @@ module 0x1::main {
491491
}
492492
""")
493493

494-
// TODO: test
495-
// fun `test unused top import with local present`() = checkWarnings("""
496-
// module 0x1::string {
497-
// public fun call() {}
498-
// }
499-
// module 0x1::main {
500-
// <warning descr="Unused use item">use 0x1::string;</warning>
501-
// fun main() {
502-
// use 0x1::string;
503-
// string::call();
504-
// }
505-
// }
506-
// """)
494+
fun `test unused top import with local present`() = checkWarnings("""
495+
module 0x1::string {
496+
public fun call() {}
497+
}
498+
module 0x1::main {
499+
<warning descr="Unused use item">use 0x1::string;</warning>
500+
fun main() {
501+
use 0x1::string;
502+
string::call();
503+
}
504+
}
505+
""")
507506

508507
fun `test unused local import`() = checkWarnings("""
509508
module 0x1::string {

0 commit comments

Comments
 (0)