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+ }
0 commit comments