Skip to content

Commit 2590549

Browse files
committed
feat: refactor executable configurations, allow use any tool path
1 parent 3d3cbf7 commit 2590549

File tree

7 files changed

+49
-45
lines changed

7 files changed

+49
-45
lines changed

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

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ 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.FileChooserDescriptor
76
import com.intellij.openapi.options.Configurable
87
import com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil
98
import com.intellij.openapi.project.Project
@@ -17,11 +16,14 @@ import com.intellij.ui.dsl.builder.bindSelected
1716
import com.intellij.ui.dsl.builder.bindText
1817
import com.intellij.ui.dsl.builder.panel
1918
import com.jetbrains.php.lang.inspections.PhpInspectionsUtil
19+
import com.jetbrains.php.tools.quality.QualityToolConfigurationComboBox
20+
import javax.swing.JComponent
2021

2122
class MagoConfigurable(val project: Project) : Configurable {
2223
val settings = project.getService(MagoProjectConfiguration::class.java)
2324
val inspectionProfileManager = InspectionProfileManager.getInstance(project)
2425

26+
val qualityToolConfigurationComboBox = QualityToolConfigurationComboBox(project, getQualityToolType())
2527
var myPanel = panel {
2628
group("Features") {
2729
row {
@@ -60,9 +62,8 @@ class MagoConfigurable(val project: Project) : Configurable {
6062
}
6163
group("Options") {
6264
row {
63-
label("Path to Mago executable")
64-
textFieldWithBrowseButton(FileChooserDescriptor(true, false, false, false, false, false))
65-
.bindText(settings::magoExecutable)
65+
cell(qualityToolConfigurationComboBox)
66+
.label("Mago executable")
6667
.align(AlignX.FILL)
6768
}.layout(RowLayout.PARENT_GRID)
6869
row {
@@ -78,24 +79,38 @@ class MagoConfigurable(val project: Project) : Configurable {
7879
}
7980
}
8081

81-
override fun getDisplayName() = "Mago"
82+
override fun createComponent(): JComponent = myPanel
8283

83-
override fun getHelpTopic() = "reference.settings.php.mago"
84+
override fun isModified(): Boolean {
85+
return myPanel.isModified()
86+
|| qualityToolConfigurationComboBox.selectedItemId != getSavedSelectedConfigurationId()
87+
}
88+
89+
override fun apply() {
90+
updateSelectedConfiguration(qualityToolConfigurationComboBox.selectedItemId)
91+
myPanel.apply()
92+
}
8493

85-
fun getQualityToolType() = MagoQualityToolType.INSTANCE
94+
private fun getQualityToolType() = MagoQualityToolType.INSTANCE
8695

87-
fun getInspectionShortName() = getQualityToolType().getInspectionShortName(project)
96+
override fun reset() {
97+
qualityToolConfigurationComboBox.reset(project, getSavedSelectedConfigurationId())
98+
}
8899

89-
override fun createComponent() = myPanel
100+
private fun getInspectionShortName() = getQualityToolType().getInspectionShortName(project)
90101

91-
override fun isModified() = this.myPanel.isModified()
102+
override fun getDisplayName() = getQualityToolType().getDisplayName()
92103

93-
override fun apply() {
94-
myPanel.apply()
104+
private fun updateSelectedConfiguration(newConfigurationId: String?) {
105+
val projectConfiguration = getQualityToolType().getProjectConfiguration(project)
106+
if (newConfigurationId != projectConfiguration.selectedConfigurationId) {
107+
projectConfiguration.selectedConfigurationId = newConfigurationId
108+
}
95109
}
96110

97-
override fun reset() {
98-
myPanel.reset()
111+
private fun getSavedSelectedConfigurationId(): String? {
112+
return getQualityToolType().getProjectConfiguration(project).selectedConfigurationId
99113
}
114+
100115
}
101116

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,28 @@ import com.github.xepozz.mago.qualityTool.MagoCustomOptionsForm
55
import com.github.xepozz.mago.qualityTool.MagoQualityToolType
66
import com.intellij.openapi.project.Project
77
import com.intellij.openapi.util.Pair
8+
import com.intellij.openapi.vfs.VirtualFile
89
import com.jetbrains.php.PhpBundle
910
import com.jetbrains.php.tools.quality.QualityToolConfigurableForm
1011
import com.jetbrains.php.tools.quality.QualityToolConfiguration
1112
import com.jetbrains.php.tools.quality.QualityToolType
1213

1314
// TODO: change to PhpStanOptionsPanel
1415
class MagoConfigurableForm(project: Project, configuration: MagoConfiguration) :
15-
QualityToolConfigurableForm<MagoConfiguration>(project, configuration, MAGO, "Mago") {
16+
QualityToolConfigurableForm<MagoConfiguration>(project, configuration, MAGO, "mago") {
1617
override fun getQualityToolType(): QualityToolType<QualityToolConfiguration> {
1718
try {
1819
@Suppress("UNCHECKED_CAST")
1920
return MagoQualityToolType.INSTANCE as QualityToolType<QualityToolConfiguration>
2021
} catch (e: Throwable) {
22+
println("error: $e")
2123
throw e
2224
}
2325
}
2426

27+
// allow any files to be selected
28+
override fun isValidToolFile(file: VirtualFile?): Boolean = true
29+
2530
override fun getCustomConfigurable(project: Project, configuration: MagoConfiguration) =
2631
MagoCustomOptionsForm(project, configuration)
2732

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ open class MagoConfigurationBaseManager : QualityToolConfigurationBaseManager<Ma
2121
companion object {
2222
const val MAGO = "Mago"
2323
const val MAGO_PATH = "MagoPath"
24-
const val MAGO_ROOT_NAME = "Mago_settings"
24+
const val MAGO_ROOT_NAME = "MagoSettings"
2525
}
2626
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ class MagoProjectConfiguration : QualityToolProjectConfiguration<MagoConfigurati
1616
PersistentStateComponent<MagoProjectConfiguration> {
1717
var linterEnabled = true
1818
var formatterEnabled = true
19-
var magoExecutable = "vendor/bin/mago"
2019
var additionalParameters = ""
2120

2221
override fun getState() = this

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@ class MagoReformatFile(val project: Project) : QualityToolReformatFile() {
3737

3838
override fun getName() = MagoBundle.message("quality.tool.mago")
3939

40-
override fun getToolPath(settings: QualityToolConfiguration?): String? {
41-
// val settings = settings as? MagoConfiguration ?: return null
42-
return this.settings.magoExecutable
43-
}
40+
override fun getToolPath(settings: QualityToolConfiguration?) = settings?.toolPath
4441

4542
override fun getOptions(project: Project, virtualFiles: Array<VirtualFile>): List<String> {
4643
val projectPath = project.basePath ?: return emptyList()

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,13 @@ open class MagoAnnotatorProxy : QualityToolAnnotator<MagoValidationInspection>()
5959
LOG.warn("isOnTheFly is False")
6060
}
6161

62-
val settings = project.getService(MagoProjectConfiguration::class.java)
63-
6462
return QualityToolAnnotatorInfo(
6563
file,
6664
tool,
6765
inspectionProfile,
6866
project,
6967
configuration.interpreterId,
70-
settings.magoExecutable,
68+
configuration.toolPath,
7169
configuration.maxMessagesPerFile,
7270
configuration.timeout,
7371
false

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

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,39 @@ package com.github.xepozz.mago.qualityTool
22

33
import com.github.xepozz.mago.configuration.MagoConfiguration
44
import com.intellij.openapi.project.Project
5-
import com.intellij.openapi.ui.DialogPanel
65
import com.intellij.openapi.util.Pair
76
import com.intellij.ui.dsl.builder.AlignX
87
import com.intellij.ui.dsl.builder.bindText
98
import com.intellij.ui.dsl.builder.panel
109
import com.jetbrains.php.tools.quality.QualityToolCustomSettings
1110

11+
// a bit useless, but still
1212
class MagoCustomOptionsForm(
1313
private val project: Project,
1414
private val configuration: MagoConfiguration,
1515
) : QualityToolCustomSettings() {
16-
17-
// TODO: maybe use MagoConfiguration?
18-
data class Model(
19-
var customParameters: String = "",
20-
)
21-
22-
private lateinit var panel: DialogPanel
23-
private val model = Model()
24-
25-
override fun createComponent() = panel {
16+
private var myPanel = panel {
2617
row("Other parameters:") {
2718
expandableTextField()
19+
.enabled(false)
2820
.align(AlignX.FILL)
29-
.bindText(model::customParameters)
21+
.bindText(configuration::customParameters)
3022
}
31-
}.also { panel = it }
23+
}
3224

33-
override fun isModified() = panel.isModified()
25+
override fun createComponent() = myPanel
3426

35-
override fun apply() {
36-
panel.apply()
27+
override fun isModified() = myPanel.isModified()
3728

38-
configuration.customParameters = model.customParameters
29+
override fun apply() {
30+
myPanel.apply()
3931
}
4032

4133
override fun reset() {
42-
model.customParameters = configuration.customParameters
43-
44-
panel.reset()
34+
myPanel.reset()
4535
}
4636

4737
override fun getDisplayName() = null
4838

49-
override fun validate() = Pair.create(false, "")
39+
override fun validate() = Pair.create(true, "")
5040
}

0 commit comments

Comments
 (0)