Skip to content

Commit 36b7c72

Browse files
basic support for composer packages (#12)
1 parent 590b725 commit 36b7c72

File tree

7 files changed

+35
-24
lines changed

7 files changed

+35
-24
lines changed

src/main/kotlin/com/vk/modulite/composer/ComposerPackage.kt

+2-8
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,15 @@ data class ComposerPackage(
4444
override fun toString() = name
4545

4646
companion object {
47-
fun fromPsiFile(file: JsonFile): ComposerPackage? {
47+
fun fromPsiFile(file: JsonFile): ComposerPackage {
4848
val values = file.getPropertiesValues()
4949
var name = ""
5050
var description = ""
51-
var isPackage = false
5251
var exportList = emptyList<SymbolName>()
5352
var namespace = ""
5453
var moduliteEnabled = false
5554
values.forEach {
5655
when (it.name) {
57-
"type" -> {
58-
isPackage = it.value?.text?.unquote() == "library"
59-
}
6056
"name" -> {
6157
name = it.value?.text?.unquote() ?: ""
6258
}
@@ -86,9 +82,7 @@ data class ComposerPackage(
8682
}
8783
}
8884
}
89-
if (!isPackage) {
90-
return null
91-
}
85+
9286
return ComposerPackage(
9387
"#$name",
9488
description,

src/main/kotlin/com/vk/modulite/highlighting/ModulitePhpAnnotator.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.vk.modulite.modulite.ModuliteRestrictionChecker
1414
import com.vk.modulite.psi.extensions.files.containingModulite
1515
import com.vk.modulite.utils.fromStubs
1616
import com.vk.modulite.utils.fromTests
17-
import com.vk.modulite.utils.fromVendor
1817

1918
class ModulitePhpAnnotator : Annotator {
2019
companion object {
@@ -55,7 +54,7 @@ class ModulitePhpAnnotator : Annotator {
5554

5655
val filteredReferences = references.filter {
5756
val file = it.containingFile.virtualFile
58-
!file.fromTests() && !file.fromVendor() && !file.fromStubs() && it !is PhpNamespace
57+
!file.fromTests() && !file.fromStubs() && it !is PhpNamespace
5958
}
6059

6160
val problemPsiElement = problemElement ?: reference

src/main/kotlin/com/vk/modulite/index/ComposerFilesIndex.kt

+22-6
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ import com.intellij.util.io.KeyDescriptor
88
import com.vk.modulite.Namespace
99
import com.vk.modulite.SymbolName
1010
import com.vk.modulite.composer.ComposerPackage
11-
import gnu.trove.THashMap
11+
import com.vk.modulite.utils.fromKphpPolyfills
12+
import com.vk.modulite.utils.fromPackages
13+
import com.vk.modulite.utils.fromVendor
1214
import java.io.DataInput
1315
import java.io.DataOutput
1416

1517
class ComposerFilesIndex : FileBasedIndexExtension<String, ComposerPackage>() {
1618
override fun getIndexer(): DataIndexer<String, ComposerPackage, FileContent> {
1719
return DataIndexer { inputData ->
18-
val map = THashMap<String, ComposerPackage>()
20+
val map = hashMapOf<String, ComposerPackage>()
1921

2022
val model = ComposerPackage.fromPsiFile(inputData.psiFile as JsonFile)
21-
if (model != null) {
22-
map[model.name] = model
23-
}
23+
map[model.name] = model
2424

2525
map
2626
}
@@ -65,7 +65,23 @@ class ComposerFilesIndex : FileBasedIndexExtension<String, ComposerPackage>() {
6565
}
6666
}
6767

68-
override fun getInputFilter() = FileBasedIndex.InputFilter { file -> file.name == "composer.json" }
68+
override fun getInputFilter(): FileBasedIndex.InputFilter {
69+
return FileBasedIndex.InputFilter { file ->
70+
if (file.name != "composer.json") {
71+
return@InputFilter false
72+
}
73+
74+
// Перенести проверку в логику
75+
if (file.fromKphpPolyfills()) {
76+
return@InputFilter false
77+
}
78+
79+
// Не оптимальный вариант.
80+
// На самом деле это защита, он индексирования composer текущего проекта.
81+
return@InputFilter file.fromVendor() || file.fromPackages()
82+
}
83+
}
84+
6985
override fun getName() = KEY
7086
override fun getKeyDescriptor(): KeyDescriptor<String> = EnumeratorStringDescriptor.INSTANCE
7187
override fun dependsOnFileContent() = true

src/main/kotlin/com/vk/modulite/inspections/InternalSymbolUsageInspection.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import com.vk.modulite.psi.extensions.files.containingModulite
1717
import com.vk.modulite.psi.extensions.php.symbolName
1818
import com.vk.modulite.utils.fromStubs
1919
import com.vk.modulite.utils.fromTests
20-
import com.vk.modulite.utils.fromVendor
2120
import com.vk.modulite.utils.registerModuliteProblem
2221

2322
class InternalSymbolUsageInspection : LocalInspectionTool() {
@@ -132,7 +131,7 @@ class InternalSymbolUsageInspection : LocalInspectionTool() {
132131

133132
val filteredReferences = references.filter {
134133
val file = it.containingFile.virtualFile
135-
!file.fromTests() && !file.fromVendor() && !file.fromStubs() && it !is PhpNamespace
134+
!file.fromTests() && !file.fromStubs() && it !is PhpNamespace
136135
}
137136

138137
val problemPsiElement = problemElement ?: reference

src/main/kotlin/com/vk/modulite/modulite/ModuliteRestrictionChecker.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.vk.modulite.psi.extensions.files.containingModulite
1212
import com.vk.modulite.psi.extensions.php.symbolName
1313
import com.vk.modulite.utils.fromKphpPolyfills
1414
import com.vk.modulite.utils.fromStubs
15-
import com.vk.modulite.utils.fromVendor
1615

1716
object ModuliteRestrictionChecker {
1817
enum class ViolationTypes {
@@ -112,7 +111,7 @@ object ModuliteRestrictionChecker {
112111

113112
// Не проверяем использования символов, которые определены в
114113
// стабах или являются сторонними.
115-
if (file.fromStubs() || file.fromVendor() || file.fromKphpPolyfills()) {
114+
if (file.fromStubs() || file.fromKphpPolyfills()) {
116115
return result(ViolationTypes.Ok)
117116
}
118117

src/main/kotlin/com/vk/modulite/services/ModuliteDependenciesCollector.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ import com.vk.modulite.psi.PhpRecursiveElementVisitor
2424
import com.vk.modulite.psi.extensions.files.*
2525
import com.vk.modulite.psi.extensions.php.safeFqn
2626
import com.vk.modulite.psi.extensions.php.symbolName
27+
import com.vk.modulite.utils.fromKphpPolyfills
2728
import com.vk.modulite.utils.fromStubs
2829
import com.vk.modulite.utils.fromTests
29-
import com.vk.modulite.utils.fromVendor
3030

3131
class ModuliteDepsDiff(
3232
private val project: Project,
@@ -366,8 +366,8 @@ class ModuliteDependenciesCollector(val project: Project) {
366366
// Если ссылка ссылается на символ из этих папок, то нам не
367367
// нужно добавлять их в зависимости модуля, так как это не
368368
// пользовательский код.
369-
if (containingFile.fromStubs() || containingFile.fromVendor() || containingFile.fromTests()) {
370-
LOG.warn("${reference.fqn} from stubs/vendor/tests")
369+
if (containingFile.fromStubs() || containingFile.fromKphpPolyfills() || containingFile.fromTests()) {
370+
LOG.warn("${reference.fqn} from stubs/kphp-polyfill/tests")
371371
return true
372372
}
373373

src/main/kotlin/com/vk/modulite/utils/Utils.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,17 @@ fun VirtualFile.fromVendor(): Boolean {
135135
}
136136

137137
fun VirtualFile.fromTests(): Boolean {
138-
return path.contains("/tests/")
138+
return path.contains("/tests/") || path.contains("/Tests/")
139139
}
140140

141141
fun VirtualFile.fromKphpPolyfills(): Boolean {
142142
return path.contains("/kphp-polyfills/")
143143
}
144144

145+
fun VirtualFile.fromPackages(): Boolean {
146+
return path.contains("/packages/")
147+
}
148+
145149
inline fun <reified T : PsiElement> PsiElement.childOfType(): T? {
146150
var found: T? = null
147151
PsiTreeUtil.processElements(this) {

0 commit comments

Comments
 (0)