Skip to content

Commit efc3eed

Browse files
committed
feat: rebuild configs
1 parent 22203ab commit efc3eed

File tree

8 files changed

+98
-40
lines changed

8 files changed

+98
-40
lines changed

src/main/kotlin/com/github/xepozz/mago/composer/MagoComposerConfig.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.github.xepozz.mago.configuration.MagoConfigurationManager
55
import com.github.xepozz.mago.qualityTool.MagoQualityToolType
66
import com.github.xepozz.mago.qualityTool.MagoValidationInspection
77
import com.intellij.openapi.project.Project
8-
import com.intellij.openapi.util.SystemInfo
98
import com.jetbrains.php.tools.quality.QualityToolsComposerConfig
109

1110
class MagoComposerConfig : QualityToolsComposerConfig<MagoConfiguration, MagoValidationInspection>(
@@ -20,6 +19,6 @@ class MagoComposerConfig : QualityToolsComposerConfig<MagoConfiguration, MagoVal
2019

2120
companion object {
2221
private const val PACKAGE: String = "carthage-software/mago"
23-
private val RELATIVE_PATH: String = "bin/mago${if (SystemInfo.isWindows) ".exe" else ""}"
22+
private val RELATIVE_PATH: String = "bin/mago"
2423
}
2524
}

src/main/kotlin/com/github/xepozz/mago/configuration/MagoConfigurable.kt

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.xepozz.mago.configuration
33
import com.github.xepozz.mago.MagoBundle
44
import com.github.xepozz.mago.qualityTool.MagoQualityToolType
55
import com.intellij.codeInsight.daemon.HighlightDisplayKey
6+
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
67
import com.intellij.openapi.options.Configurable
78
import com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil
89
import com.intellij.openapi.project.Project
@@ -25,7 +26,12 @@ class MagoConfigurable(val project: Project) : Configurable {
2526

2627
val qualityToolConfigurationComboBox = QualityToolConfigurationComboBox(project, getQualityToolType())
2728
var myPanel = panel {
28-
group("Features") {
29+
row {
30+
browserLink("Download Mago", "https://github.com/carthage-software/mago")
31+
browserLink("Report a plugin bug", "https://github.com/j-plugins/mago-plugin/issues")
32+
browserLink("Request a plugin feature", "https://github.com/j-plugins/mago-plugin/issues")
33+
}
34+
group(MagoBundle.message("settings.inspections.title")) {
2935
row {
3036
cell(
3137
PhpInspectionsUtil.createPanelWithSettingsLink(
@@ -37,7 +43,8 @@ class MagoConfigurable(val project: Project) : Configurable {
3743
ErrorsConfigurableProvider::class.java
3844
) as ErrorsConfigurable?
3945
},
40-
{ it.selectInspectionTool(getInspectionShortName()) })
46+
{ it.selectInspectionTool(getInspectionShortName()) },
47+
)
4148
)
4249
cell(OnOffButton())
4350
.bindSelected({
@@ -47,35 +54,61 @@ class MagoConfigurable(val project: Project) : Configurable {
4754
inspectionProfileManager.currentProfile
4855
.setToolEnabled(getInspectionShortName(), it)
4956
})
50-
}
57+
}.layout(RowLayout.PARENT_GRID)
58+
row {
59+
textField()
60+
.label("Additional parameters")
61+
.bindText(settings::analyzeAdditionalParameters)
62+
.comment("Read more: mago analyze --help")
63+
.align(AlignX.FILL)
64+
}.layout(RowLayout.PARENT_GRID)
65+
}
66+
group(MagoBundle.message("settings.linter.title")) {
5167
row {
5268
cell(OnOffButton())
53-
.label("Linter")
69+
.label(MagoBundle.message("settings.enabled"))
5470
.bindSelected(settings::linterEnabled)
55-
}.visible(true).enabled(false)
56-
71+
}
72+
.layout(RowLayout.PARENT_GRID)
73+
.visible(true)
74+
.enabled(false)
75+
}
76+
group(MagoBundle.message("settings.guard.title")) {
5777
row {
5878
cell(OnOffButton())
59-
.label("Formatter")
60-
.bindSelected(settings::formatterEnabled)
79+
.label(MagoBundle.message("settings.enabled"))
80+
.bindSelected(settings::guardEnabled)
6181
}
82+
.layout(RowLayout.PARENT_GRID)
83+
.visible(true)
84+
.enabled(false)
6285
}
63-
group("Options") {
86+
group(MagoBundle.message("settings.formatter.title")) {
87+
row {
88+
cell(OnOffButton())
89+
.label(MagoBundle.message("settings.enabled"))
90+
.bindSelected(settings::formatterEnabled)
91+
}.layout(RowLayout.PARENT_GRID)
92+
row {
93+
textField()
94+
.label("Additional parameters")
95+
.bindText(settings::formatAdditionalParameters)
96+
.comment("Read more: mago fmt --help")
97+
.align(AlignX.FILL)
98+
}.layout(RowLayout.PARENT_GRID)
99+
}
100+
group(MagoBundle.message("settings.options.title")) {
64101
row {
65102
cell(qualityToolConfigurationComboBox)
66103
.label("Mago executable")
67104
.align(AlignX.FILL)
68105
}.layout(RowLayout.PARENT_GRID)
69106
row {
70-
label("Additional parameters")
71-
textField()
72-
.bindText(settings::additionalParameters)
107+
textFieldWithBrowseButton(FileChooserDescriptorFactory.singleFile())
108+
.bindText(settings::configurationFile)
109+
.label("Configuration file")
73110
.align(AlignX.FILL)
74111
}.layout(RowLayout.PARENT_GRID)
75-
76-
row {
77-
browserLink("Download Mago", "https://github.com/carthage-software/mago")
78-
}
79112
}
80113
}
81114

