Skip to content

Commit 51c2598

Browse files
committed
Do not run inspections that require symbols outside the project
1 parent b9f60be commit 51c2598

10 files changed

+46
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# intellij-runescript Changelog
22

33
## [Unreleased]
4+
### Changed
5+
- Inspections that require symbols will no longer run on files outside the project.
46

57
## [1.3.0] - 2023-08-30
68

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptMissingScriptSymbolInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.intellij.refactoring.suggested.startOffset
1010
import io.runescript.plugin.ide.RsBundle
1111
import io.runescript.plugin.lang.psi.RsScript
1212
import io.runescript.plugin.lang.psi.RsVisitor
13+
import io.runescript.plugin.lang.psi.isSourceFile
1314
import io.runescript.plugin.lang.psi.qualifiedName
1415
import io.runescript.plugin.lang.psi.type.RsPrimitiveType
1516
import io.runescript.plugin.symbollang.psi.index.RsSymbolIndex
@@ -20,6 +21,7 @@ class RuneScriptMissingScriptSymbolInspection : LocalInspectionTool() {
2021
return object : RsVisitor() {
2122

2223
override fun visitScript(o: RsScript) {
24+
if (!o.isSourceFile()) return
2325
val name = o.qualifiedName
2426
val length = o.rbracket.endOffset - o.lbracket.startOffset
2527
val range = TextRange.from(o.lbracket.startOffsetInParent, length)

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptTypeCheckerInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.intellij.codeInspection.ProblemsHolder
55
import com.intellij.psi.PsiElement
66
import com.intellij.psi.PsiElementVisitor
77
import io.runescript.plugin.lang.psi.RsVisitor
8+
import io.runescript.plugin.lang.psi.isSourceFile
89
import io.runescript.plugin.lang.psi.type.typeErrors
910

1011
class RuneScriptTypeCheckerInspection : LocalInspectionTool() {
@@ -13,6 +14,7 @@ class RuneScriptTypeCheckerInspection : LocalInspectionTool() {
1314
return object : RsVisitor() {
1415

1516
override fun visitElement(element: PsiElement) {
17+
if (!element.isSourceFile()) return
1618
element.typeErrors.forEach {
1719
holder.registerProblem(it.element, it.message)
1820
}

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedClientscriptInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import io.runescript.plugin.ide.RsBundle
1313
import io.runescript.plugin.lang.psi.RsHookFragment
1414
import io.runescript.plugin.lang.psi.RsScript
1515
import io.runescript.plugin.lang.psi.RsVisitor
16+
import io.runescript.plugin.lang.psi.isSourceFile
1617

1718
class RuneScriptUnresolvedClientscriptInspection : LocalInspectionTool() {
1819

1920
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
2021
return object : RsVisitor() {
2122
override fun visitHookFragment(o: RsHookFragment) {
23+
if (!o.isSourceFile()) return
2224
val resolvedClientScript = o.reference!!.resolve()
2325
if (resolvedClientScript == null) {
2426
holder.registerProblem(o.nameLiteral,

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedCommandInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import com.intellij.psi.PsiElementVisitor
77
import io.runescript.plugin.ide.RsBundle
88
import io.runescript.plugin.lang.psi.RsCommandExpression
99
import io.runescript.plugin.lang.psi.RsVisitor
10+
import io.runescript.plugin.lang.psi.isSourceFile
1011

1112
class RuneScriptUnresolvedCommandInspection : LocalInspectionTool() {
1213

1314
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
1415
return object : RsVisitor() {
1516
override fun visitCommandExpression(o: RsCommandExpression) {
17+
if (!o.isSourceFile()) return
1618
val resolvedCommand = o.reference!!.resolve()
1719
if (resolvedCommand == null) {
1820
holder.registerProblem(o.nameLiteral,

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedConstantInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import com.intellij.psi.PsiElementVisitor
77
import io.runescript.plugin.ide.RsBundle
88
import io.runescript.plugin.lang.psi.RsConstantExpression
99
import io.runescript.plugin.lang.psi.RsVisitor
10+
import io.runescript.plugin.lang.psi.isSourceFile
1011

1112
class RuneScriptUnresolvedConstantInspection : LocalInspectionTool() {
1213

1314
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
1415
return object : RsVisitor() {
1516
override fun visitConstantExpression(o: RsConstantExpression) {
17+
if (!o.isSourceFile()) return
1618
val reference = o.reference ?: return
1719
if (reference.resolve() == null) {
1820
holder.registerProblem(o,

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedProcedureInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import io.runescript.plugin.ide.RsBundle
1313
import io.runescript.plugin.lang.psi.RsGosubExpression
1414
import io.runescript.plugin.lang.psi.RsScript
1515
import io.runescript.plugin.lang.psi.RsVisitor
16+
import io.runescript.plugin.lang.psi.isSourceFile
1617

1718
class RuneScriptUnresolvedProcedureInspection : LocalInspectionTool() {
1819

1920
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
2021
return object : RsVisitor() {
2122
override fun visitGosubExpression(o: RsGosubExpression) {
23+
if (!o.isSourceFile()) return
2224
val resolvedGosub = o.reference!!.resolve()
2325
if (resolvedGosub == null) {
2426
holder.registerProblem(o.nameLiteral,

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedReferenceInspection.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import io.runescript.plugin.ide.RsBundle
88
import io.runescript.plugin.lang.psi.RsDynamicExpression
99
import io.runescript.plugin.lang.psi.RsStringLiteralExpression
1010
import io.runescript.plugin.lang.psi.RsVisitor
11+
import io.runescript.plugin.lang.psi.isSourceFile
1112

1213
class RuneScriptUnresolvedReferenceInspection : LocalInspectionTool() {
1314

1415
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
1516
return object : RsVisitor() {
1617
override fun visitStringLiteralExpression(o: RsStringLiteralExpression) {
18+
if (!o.isSourceFile()) return
1719
val reference = o.reference ?: return
1820
val resolved = reference.resolve()
1921
if (resolved == null) {
@@ -25,6 +27,7 @@ class RuneScriptUnresolvedReferenceInspection : LocalInspectionTool() {
2527
}
2628
}
2729
override fun visitDynamicExpression(o: RsDynamicExpression) {
30+
if (!o.isSourceFile()) return
2831
val reference = o.reference?: return
2932
val resolved = reference.resolve()
3033
if (resolved==null) {

src/main/kotlin/io/runescript/plugin/ide/inspections/RuneScriptUnresolvedScopedVariableInspection.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import com.intellij.psi.PsiElementVisitor
77
import io.runescript.plugin.ide.RsBundle
88
import io.runescript.plugin.lang.psi.RsScopedVariableExpression
99
import io.runescript.plugin.lang.psi.RsVisitor
10+
import io.runescript.plugin.lang.psi.isSourceFile
1011

1112
class RuneScriptUnresolvedScopedVariableInspection : LocalInspectionTool() {
1213

1314
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
1415
return object : RsVisitor() {
1516
override fun visitScopedVariableExpression(o: RsScopedVariableExpression) {
17+
if (!o.isSourceFile()) return
1618
val reference = o.reference ?: return
1719
if (reference.resolve() == null) {
1820
holder.registerProblem(o,

src/main/kotlin/io/runescript/plugin/lang/psi/psi.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package io.runescript.plugin.lang.psi
22

3+
import com.intellij.openapi.project.Project
4+
import com.intellij.openapi.project.modules
5+
import com.intellij.openapi.roots.ModuleRootManager
6+
import com.intellij.openapi.roots.ProjectFileIndex
7+
import com.intellij.psi.PsiElement
38
import com.intellij.psi.util.parentOfType
9+
import io.runescript.plugin.ide.sdk.RsSdkType
410

511
val RsStatement.controlFlowHolder: RsControlFlowHolder?
612
get() = parentOfType<RsControlFlowHolder>()
@@ -67,3 +73,24 @@ fun RsLocalVariableExpression.isForArrayAccess(): Boolean {
6773
val parent = parent
6874
return parent is RsArrayAccessExpression && this === parent.expressionList[0]
6975
}
76+
77+
fun Project.isRsProject(): Boolean {
78+
if (modules.size != 1) {
79+
return false
80+
}
81+
val moduleRootManager = ModuleRootManager.getInstance(modules[0])
82+
val sdk = moduleRootManager.sdk
83+
return sdk?.sdkType == RsSdkType.find()
84+
}
85+
86+
fun PsiElement.isSourceFile(): Boolean {
87+
if (!project.isRsProject()) {
88+
return false
89+
}
90+
val containingFile = containingFile?.virtualFile ?: return false
91+
val fileIndex = ProjectFileIndex.getInstance(project)
92+
if (fileIndex.isExcluded(containingFile)) {
93+
return false
94+
}
95+
return fileIndex.isInContent(containingFile)
96+
}

0 commit comments

Comments
 (0)