@@ -5,10 +5,12 @@ import com.intellij.codeInspection.InspectionProfile
55import com.intellij.execution.configurations.ParametersList
66import com.intellij.openapi.diagnostic.Logger
77import com.intellij.openapi.project.Project
8+ import com.intellij.openapi.util.io.FileUtil
89import com.intellij.psi.PsiFile
910import com.jetbrains.php.tools.quality.QualityToolAnnotator
1011import com.jetbrains.php.tools.quality.QualityToolAnnotatorInfo
1112import com.jetbrains.php.tools.quality.QualityToolConfiguration
13+ import java.io.File
1214
1315open class MagoAnnotatorProxy : QualityToolAnnotator <MagoValidationInspection >() {
1416 companion object {
@@ -22,7 +24,8 @@ open class MagoAnnotatorProxy : QualityToolAnnotator<MagoValidationInspection>()
2224 addConfig(project, settings)
2325
2426 add(" fmt" )
25- addAll(files)
27+ files.map { toWorkspaceRelativePath(project, it) }
28+ .forEach { add(it) }
2629 }
2730 .plus(ParametersList .parse(settings.formatAdditionalParameters))
2831 .apply { println (" format options: ${this .joinToString(" " )} " ) }
@@ -32,13 +35,31 @@ open class MagoAnnotatorProxy : QualityToolAnnotator<MagoValidationInspection>()
3235 addConfig(project, settings)
3336
3437 add(" analyze" )
35- add(filePath)
38+ add(toWorkspaceRelativePath(project, filePath) )
3639 add(" --reporting-format=json" )
3740// filePath?.let { add(it) }
3841 }
3942 .plus(ParametersList .parse(settings.analyzeAdditionalParameters))
4043 .apply { println (" analyze options: ${this .joinToString(" " )} " ) }
4144
45+ private fun toWorkspaceRelativePath (project : Project , absoluteFilePath : String ): String {
46+ val base = project.basePath ? : return ensureMagoPath(absoluteFilePath)
47+ println (" project base: $base " )
48+
49+ val relative = FileUtil .getRelativePath(base, absoluteFilePath, File .separatorChar)
50+ return ensureMagoPath(relative ? : absoluteFilePath)
51+ }
52+
53+ private fun ensureMagoPath (path : String ): String {
54+ return when {
55+ path.isEmpty() -> path
56+ FileUtil .isAbsolute(path) -> path
57+ path.startsWith(" ./" ) || path.startsWith(" .\\ " ) -> path
58+ // Mago ignores relative paths unless they are explicitly prefixed.
59+ else -> " .${File .separator}$path "
60+ }
61+ }
62+
4263 private fun MutableList<String>.addWorkspace (project : Project ) {
4364 val projectPath = updateIfRemoteMappingExists(
4465 project.basePath ? : return ,
0 commit comments