Skip to content

Commit 00b93a4

Browse files
committed
Show notification if provided config is invalid
1 parent 857f0cb commit 00b93a4

File tree

1 file changed

+47
-11
lines changed

1 file changed

+47
-11
lines changed

Diff for: src/main/kotlin/io/gitlab/arturbosch/detekt/DetektAnnotator.kt

+47-11
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,15 @@ package io.gitlab.arturbosch.detekt
22

33
import com.intellij.lang.annotation.AnnotationHolder
44
import com.intellij.lang.annotation.ExternalAnnotator
5+
import com.intellij.notification.Notification
6+
import com.intellij.notification.NotificationType
7+
import com.intellij.openapi.actionSystem.AnAction
8+
import com.intellij.openapi.actionSystem.AnActionEvent
9+
import com.intellij.openapi.application.ApplicationManager
510
import com.intellij.openapi.command.WriteCommandAction
611
import com.intellij.openapi.fileEditor.FileDocumentManager
12+
import com.intellij.openapi.options.newEditor.SettingsDialog
13+
import com.intellij.openapi.project.Project
714
import com.intellij.openapi.util.Computable
815
import com.intellij.openapi.util.TextRange
916
import com.intellij.openapi.vfs.VirtualFile
@@ -12,12 +19,14 @@ import io.gitlab.arturbosch.detekt.api.Finding
1219
import io.gitlab.arturbosch.detekt.api.TextLocation
1320
import io.gitlab.arturbosch.detekt.cli.CliArgs
1421
import io.gitlab.arturbosch.detekt.cli.loadConfiguration
22+
import io.gitlab.arturbosch.detekt.config.DetektConfig
1523
import io.gitlab.arturbosch.detekt.config.DetektConfigStorage
1624
import io.gitlab.arturbosch.detekt.config.NoAutoCorrectConfig
1725
import io.gitlab.arturbosch.detekt.core.DetektFacade
1826
import io.gitlab.arturbosch.detekt.core.FileProcessorLocator
1927
import io.gitlab.arturbosch.detekt.core.ProcessingSettings
2028
import io.gitlab.arturbosch.detekt.core.RuleSetLocator
29+
import java.io.File
2130
import java.nio.file.Paths
2231
import java.util.concurrent.ForkJoinPool
2332

@@ -52,9 +61,12 @@ class DetektAnnotator : ExternalAnnotator<PsiFile, List<Finding>>() {
5261
configuration: DetektConfigStorage
5362
): List<Finding> {
5463
val virtualFile = collectedInfo.originalFile.virtualFile
55-
val settings = processingSettings(virtualFile, configuration)
56-
val result = createFacade(settings, configuration).run()
57-
return result.findings.flatMap { it.value }
64+
val settings = processingSettings(collectedInfo.project, virtualFile, configuration)
65+
66+
return settings?.let {
67+
val result = createFacade(settings, configuration).run()
68+
result.findings.flatMap { it.value }
69+
} ?: emptyList()
5870
}
5971

6072
override fun apply(
@@ -76,19 +88,43 @@ class DetektAnnotator : ExternalAnnotator<PsiFile, List<Finding>>() {
7688

7789
private fun TextLocation.toTextRange(): TextRange = TextRange.create(start, end)
7890

79-
private fun processingSettings(virtualFile: VirtualFile,
80-
configStorage: DetektConfigStorage) =
81-
ProcessingSettings(
91+
private fun processingSettings(
92+
project: Project,
93+
virtualFile: VirtualFile,
94+
configStorage: DetektConfigStorage
95+
): ProcessingSettings? {
96+
if (configStorage.rulesPath.isNotEmpty()) {
97+
val path = File(configStorage.rulesPath)
98+
if (!path.exists()) {
99+
val n = Notification(
100+
"Detekt",
101+
"Configuration file not found",
102+
"The provided detekt configuration file <b>${path.absolutePath}</b> does not exist. Skipping detekt run.",
103+
NotificationType.WARNING
104+
)
105+
n.addAction(object : AnAction("Open Detekt settings") {
106+
override fun actionPerformed(e: AnActionEvent) {
107+
val dialog = SettingsDialog(project, "lol", DetektConfig(project), true, true)
108+
ApplicationManager.getApplication().invokeLater(dialog::show);
109+
}
110+
})
111+
n.notify(project)
112+
}
113+
return null
114+
}
115+
116+
117+
118+
return ProcessingSettings(
82119
inputPath = Paths.get(virtualFile.path),
83120
config = NoAutoCorrectConfig(CliArgs().apply {
84-
if (configStorage.rulesPath.isNotEmpty()) {
85-
config = configStorage.rulesPath
86-
failFast = configStorage.failFast
87-
buildUponDefaultConfig = configStorage.buildUponDefaultConfig
88-
}
121+
config = configStorage.rulesPath
122+
failFast = configStorage.failFast
123+
buildUponDefaultConfig = configStorage.buildUponDefaultConfig
89124
}.loadConfiguration()),
90125
executorService = ForkJoinPool.commonPool()
91126
)
127+
}
92128

93129
private fun createFacade(settings: ProcessingSettings, configuration: DetektConfigStorage): DetektFacade {
94130
var providers = RuleSetLocator(settings).load()

0 commit comments

Comments
 (0)