Skip to content

Commit 0c34653

Browse files
authored
replace autoCorrect with -Auto suffixes (#249)
* rewrite shouldFailWithMessage() * update test matrix * WIP apply * rewrite shouldFailWithMessage() * rewrite shouldFailWithMessage() * debugging windows test paths... * debugging windows test paths... * it's functional * start updating docs * start updating docs * apply -> auto * apply -> auto
1 parent 8e167dd commit 0c34653

21 files changed

+248
-770
lines changed

modulecheck-api/src/main/kotlin/modulecheck/api/settings/ModuleCheckSettings.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,6 @@ import modulecheck.api.KaptMatcher
1919

2020
interface ModuleCheckSettings {
2121

22-
/**
23-
* ModuleCheck will attempt to fix its findings automatically. This means removing unused
24-
* dependencies, changing the configuration to `api` if necessary, and adding inherited
25-
* dependencies which should be declared explicitly.
26-
*
27-
* By default, ModuleCheck will "remove" declarations of unused dependencies by simply commenting
28-
* them out. See the [deleteUnused] for the option to delete them entirely.
29-
*/
30-
var autoCorrect: Boolean
31-
3222
/**
3323
* If true, ModuleCheck will delete declarations of unused dependencies entirely.
3424
*

modulecheck-core/src/main/kotlin/modulecheck/core/ModuleCheckRunner.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ import kotlin.system.measureTimeMillis
3232
* [FindingResult][modulecheck.api.Finding.FindingResult]
3333
* @param reportFactory handles console output of the results
3434
*/
35+
@Suppress("LongParameterList")
3536
class ModuleCheckRunner(
37+
val autoCorrect: Boolean,
3638
val settings: ModuleCheckSettings,
3739
val findingFactory: FindingFactory<out Finding>,
3840
val logger: Logger,
@@ -110,7 +112,7 @@ class ModuleCheckRunner(
110112

111113
findingResultFactory.create(
112114
findings = list,
113-
autoCorrect = settings.autoCorrect,
115+
autoCorrect = autoCorrect,
114116
deleteUnused = settings.deleteUnused
115117
)
116118
}

modulecheck-core/src/test/kotlin/modulecheck/core/CheckstyleReportingTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ internal class CheckstyleReportingTest : BaseTest() {
4141
val outputFile = File(baseSettings.reports.checkstyle.outputPath)
4242

4343
val runner = ModuleCheckRunner(
44+
autoCorrect = false,
4445
settings = baseSettings,
4546
findingFactory = {
4647
listOf(
@@ -84,6 +85,7 @@ internal class CheckstyleReportingTest : BaseTest() {
8485
val outputFile = File(baseSettings.reports.checkstyle.outputPath)
8586

8687
val runner = ModuleCheckRunner(
88+
autoCorrect = false,
8789
settings = baseSettings,
8890
findingFactory = {
8991
listOf(

modulecheck-core/src/test/kotlin/modulecheck/core/TestSettings.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import modulecheck.api.settings.*
2020

2121
@Suppress("UNUSED_PARAMETER")
2222
data class TestSettings(
23-
override var autoCorrect: Boolean = false,
2423
override var deleteUnused: Boolean = false,
2524
override var ignoreUnusedFinding: Set<String> = emptySet(),
2625
override var doNotCheck: Set<String> = emptySet(),

modulecheck-core/src/test/kotlin/modulecheck/core/TextReportingTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ internal class TextReportingTest : BaseTest() {
4040
val outputFile = File(baseSettings.reports.text.outputPath)
4141

4242
val runner = ModuleCheckRunner(
43+
autoCorrect = false,
4344
settings = baseSettings,
4445
findingFactory = {
4546
listOf(
@@ -83,6 +84,7 @@ internal class TextReportingTest : BaseTest() {
8384
val outputFile = File(baseSettings.reports.text.outputPath)
8485

8586
val runner = ModuleCheckRunner(
87+
autoCorrect = false,
8688
settings = baseSettings,
8789
findingFactory = {
8890
listOf(

modulecheck-plugin/src/main/kotlin/modulecheck/gradle/ModuleCheckExtension.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,6 @@ open class ModuleCheckExtension @Inject constructor(
4949
projectLayout: ProjectLayout
5050
) : ModuleCheckSettings {
5151

52-
/**
53-
* ModuleCheck will attempt to fix its findings automatically. This means removing unused
54-
* dependencies, changing the configuration to `api` if necessary, and adding inherited
55-
* dependencies which should be declared explicitly.
56-
*
57-
* By default, ModuleCheck will "remove" declarations of unused dependencies by simply commenting
58-
* them out. See the [deleteUnused] for the option to delete them entirely.
59-
*/
60-
override var autoCorrect: Boolean by objects.property(true)
61-
6252
/**
6353
* If true, ModuleCheck will delete declarations of unused dependencies entirely.
6454
*

modulecheck-plugin/src/main/kotlin/modulecheck/gradle/ModuleCheckPlugin.kt

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ package modulecheck.gradle
1818
import com.android.build.gradle.tasks.GenerateBuildConfig
1919
import com.android.build.gradle.tasks.ManifestProcessorTask
2020
import modulecheck.api.FindingFactory
21-
import modulecheck.core.rule.ModuleCheckRuleFactory
22-
import modulecheck.core.rule.MultiRuleFindingFactory
23-
import modulecheck.core.rule.SingleRuleFindingFactory
21+
import modulecheck.core.rule.*
2422
import modulecheck.gradle.internal.isMissingManifestFile
2523
import modulecheck.gradle.task.ModuleCheckTask
2624
import org.gradle.api.Plugin
2725
import org.gradle.api.Project
26+
import org.gradle.api.tasks.TaskProvider
2827
import org.gradle.kotlin.dsl.configure
2928

3029
fun Project.moduleCheck(config: ModuleCheckExtension.() -> Unit) {
@@ -43,25 +42,27 @@ class ModuleCheckPlugin : Plugin<Project> {
4342

4443
val rules = factory.create(settings)
4544

46-
rules.map { rule ->
47-
target.registerTask(
48-
name = "moduleCheck${rule.id}",
49-
findingFactory = SingleRuleFindingFactory(rule)
50-
)
51-
}
52-
53-
target.registerTask(
45+
target.registerTasks(
46+
name = "moduleCheckSortDependencies",
47+
findingFactory = SingleRuleFindingFactory(SortDependenciesRule(settings))
48+
)
49+
target.registerTasks(
50+
name = "moduleCheckSortPlugins",
51+
findingFactory = SingleRuleFindingFactory(SortPluginsRule(settings))
52+
)
53+
target.registerTasks(
5454
name = "moduleCheck",
5555
findingFactory = MultiRuleFindingFactory(settings, rules)
5656
)
5757
}
5858

59-
private fun Project.registerTask(
59+
private fun Project.registerTasks(
6060
name: String,
6161
findingFactory: FindingFactory<*>
6262
) {
63-
tasks.register(name, ModuleCheckTask::class.java, findingFactory)
64-
.configure {
63+
64+
fun TaskProvider<*>.addDependencies() {
65+
configure {
6566

6667
allprojects
6768
.filter { it.isMissingManifestFile() }
@@ -72,5 +73,11 @@ class ModuleCheckPlugin : Plugin<Project> {
7273
.flatMap { it.tasks.withType(GenerateBuildConfig::class.java) }
7374
.forEach { dependsOn(it) }
7475
}
76+
}
77+
78+
tasks.register(name, ModuleCheckTask::class.java, findingFactory, false)
79+
.addDependencies()
80+
tasks.register("${name}Auto", ModuleCheckTask::class.java, findingFactory, true)
81+
.addDependencies()
7582
}
7683
}

modulecheck-plugin/src/main/kotlin/modulecheck/gradle/task/ModuleCheckTask.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ import java.util.concurrent.ConcurrentHashMap
3434
import javax.inject.Inject
3535

3636
abstract class ModuleCheckTask<T : Finding> @Inject constructor(
37-
private val findingFactory: FindingFactory<T>
37+
private val findingFactory: FindingFactory<T>,
38+
private val autoCorrect: Boolean
3839
) : DefaultTask(),
3940
ProjectsAware {
4041

@@ -50,12 +51,6 @@ abstract class ModuleCheckTask<T : Finding> @Inject constructor(
5051
@get:Input
5152
val settings: ModuleCheckExtension = project.extensions.getByType()
5253

53-
@get:Input
54-
val autoCorrect: Boolean = settings.autoCorrect
55-
56-
@get:Input
57-
val deleteUnused: Boolean = settings.deleteUnused
58-
5954
@get:Input
6055
final override val projectCache = ConcurrentHashMap<String, McProject>()
6156

@@ -69,6 +64,7 @@ abstract class ModuleCheckTask<T : Finding> @Inject constructor(
6964
fun run() {
7065

7166
val runner = ModuleCheckRunner(
67+
autoCorrect = autoCorrect,
7268
settings = settings,
7369
findingFactory = findingFactory,
7470
logger = logger,

modulecheck-plugin/src/test/kotlin/modulecheck/gradle/AnvilScopesTest.kt

Lines changed: 21 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class AnvilScopesTest : BasePluginTest() {
5050
projectBuildSpec?.edit {
5151
addPlugin("id(\"com.squareup.anvil\")")
5252
addExternalDependency("implementation", "com.google.dagger:dagger:2.38.1")
53-
addProjectDependency("implementation", jvmSub1)
53+
addProjectDependency("api", jvmSub1)
5454
}
5555
addSrcSpec(
5656
ProjectSrcSpec(Path.of("src/main/kotlin/com/example/lib2")) {
@@ -77,8 +77,8 @@ class AnvilScopesTest : BasePluginTest() {
7777
addPlugin("kotlin(\"jvm\")")
7878
addPlugin("id(\"com.squareup.anvil\")")
7979
addExternalDependency("implementation", "com.google.dagger:dagger:2.38.1")
80-
addProjectDependency("implementation", jvmSub1)
81-
addProjectDependency("implementation", jvmSub2)
80+
addProjectDependency("api", jvmSub1)
81+
addProjectDependency("api", jvmSub2)
8282
}
8383
)
8484
addSrcSpec(
@@ -104,19 +104,11 @@ class AnvilScopesTest : BasePluginTest() {
104104
addSubproject(appProject)
105105
addSubprojects(jvmSub1, jvmSub2)
106106
addSettingsSpec(projectSettings.build())
107-
addBuildSpec(
108-
projectBuild
109-
.addBlock(
110-
"""moduleCheck {
111-
| autoCorrect = false
112-
|}
113-
""".trimMargin()
114-
).build()
115-
)
107+
addBuildSpec(projectBuild.build())
116108
}
117109
.writeIn(testProjectDir.toPath())
118110

119-
shouldSucceed("moduleCheckUnusedDependency")
111+
shouldSucceed("moduleCheck")
120112
}
121113

122114
@Test
@@ -149,8 +141,8 @@ class AnvilScopesTest : BasePluginTest() {
149141
ProjectBuildSpec {
150142
addPlugin("kotlin(\"jvm\")")
151143
addPlugin("id(\"com.squareup.anvil\")")
152-
addProjectDependency("implementation", jvmSub1)
153-
addProjectDependency("implementation", jvmSub2)
144+
addProjectDependency("api", jvmSub1)
145+
addProjectDependency("api", jvmSub2)
154146
}
155147
)
156148
addSrcSpec(
@@ -176,19 +168,11 @@ class AnvilScopesTest : BasePluginTest() {
176168
addSubproject(appProject)
177169
addSubprojects(jvmSub1, jvmSub2)
178170
addSettingsSpec(projectSettings.build())
179-
addBuildSpec(
180-
projectBuild
181-
.addBlock(
182-
"""moduleCheck {
183-
| autoCorrect = false
184-
|}
185-
""".trimMargin()
186-
).build()
187-
)
171+
addBuildSpec(projectBuild.build())
188172
}
189173
.writeIn(testProjectDir.toPath())
190174

191-
shouldSucceed("moduleCheckUnusedDependency")
175+
shouldSucceed("moduleCheck")
192176
}
193177

194178
@Test
@@ -241,8 +225,8 @@ class AnvilScopesTest : BasePluginTest() {
241225
ProjectBuildSpec {
242226
addPlugin("kotlin(\"jvm\")")
243227
addPlugin("id(\"com.squareup.anvil\")")
244-
addProjectDependency("implementation", jvmSub1)
245-
addProjectDependency("implementation", jvmSub2)
228+
addProjectDependency("api", jvmSub1)
229+
addProjectDependency("api", jvmSub2)
246230
}
247231
)
248232
addSrcSpec(
@@ -258,19 +242,11 @@ class AnvilScopesTest : BasePluginTest() {
258242
addSubproject(appProject)
259243
addSubprojects(jvmSub1, jvmSub2)
260244
addSettingsSpec(projectSettings.build())
261-
addBuildSpec(
262-
projectBuild
263-
.addBlock(
264-
"""moduleCheck {
265-
| autoCorrect = false
266-
|}
267-
""".trimMargin()
268-
).build()
269-
)
245+
addBuildSpec(projectBuild.build())
270246
}
271247
.writeIn(testProjectDir.toPath())
272248

273-
shouldSucceed("moduleCheckUnusedDependency")
249+
shouldSucceed("moduleCheck")
274250
}
275251

276252
@Test
@@ -322,8 +298,8 @@ class AnvilScopesTest : BasePluginTest() {
322298
ProjectBuildSpec {
323299
addPlugin("kotlin(\"jvm\")")
324300
addPlugin("id(\"com.squareup.anvil\")")
325-
addProjectDependency("implementation", jvmSub1)
326-
addProjectDependency("implementation", jvmSub2)
301+
addProjectDependency("api", jvmSub1)
302+
addProjectDependency("api", jvmSub2)
327303
}
328304
)
329305
addSrcSpec(
@@ -339,19 +315,11 @@ class AnvilScopesTest : BasePluginTest() {
339315
addSubproject(appProject)
340316
addSubprojects(jvmSub1, jvmSub2)
341317
addSettingsSpec(projectSettings.build())
342-
addBuildSpec(
343-
projectBuild
344-
.addBlock(
345-
"""moduleCheck {
346-
| autoCorrect = false
347-
|}
348-
""".trimMargin()
349-
).build()
350-
)
318+
addBuildSpec(projectBuild.build())
351319
}
352320
.writeIn(testProjectDir.toPath())
353321

354-
shouldSucceed("moduleCheckUnusedDependency")
322+
shouldSucceed("moduleCheck")
355323
}
356324

357325
@Test
@@ -400,8 +368,8 @@ class AnvilScopesTest : BasePluginTest() {
400368
ProjectBuildSpec {
401369
addPlugin("kotlin(\"jvm\")")
402370
addPlugin("id(\"com.squareup.anvil\")")
403-
addProjectDependency("implementation", jvmSub1)
404-
addProjectDependency("implementation", jvmSub2)
371+
addProjectDependency("api", jvmSub1)
372+
addProjectDependency("api", jvmSub2)
405373
}
406374
)
407375
addSrcSpec(
@@ -417,19 +385,11 @@ class AnvilScopesTest : BasePluginTest() {
417385
addSubproject(appProject)
418386
addSubprojects(jvmSub1, jvmSub2)
419387
addSettingsSpec(projectSettings.build())
420-
addBuildSpec(
421-
projectBuild
422-
.addBlock(
423-
"""moduleCheck {
424-
| autoCorrect = false
425-
|}
426-
""".trimMargin()
427-
).build()
428-
)
388+
addBuildSpec(projectBuild.build())
429389
}
430390
.writeIn(testProjectDir.toPath())
431391

432-
shouldFail("moduleCheckUnusedDependency") withTrimmedMessage """:app
392+
shouldFail("moduleCheck") withTrimmedMessage """:app
433393
dependency name source build file
434394
X :lib-2 unusedDependency /app/build.gradle.kts: (8, 3):
435395

0 commit comments

Comments
 (0)