Skip to content

Commit 6ab22c7

Browse files
committed
feat: support mago formatter
1 parent b87dd3a commit 6ab22c7

5 files changed

Lines changed: 57 additions & 18 deletions

File tree

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

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.intellij.ui.dsl.builder.AlignX
88
import com.intellij.ui.dsl.builder.bindText
99
import com.intellij.ui.dsl.builder.panel
1010
import com.jetbrains.php.tools.quality.QualityToolCustomSettings
11-
import javax.swing.JComponent
1211

1312
class MagoCustomOptionsForm(
1413
private val project: Project,
@@ -23,22 +22,15 @@ class MagoCustomOptionsForm(
2322
private lateinit var panel: DialogPanel
2423
private val model = Model()
2524

26-
override fun createComponent(): JComponent {
27-
panel = panel {
28-
row("Other parameters:") {
29-
expandableTextField()
30-
.align(AlignX.FILL)
31-
.bindText(model::customParameters)
32-
}
25+
override fun createComponent() = panel {
26+
row("Other parameters:") {
27+
expandableTextField()
28+
.align(AlignX.FILL)
29+
.bindText(model::customParameters)
3330
}
31+
}.also { panel = it }
3432

35-
return panel
36-
}
37-
38-
override fun isModified(): Boolean {
39-
panel.reset()
40-
return model.customParameters != configuration.customParameters
41-
}
33+
override fun isModified() = panel.isModified()
4234

4335
override fun apply() {
4436
panel.apply()

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ class MagoConfigurable(val project: Project) : Configurable {
5959
row {
6060
cell(OnOffButton())
6161
.label("Linter")
62-
.bindSelected({ false }, {})
62+
.bindSelected({ settings.linterEnabled }, { settings.linterEnabled = (it) })
6363
}.visible(true).enabled(false)
6464

6565
row {
6666
cell(OnOffButton())
6767
.label("Formatter")
68-
.bindSelected({ false }, {})
69-
}.visible(true).enabled(false)
68+
.bindSelected({ settings.formatterEnabled }, { settings.formatterEnabled = (it) })
69+
}
7070
}
7171
group("Options") {
7272
row {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ 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 linterEnabled = true
18+
var formatterEnabled = true
1719

1820
override fun getState() = this
1921

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.github.xepozz.mago.formatter
2+
3+
import com.github.xepozz.mago.config.MagoProjectConfiguration
4+
import com.intellij.openapi.diagnostic.thisLogger
5+
import com.intellij.openapi.progress.ProgressManager
6+
import com.intellij.openapi.util.TextRange
7+
import com.intellij.psi.PsiFile
8+
import com.intellij.psi.codeStyle.ExternalFormatProcessor
9+
import com.jetbrains.php.lang.PhpFileType
10+
11+
class MagoExternalFormatter : ExternalFormatProcessor {
12+
override fun activeForFile(source: PsiFile): Boolean {
13+
val project = source.project
14+
if (project.isDisposed) return false
15+
16+
val projectConfiguration = project.getService(MagoProjectConfiguration::class.java)
17+
if (!projectConfiguration.formatterEnabled) return false
18+
19+
return source.fileType == PhpFileType.INSTANCE
20+
}
21+
22+
override fun format(
23+
source: PsiFile,
24+
range: TextRange,
25+
canChangeWhiteSpacesOnly: Boolean,
26+
keepLineBreaks: Boolean,
27+
enableBulkUpdate: Boolean,
28+
cursorOffset: Int
29+
): TextRange? {
30+
val virtualFile = source.originalFile.virtualFile
31+
if (virtualFile != null) {
32+
thisLogger().debug("Reformatting file: ${virtualFile.path}")
33+
ProgressManager.checkCanceled()
34+
// println("before: ${source.text}")
35+
MagoReformatFile().invoke(source.project, source)
36+
return null
37+
}
38+
return null
39+
}
40+
41+
override fun indent(source: PsiFile, lineStartOffset: Int) = null
42+
43+
override fun getId() = "Mago"
44+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<resource-bundle>messages.MagoBundle</resource-bundle>
1515

1616
<extensions defaultExtensionNs="com.intellij">
17+
<externalFormatProcessor implementation="com.github.xepozz.mago.formatter.MagoExternalFormatter" order="first" />
1718
<projectConfigurable
1819
instance="com.github.xepozz.mago.config.MagoConfigurable"
1920
bundle="messages.MagoBundle"

0 commit comments

Comments
 (0)