src/main/kotlin/com/github/xepozz/mago/configuration/MagoProjectConfiguration.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ import com.jetbrains.php.tools.quality.QualityToolProjectConfiguration
1414
@State(name = "MagoProjectConfiguration", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
1515
class MagoProjectConfiguration : QualityToolProjectConfiguration<MagoConfiguration>(),
1616
PersistentStateComponent<MagoProjectConfiguration> {
17+
var guardEnabled = true
1718
var linterEnabled = true
1819
var formatterEnabled = true
19-
var additionalParameters = ""
20+
var analyzeAdditionalParameters = ""
21+
var formatAdditionalParameters = ""
22+
var configurationFile = ""
2023

2124
override fun getState() = this
2225

src/main/kotlin/com/github/xepozz/mago/formatter/MagoReformatFile.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,9 @@ class MagoReformatFile(val project: Project) : QualityToolReformatFile() {
4040
override fun getToolPath(settings: QualityToolConfiguration?) = settings?.toolPath
4141

4242
override fun getOptions(project: Project, virtualFiles: Array<VirtualFile>): List<String> {
43-
val projectPath = project.basePath ?: return emptyList()
4443
val files = virtualFiles.map { it.path }
44+
val settings = project.getService(MagoProjectConfiguration::class.java)
4545

46-
val formatOptions = MagoAnnotatorProxy.getFormatOptions(projectPath, files)
47-
// println("format options: ${formatOptions.joinToString(" ")}")
48-
return formatOptions
46+
return MagoAnnotatorProxy.getFormatOptions(settings, project, files)
4947
}
5048
}

src/main/kotlin/com/github/xepozz/mago/qualityTool/MagoAnnotatorProxy.kt

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.execution.configurations.ParametersList
66
import com.intellij.openapi.diagnostic.Logger
77
import com.intellij.openapi.project.Project
88
import com.intellij.psi.PsiFile
9+
import com.jetbrains.php.composer.ComposerDetectionManager
910
import com.jetbrains.php.tools.quality.QualityToolAnnotator
1011
import com.jetbrains.php.tools.quality.QualityToolAnnotatorInfo
1112
import com.jetbrains.php.tools.quality.QualityToolConfiguration
@@ -16,22 +17,41 @@ open class MagoAnnotatorProxy : QualityToolAnnotator<MagoValidationInspection>()
1617

1718
val INSTANCE = MagoAnnotatorProxy()
1819

19-
fun getFormatOptions(projectPath: String, files: Collection<String>) = buildList {
20-
add("--workspace=$projectPath")
20+
fun getFormatOptions(settings: MagoProjectConfiguration, project: Project, files: Collection<String>) =
21+
buildList {
22+
addWorkspace(project)
23+
addConfig(settings)
2124

22-
add("fmt")
23-
addAll(files)
24-
}
25-
.apply { println("format options: ${this.joinToString(" ")}") }
25+
add("fmt")
26+
addAll(files)
27+
}
28+
.plus(ParametersList.parse(settings.formatAdditionalParameters))
29+
.apply { println("format options: ${this.joinToString(" ")}") }
2630

27-
fun getAnalyzeOptions(projectPath: String, filePath: String?) = buildList {
28-
add("--workspace=$projectPath")
31+
fun getAnalyzeOptions(settings: MagoProjectConfiguration, project: Project, filePath: String?) = buildList {
32+
addWorkspace(project)
33+
addConfig(settings)
2934

3035
add("analyze")
3136
add("--reporting-format=json")
3237
// filePath?.let { add(it) }
3338
}
34-
// .apply { println("analyze options: ${this.joinToString(" ")}") }
39+
.plus(ParametersList.parse(settings.analyzeAdditionalParameters))
40+
.apply { println("analyze options: ${this.joinToString(" ")}") }
41+
42+
private fun MutableList<String>.addWorkspace(project: Project) {
43+
val configs = ComposerDetectionManager.detectComposer(project)
44+
println("configs: $configs")
45+
val projectPath = configs?.main ?: project.basePath ?: return
46+
47+
add("--workspace=$projectPath")
48+
}
49+
50+
private fun MutableList<String>.addConfig(settings: MagoProjectConfiguration) {
51+
if (settings.configurationFile.isNotEmpty()) {
52+
add("--config=${settings.configurationFile}")
53+
}
54+
}
3555
}
3656

3757
override fun getOptions(
@@ -40,11 +60,9 @@ open class MagoAnnotatorProxy : QualityToolAnnotator<MagoValidationInspection>()
4060
profile: InspectionProfile?,
4161
project: Project,
4262
): List<String> {
43-
val projectPath = project.basePath ?: return emptyList()
4463
val settings = project.getService(MagoProjectConfiguration::class.java)
4564

46-
return getAnalyzeOptions(projectPath, filePath)
47-
.plus(ParametersList.parse(settings.additionalParameters))
65+
return getAnalyzeOptions(settings, project, filePath)
4866
}
4967

5068
override fun createAnnotatorInfo(

src/main/kotlin/com/github/xepozz/mago/qualityTool/MagoJsonMessageHandler.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.jetbrains.php.tools.quality.QualityToolMessage
66

77
class MagoJsonMessageHandler {
88
fun parseJson(line: String): List<MagoProblemDescription> {
9+
println("JSON: $line")
910
return JsonParser.parseString(line)
1011
.apply { if (this == null || this.isJsonNull) return emptyList() }
1112
.asJsonObject.get("issues")

src/main/kotlin/com/github/xepozz/mago/qualityTool/MagoMessageProcessor.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.github.xepozz.mago.qualityTool
22

33
import com.intellij.codeHighlighting.HighlightDisplayLevel
4-
import com.intellij.openapi.diagnostic.thisLogger
54
import com.intellij.openapi.util.TextRange
65
import com.jetbrains.php.tools.quality.QualityToolAnnotatorInfo
76
import com.jetbrains.php.tools.quality.QualityToolExecutionException
@@ -39,13 +38,13 @@ class MagoMessageProcessor(private val info: QualityToolAnnotatorInfo<*>) : Qual
3938
// println("done: $buffer")
4039
MagoJsonMessageHandler()
4140
.parseJson(buffer.toString())
42-
.apply {
43-
thisLogger<MagoMessageProcessor>().error("files: ${map { it.file }}, current: ${file.virtualFile.canonicalPath}")
44-
}
41+
// .apply {
42+
// thisLogger<MagoMessageProcessor>().info("files: ${map { it.file }}, current: ${file.virtualFile.canonicalPath}")
43+
// }
4544
.filter {
4645
val currentFilePath = file.virtualFile.canonicalPath ?: return@filter false
4746

48-
thisLogger<MagoMessageProcessor>().error("compare ${it.file} ends with $currentFilePath")
47+
// thisLogger<MagoMessageProcessor>().info("compare ${it.file} ends with $currentFilePath")
4948
it.file.endsWith(currentFilePath)
5049
}
5150
.map { problem ->

src/main/resources/messages/MagoBundle.properties

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@ quality.tool.mago=Mago
55
quality.tool.mago.quick.fix.text=Mago: fix the whole file
66
quality.tool.settings.link.inspection={0} inspections
77

8+
settings.enabled=Enabled
9+
settings.inspections.title=Inspections
10+
settings.linter.title=Liner
11+
settings.formatter.title=Formatter
12+
settings.options.title=Options
13+
settings.guard.title=Guard
14+

0 commit comments

Comments
 (0)