diff --git a/src/main/kotlin/com/vk/modulite/composer/ComposerPackage.kt b/src/main/kotlin/com/vk/modulite/composer/ComposerPackage.kt index 87a171a..4260d88 100644 --- a/src/main/kotlin/com/vk/modulite/composer/ComposerPackage.kt +++ b/src/main/kotlin/com/vk/modulite/composer/ComposerPackage.kt @@ -44,19 +44,15 @@ data class ComposerPackage( override fun toString() = name companion object { - fun fromPsiFile(file: JsonFile): ComposerPackage? { + fun fromPsiFile(file: JsonFile): ComposerPackage { val values = file.getPropertiesValues() var name = "" var description = "" - var isPackage = false var exportList = emptyList() var namespace = "" var moduliteEnabled = false values.forEach { when (it.name) { - "type" -> { - isPackage = it.value?.text?.unquote() == "library" - } "name" -> { name = it.value?.text?.unquote() ?: "" } @@ -86,9 +82,7 @@ data class ComposerPackage( } } } - if (!isPackage) { - return null - } + return ComposerPackage( "#$name", description, diff --git a/src/main/kotlin/com/vk/modulite/highlighting/ModulitePhpAnnotator.kt b/src/main/kotlin/com/vk/modulite/highlighting/ModulitePhpAnnotator.kt index 290dee7..d0c4298 100644 --- a/src/main/kotlin/com/vk/modulite/highlighting/ModulitePhpAnnotator.kt +++ b/src/main/kotlin/com/vk/modulite/highlighting/ModulitePhpAnnotator.kt @@ -14,7 +14,6 @@ import com.vk.modulite.modulite.ModuliteRestrictionChecker import com.vk.modulite.psi.extensions.files.containingModulite import com.vk.modulite.utils.fromStubs import com.vk.modulite.utils.fromTests -import com.vk.modulite.utils.fromVendor class ModulitePhpAnnotator : Annotator { companion object { @@ -55,7 +54,7 @@ class ModulitePhpAnnotator : Annotator { val filteredReferences = references.filter { val file = it.containingFile.virtualFile - !file.fromTests() && !file.fromVendor() && !file.fromStubs() && it !is PhpNamespace + !file.fromTests() && !file.fromStubs() && it !is PhpNamespace } val problemPsiElement = problemElement ?: reference diff --git a/src/main/kotlin/com/vk/modulite/index/ComposerFilesIndex.kt b/src/main/kotlin/com/vk/modulite/index/ComposerFilesIndex.kt index 2000250..d3e1852 100644 --- a/src/main/kotlin/com/vk/modulite/index/ComposerFilesIndex.kt +++ b/src/main/kotlin/com/vk/modulite/index/ComposerFilesIndex.kt @@ -8,19 +8,19 @@ import com.intellij.util.io.KeyDescriptor import com.vk.modulite.Namespace import com.vk.modulite.SymbolName import com.vk.modulite.composer.ComposerPackage -import gnu.trove.THashMap +import com.vk.modulite.utils.fromKphpPolyfills +import com.vk.modulite.utils.fromPackages +import com.vk.modulite.utils.fromVendor import java.io.DataInput import java.io.DataOutput class ComposerFilesIndex : FileBasedIndexExtension() { override fun getIndexer(): DataIndexer { return DataIndexer { inputData -> - val map = THashMap() + val map = hashMapOf() val model = ComposerPackage.fromPsiFile(inputData.psiFile as JsonFile) - if (model != null) { - map[model.name] = model - } + map[model.name] = model map } @@ -65,7 +65,23 @@ class ComposerFilesIndex : FileBasedIndexExtension() { } } - override fun getInputFilter() = FileBasedIndex.InputFilter { file -> file.name == "composer.json" } + override fun getInputFilter(): FileBasedIndex.InputFilter { + return FileBasedIndex.InputFilter { file -> + if (file.name != "composer.json") { + return@InputFilter false + } + + // Перенести проверку в логику + if (file.fromKphpPolyfills()) { + return@InputFilter false + } + + // Не оптимальный вариант. + // На самом деле это защита, он индексирования composer текущего проекта. + return@InputFilter file.fromVendor() || file.fromPackages() + } + } + override fun getName() = KEY override fun getKeyDescriptor(): KeyDescriptor = EnumeratorStringDescriptor.INSTANCE override fun dependsOnFileContent() = true diff --git a/src/main/kotlin/com/vk/modulite/inspections/InternalSymbolUsageInspection.kt b/src/main/kotlin/com/vk/modulite/inspections/InternalSymbolUsageInspection.kt index 0c09d79..acafea4 100644 --- a/src/main/kotlin/com/vk/modulite/inspections/InternalSymbolUsageInspection.kt +++ b/src/main/kotlin/com/vk/modulite/inspections/InternalSymbolUsageInspection.kt @@ -17,7 +17,6 @@ import com.vk.modulite.psi.extensions.files.containingModulite import com.vk.modulite.psi.extensions.php.symbolName import com.vk.modulite.utils.fromStubs import com.vk.modulite.utils.fromTests -import com.vk.modulite.utils.fromVendor import com.vk.modulite.utils.registerModuliteProblem class InternalSymbolUsageInspection : LocalInspectionTool() { @@ -132,7 +131,7 @@ class InternalSymbolUsageInspection : LocalInspectionTool() { val filteredReferences = references.filter { val file = it.containingFile.virtualFile - !file.fromTests() && !file.fromVendor() && !file.fromStubs() && it !is PhpNamespace + !file.fromTests() && !file.fromStubs() && it !is PhpNamespace } val problemPsiElement = problemElement ?: reference diff --git a/src/main/kotlin/com/vk/modulite/modulite/ModuliteRestrictionChecker.kt b/src/main/kotlin/com/vk/modulite/modulite/ModuliteRestrictionChecker.kt index 616ae9c..ab67621 100644 --- a/src/main/kotlin/com/vk/modulite/modulite/ModuliteRestrictionChecker.kt +++ b/src/main/kotlin/com/vk/modulite/modulite/ModuliteRestrictionChecker.kt @@ -12,7 +12,6 @@ import com.vk.modulite.psi.extensions.files.containingModulite import com.vk.modulite.psi.extensions.php.symbolName import com.vk.modulite.utils.fromKphpPolyfills import com.vk.modulite.utils.fromStubs -import com.vk.modulite.utils.fromVendor object ModuliteRestrictionChecker { enum class ViolationTypes { @@ -112,7 +111,7 @@ object ModuliteRestrictionChecker { // Не проверяем использования символов, которые определены в // стабах или являются сторонними. - if (file.fromStubs() || file.fromVendor() || file.fromKphpPolyfills()) { + if (file.fromStubs() || file.fromKphpPolyfills()) { return result(ViolationTypes.Ok) } diff --git a/src/main/kotlin/com/vk/modulite/services/ModuliteDependenciesCollector.kt b/src/main/kotlin/com/vk/modulite/services/ModuliteDependenciesCollector.kt index 3534d52..9a57db6 100644 --- a/src/main/kotlin/com/vk/modulite/services/ModuliteDependenciesCollector.kt +++ b/src/main/kotlin/com/vk/modulite/services/ModuliteDependenciesCollector.kt @@ -24,9 +24,9 @@ import com.vk.modulite.psi.PhpRecursiveElementVisitor import com.vk.modulite.psi.extensions.files.* import com.vk.modulite.psi.extensions.php.safeFqn import com.vk.modulite.psi.extensions.php.symbolName +import com.vk.modulite.utils.fromKphpPolyfills import com.vk.modulite.utils.fromStubs import com.vk.modulite.utils.fromTests -import com.vk.modulite.utils.fromVendor class ModuliteDepsDiff( private val project: Project, @@ -366,8 +366,8 @@ class ModuliteDependenciesCollector(val project: Project) { // Если ссылка ссылается на символ из этих папок, то нам не // нужно добавлять их в зависимости модуля, так как это не // пользовательский код. - if (containingFile.fromStubs() || containingFile.fromVendor() || containingFile.fromTests()) { - LOG.warn("${reference.fqn} from stubs/vendor/tests") + if (containingFile.fromStubs() || containingFile.fromKphpPolyfills() || containingFile.fromTests()) { + LOG.warn("${reference.fqn} from stubs/kphp-polyfill/tests") return true } diff --git a/src/main/kotlin/com/vk/modulite/utils/Utils.kt b/src/main/kotlin/com/vk/modulite/utils/Utils.kt index 1f8e0b5..ac426ab 100644 --- a/src/main/kotlin/com/vk/modulite/utils/Utils.kt +++ b/src/main/kotlin/com/vk/modulite/utils/Utils.kt @@ -135,13 +135,17 @@ fun VirtualFile.fromVendor(): Boolean { } fun VirtualFile.fromTests(): Boolean { - return path.contains("/tests/") + return path.contains("/tests/") || path.contains("/Tests/") } fun VirtualFile.fromKphpPolyfills(): Boolean { return path.contains("/kphp-polyfills/") } +fun VirtualFile.fromPackages(): Boolean { + return path.contains("/packages/") +} + inline fun PsiElement.childOfType(): T? { var found: T? = null PsiTreeUtil.processElements(this) {