Skip to content

Commit de5ced2

Browse files
committed
Add an inspection for missing script symbols
1 parent 98f02a9 commit de5ced2

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Add a formatter option for space within return list parenthesis.
88
- Add error recovery for statements.
99
- Add support for parsing empty statements.
10+
- Add an inspection for missing script symbols.
1011

1112
### Changed
1213
- The build window will now display internal compiler errors as well.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.runescript.plugin.ide.inspections
2+
3+
import com.intellij.codeInspection.LocalInspectionTool
4+
import com.intellij.codeInspection.ProblemHighlightType
5+
import com.intellij.codeInspection.ProblemsHolder
6+
import com.intellij.openapi.util.TextRange
7+
import com.intellij.psi.PsiElementVisitor
8+
import com.intellij.refactoring.suggested.endOffset
9+
import com.intellij.refactoring.suggested.startOffset
10+
import io.runescript.plugin.ide.RsBundle
11+
import io.runescript.plugin.lang.psi.RsScript
12+
import io.runescript.plugin.lang.psi.RsVisitor
13+
import io.runescript.plugin.lang.psi.qualifiedName
14+
import io.runescript.plugin.lang.psi.type.RsPrimitiveType
15+
import io.runescript.plugin.symbollang.psi.index.RsSymbolIndex
16+
17+
class RuneScriptMissingScriptSymbolInspection : LocalInspectionTool() {
18+
19+
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
20+
return object : RsVisitor() {
21+
22+
override fun visitScript(o: RsScript) {
23+
val name = o.qualifiedName
24+
val length = o.rbracket.endOffset - o.lbracket.startOffset
25+
val range = TextRange.from(o.lbracket.startOffsetInParent, length)
26+
if (RsSymbolIndex.lookup(o.project, RsPrimitiveType.CLIENTSCRIPT, name) == null) {
27+
holder.registerProblem(
28+
o,
29+
RsBundle.message("inspection.error.script.symbol.not.found", name),
30+
ProblemHighlightType.ERROR,
31+
range
32+
)
33+
}
34+
}
35+
}
36+
}
37+
}

src/main/resources/META-INF/inspections.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@
5454
enabledByDefault="true"
5555
level="WARNING"
5656
implementationClass="io.runescript.plugin.ide.inspections.RuneScriptUnreachableCodeInspection"/>
57+
<localInspection language="RuneScript"
58+
groupName="RuneScript"
59+
displayName="Missing script symbol"
60+
enabledByDefault="true"
61+
level="ERROR"
62+
implementationClass="io.runescript.plugin.ide.inspections.RuneScriptMissingScriptSymbolInspection"/>
5763
<localInspection language="RuneScriptSymbol"
5864
groupName="RuneScript"
5965
displayName="Invalid symbol file"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<html>
2+
<body>
3+
<p>Reports when a clientscript has no symbol defined for it.</p>
4+
</body>
5+
</html>

src/main/resources/messages/RsBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ inspection.error.unrecognized.trigger.type=Unrecognized trigger name `{0}`
5656
inspection.error.trigger.return.list.not.allowed=Trigger type `{0}` does not allow for return list
5757
inspection.error.trigger.parameter.list.not.allowed=Trigger type `{0}` does not allow for parameter list
5858
inspection.error.trigger.subject.not.found=Unresolved subject `{0}` of type `{1}`
59+
inspection.error.script.symbol.not.found=Script symbol not found for `{0}`
5960

6061
# Intentions
6162
intention.category.expressions=RuneScript/Expressions

0 commit comments

Comments
 (0)