Skip to content

Commit 9d94f06

Browse files
committed
Only search within the same module when looking up symbols
1 parent 6866405 commit 9d94f06

17 files changed

+53
-28
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
- Allow for clientscript/command to be looked up in "Search Everywhere".
2222
- Fixed namedobj vs obj when type checking multiple args.
2323
- Allow '<' to be escaped in string literals.
24+
- Only search within the same module when looking up symbols.
2425

2526
## [1.5.1] - 2024-04-15
2627

src/main/kotlin/io/runescript/plugin/ide/doc/RsDocReference.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.runescript.plugin.ide.doc
22

3+
import com.intellij.openapi.module.Module
4+
import com.intellij.openapi.module.ModuleUtil
5+
import com.intellij.openapi.module.ModuleUtilCore
36
import com.intellij.openapi.project.Project
47
import com.intellij.openapi.util.TextRange
58
import com.intellij.psi.PsiElement
@@ -22,7 +25,8 @@ class RsDocReference(element: RsDocName) : PsiPolyVariantReferenceBase<RsDocName
2225
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
2326
val typeName = (element.firstChild as? RsDocName)?.text
2427
val elementName = element.lastChild.text
25-
return resolve(element.project, element.getContainingDoc().owner, typeName, elementName)
28+
val module = ModuleUtil.findModuleForPsiElement(element) ?: return emptyArray()
29+
return resolve(element.project, module, element.getContainingDoc().owner, typeName, elementName)
2630
.map { PsiElementResolveResult(it) }
2731
.toTypedArray()
2832
}
@@ -40,7 +44,7 @@ class RsDocReference(element: RsDocName) : PsiPolyVariantReferenceBase<RsDocName
4044
}
4145

