Skip to content

Commit 94fbdec

Browse files
authored
Merge pull request #32 from aridclown/main
Disable breakpoint placement at invalid locations
2 parents d6676a7 + 7190237 commit 94fbdec

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

src/main/java/com/tang/intellij/lua/debugger/LuaLineBreakpointType.kt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@
1616

1717
package com.tang.intellij.lua.debugger
1818

19+
import com.intellij.openapi.fileEditor.FileDocumentManager
1920
import com.intellij.openapi.project.Project
2021
import com.intellij.openapi.vfs.VirtualFile
22+
import com.intellij.psi.PsiManager
23+
import com.intellij.psi.tree.TokenSet
24+
import com.intellij.util.text.CharArrayUtil.isEmptyOrSpaces
2125
import com.intellij.xdebugger.breakpoints.XLineBreakpointTypeBase
2226
import com.tang.intellij.lua.lang.LuaFileType
27+
import com.tang.intellij.lua.lang.LuaParserDefinition
28+
import com.tang.intellij.lua.psi.LuaTypes
2329

2430
/**
2531
*
@@ -28,12 +34,34 @@ import com.tang.intellij.lua.lang.LuaFileType
2834
class LuaLineBreakpointType : XLineBreakpointTypeBase(ID, NAME, LuaDebuggerEditorsProvider()) {
2935

3036
override fun canPutAt(file: VirtualFile, line: Int, project: Project): Boolean {
31-
return file.fileType === LuaFileType.INSTANCE
37+
if (file.fileType !== LuaFileType.INSTANCE) return false
38+
39+
val psiFile = PsiManager.getInstance(project).findFile(file) ?: return false
40+
val doc = FileDocumentManager.getInstance().getDocument(file) ?: return false
41+
42+
val lineStartOffset = doc.getLineStartOffset(line)
43+
val lineEndOffset = doc.getLineEndOffset(line)
44+
if (isEmptyOrSpaces(doc.charsSequence, lineStartOffset, lineEndOffset)) return false
45+
46+
return generateSequence(psiFile.findElementAt(lineStartOffset)) { it.nextSibling }
47+
.takeWhile { it.textOffset < lineEndOffset }
48+
.map { it.node.elementType }
49+
.none {
50+
LuaParserDefinition.COMMENTS.contains(it) || INVALID_BREAKPOINT_ELEMENTS.contains(it)
51+
}
3252
}
3353

3454
companion object {
35-
3655
private const val ID = "lua-line"
3756
private const val NAME = "lua-line-breakpoint"
3857
}
3958
}
59+
60+
private val INVALID_BREAKPOINT_ELEMENTS = TokenSet.create(
61+
LuaTypes.LCURLY,
62+
LuaTypes.RCURLY,
63+
LuaTypes.LPAREN,
64+
LuaTypes.RPAREN,
65+
LuaTypes.LBRACK,
66+
LuaTypes.RBRACK
67+
)

0 commit comments

Comments
 (0)