4246
companion object {
43-
fun resolve(project: Project, owner: RsScript?, typeName: String?, elementName: String): Array<PsiElement> {
47+
fun resolve(project: Project, module: Module, owner: RsScript?, typeName: String?, elementName: String): Array<PsiElement> {
4448
if (typeName == null) {
4549
return owner
4650
?.parameterList
@@ -61,7 +65,7 @@ class RsDocReference(element: RsDocName) : PsiPolyVariantReferenceBase<RsDocName
6165
scriptIndexKey,
6266
elementName,
6367
project,
64-
GlobalSearchScope.allScope(project),
68+
GlobalSearchScope.moduleScope(module),
6569
RsScript::class.java
6670
)
6771
return scripts.toTypedArray()
@@ -70,7 +74,7 @@ class RsDocReference(element: RsDocName) : PsiPolyVariantReferenceBase<RsDocName
7074
RsSymbolIndex.KEY,
7175
elementName,
7276
project,
73-
GlobalSearchScope.allScope(project),
77+
GlobalSearchScope.moduleScope(module),
7478
RsSymSymbol::class.java
7579
)
7680
return configs

src/main/kotlin/io/runescript/plugin/ide/doc/RsDocumentationProvider.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.lang.documentation.DocumentationMarkup.DEFINITION_START
77
import com.intellij.lang.documentation.DocumentationSettings
88
import com.intellij.openapi.editor.colors.TextAttributesKey
99
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil
10+
import com.intellij.openapi.module.ModuleUtil
1011
import com.intellij.psi.*
1112
import com.intellij.psi.util.childrenOfType
1213
import com.intellij.psi.util.parentOfType
@@ -150,13 +151,14 @@ class RsDocumentationProvider : AbstractDocumentationProvider() {
150151
}
151152
val typeName = parts[0]
152153
val elementName = parts[1]
154+
val module = ModuleUtil.findModuleForPsiElement(context) ?: return null
153155
if (typeName == "parameter") {
154156
// TODO(Walied): Find a better way to do this
155157
val doc = context.containingFile.findElementAt(parts[2].toInt())?.parentOfType<RsDoc>() ?: return null
156158
val owner = doc.owner
157-
return RsDocReference.resolve(context.project, owner, null, elementName).singleOrNull()
159+
return RsDocReference.resolve(context.project, module, owner, null, elementName).singleOrNull()
158160
} else {
159-
return RsDocReference.resolve(context.project, null, typeName, elementName).singleOrNull()
161+
return RsDocReference.resolve(context.project, module, null, typeName, elementName).singleOrNull()
160162
}
161163
}
162164
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class RuneScriptMissingScriptSymbolInspection : LocalInspectionTool() {
2222
val name = o.qualifiedName
2323
val length = o.rbracket.endOffset - o.lbracket.startOffset
2424
val range = TextRange.from(o.lbracket.startOffsetInParent, length)
25-
if (RsSymbolIndex.lookup(o.project, RsPrimitiveType.CLIENTSCRIPT, name) == null) {
25+
if (RsSymbolIndex.lookup(o, RsPrimitiveType.CLIENTSCRIPT, name) == null) {
2626
holder.registerProblem(
2727
o,
2828
RsBundle.message("inspection.error.script.symbol.not.found", name),

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.runescript.plugin.lang.psi.mixin
22

33
import com.intellij.extapi.psi.StubBasedPsiElementBase
44
import com.intellij.lang.ASTNode
5+
import com.intellij.openapi.module.ModuleUtil
56
import com.intellij.psi.PsiElement
67
import com.intellij.psi.PsiReference
78
import com.intellij.psi.search.GlobalSearchScope
@@ -21,7 +22,8 @@ abstract class RsScopedVariableExpressionMixin : StubBasedPsiElementBase<RsScope
2122
constructor(stub: RsScopedVariableExpressionStub?, type: IElementType?, node: ASTNode?) : super(stub, type, node)
2223

2324
override fun getUseScope(): SearchScope {
24-
return GlobalSearchScope.projectScope(project)
25+
val module = ModuleUtil.findModuleForPsiElement(this) ?: return super.getUseScope()
26+
return GlobalSearchScope.moduleScope(module)
2527
}
2628

2729
override fun getReference(): PsiReference? {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.intellij.extapi.psi.StubBasedPsiElementBase
44
import com.intellij.ide.projectView.PresentationData
55
import com.intellij.lang.ASTNode
66
import com.intellij.navigation.ItemPresentation
7+
import com.intellij.openapi.module.ModuleUtil
78
import com.intellij.psi.PsiElement
89
import com.intellij.psi.ResolveState
910
import com.intellij.psi.scope.PsiScopeProcessor
@@ -55,7 +56,8 @@ abstract class RsScriptMixin : StubBasedPsiElementBase<RsScriptStub>, RsScript {
5556
}
5657

5758
override fun getUseScope(): SearchScope {
58-
return GlobalSearchScope.projectScope(project)
59+
val module = ModuleUtil.findModuleForPsiElement(this) ?: return super.getUseScope()
60+
return GlobalSearchScope.moduleScope(module)
5961
}
6062

6163
override fun setName(name: String): PsiElement {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.runescript.plugin.lang.psi.refs
22

33
import com.intellij.codeInsight.lookup.LookupElement
4+
import com.intellij.openapi.module.ModuleUtil
45
import com.intellij.psi.PsiElement
56
import com.intellij.psi.PsiElementResolveResult
67
import com.intellij.psi.PsiPolyVariantReferenceBase
@@ -14,7 +15,8 @@ import io.runescript.plugin.lang.stubs.index.RsCommandScriptIndex
1415
class RsCommandExpressionReference(element: RsCommandExpression) : PsiPolyVariantReferenceBase<RsCommandExpression>(element, element.nameLiteral.textRangeInParent) {
1516

1617
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
17-
val elements = StubIndex.getElements(RsCommandScriptIndex.KEY, element.nameLiteral.text, element.project, GlobalSearchScope.allScope(element.project), RsScript::class.java)
18+
val module = ModuleUtil.findModuleForPsiElement(element) ?: return emptyArray()
19+
val elements = StubIndex.getElements(RsCommandScriptIndex.KEY, element.nameLiteral.text, element.project, GlobalSearchScope.moduleScope(module), RsScript::class.java)
1820
return elements.map { PsiElementResolveResult(it) }.toTypedArray()
1921
}
2022

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class RsConstantReference(element: RsConstantExpression) :
1414
}
1515

1616
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
17-
val symbol = RsSymbolIndex.lookup(element.project, RsPrimitiveType.CONSTANT, element.name!!)
17+
val symbol = RsSymbolIndex.lookup(element, RsPrimitiveType.CONSTANT, element.name!!)
1818
?: return emptyArray()
1919
return arrayOf(PsiElementResolveResult(symbol))
2020
}

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

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

33
import com.intellij.codeInsight.lookup.LookupElement
4+
import com.intellij.openapi.module.ModuleUtil
45
import com.intellij.psi.*
56
import com.intellij.psi.search.GlobalSearchScope
67
import com.intellij.psi.stubs.StubIndex
@@ -13,6 +14,7 @@ import io.runescript.plugin.lang.psi.type.RsPrimitiveType
1314
import io.runescript.plugin.lang.psi.type.RsType
1415
import io.runescript.plugin.lang.psi.type.type
1516
import io.runescript.plugin.lang.stubs.index.RsCommandScriptIndex
17+
import io.runescript.plugin.lang.stubs.index.RsProcScriptIndex
1618
import io.runescript.plugin.symbollang.psi.index.RsSymbolIndex
1719

1820
class RsDynamicExpressionReference(element: RsDynamicExpression) : PsiPolyVariantReferenceBase<RsDynamicExpression>(element, element.nameLiteral.textRangeInParent) {
@@ -42,14 +44,16 @@ class RsDynamicExpressionReference(element: RsDynamicExpression) : PsiPolyVarian
4244
// Try to resolve the element as a config reference.
4345
val project = element.project
4446
if (type is RsPrimitiveType) {
45-
val resolvedConfig = RsSymbolIndex.lookup(project, type, elementName)
47+
val resolvedConfig = RsSymbolIndex.lookup(element, type, elementName)
4648
if (resolvedConfig != null) {
4749
return arrayOf(PsiElementResolveResult(resolvedConfig))
4850
}
4951
}
5052

5153
// Try to resolve the element as a command reference.
52-
val searchScope = GlobalSearchScope.allScope(project)
54+
val module = ModuleUtil.findModuleForPsiElement(element) ?: return emptyArray()
55+
val searchScope = GlobalSearchScope.moduleScope(module)
56+
5357
return StubIndex.getElements(RsCommandScriptIndex.KEY, elementName, project, searchScope, RsScript::class.java)
5458
.map { PsiElementResolveResult(it) }
5559
.toTypedArray()

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.runescript.plugin.lang.psi.refs
22

33
import com.intellij.codeInsight.lookup.LookupElement
4+
import com.intellij.openapi.module.ModuleUtil
45
import com.intellij.psi.PsiElement
56
import com.intellij.psi.PsiElementResolveResult
67
import com.intellij.psi.PsiPolyVariantReferenceBase
@@ -9,12 +10,14 @@ import com.intellij.psi.search.GlobalSearchScope
910
import com.intellij.psi.stubs.StubIndex
1011
import io.runescript.plugin.lang.psi.RsGosubExpression
1112
import io.runescript.plugin.lang.psi.RsScript
13+
import io.runescript.plugin.lang.stubs.index.RsCommandScriptIndex
1214
import io.runescript.plugin.lang.stubs.index.RsProcScriptIndex
1315

1416
class RsGosubReference(element: RsGosubExpression) : PsiPolyVariantReferenceBase<RsGosubExpression>(element, element.nameLiteral.textRangeInParent) {
1517

1618
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
17-
val elements = StubIndex.getElements(RsProcScriptIndex.KEY, element.nameLiteral.text, element.project, GlobalSearchScope.allScope(element.project), RsScript::class.java)
19+
val module = ModuleUtil.findModuleForPsiElement(element) ?: return emptyArray()
20+
val elements = StubIndex.getElements(RsProcScriptIndex.KEY, element.nameLiteral.text, element.project, GlobalSearchScope.moduleScope(module), RsScript::class.java)
1821
return elements.map { PsiElementResolveResult(it) }.toTypedArray()
1922
}
2023

0 commit comments

Comments
 (0)