Skip to content

Commit 56a9821

Browse files
committed
fix parameter info
1 parent d461e1c commit 56a9821

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ For a list of changes in the newest version, please refer to the [changelog](./C
1212
1. 增加了multi head的支持
1313
2. 增加了ByteCodeDL用到的一些语法比如`#if` `#paragma`
1414
3. 增加了relation全部参数的自动补全
15-
![re](./img/relation_all_param_completion.png)
15+
![relation_completion](./img/relation_all_param_completion.png)
16+
4. 修复了参数提示
17+
![parameterinfo](./img/parameterinfo.png)
1618

1719
## 遗留问题
1820
1. 本来想支持`cat`等内置的函数,但是和MacroExpr冲突了,不知道怎么解决
21+
2. 在实现参数提示时,由于最初的bnf有问题,直接用了offset实现相关功能,虽然能用,但是一点都不优雅(本着又不是不能用的原则,先暂时就这样了)
1922

2023
## Features
2124

img/parameterinfo.png

76.5 KB
Loading

src/main/kotlin/com/lfrobeen/datalog/ide/hints/DatalogParameterInfoHandler.kt

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class DatalogParameterInfoHandler : ParameterInfoHandler<PsiElement, DatalogRelD
1212
}
1313

1414
override fun updateParameterInfo(parameterOwner: PsiElement, context: UpdateParameterInfoContext) {
15-
// context.setCurrentParameter(0)
15+
1616
}
1717

1818
override fun updateUI(p: DatalogRelDecl?, context: ParameterInfoUIContext) {
@@ -51,39 +51,57 @@ class DatalogParameterInfoHandler : ParameterInfoHandler<PsiElement, DatalogRelD
5151
}
5252

5353
override fun findElementForUpdatingParameterInfo(context: UpdateParameterInfoContext): PsiElement? {
54-
var offset = context.offset
54+
var offsetToLeft = context.offset
5555
var element:PsiElement? = null
5656
var index = 0
57-
while (offset > 0){
58-
element = context.file.findElementAt(offset)
57+
var rightParenthesis:PsiElement? = findRightParenthesis(context)
58+
59+
while (offsetToLeft > 0){
60+
element = context.file.findElementAt(offsetToLeft)
5961
if (element?.text == ","){
6062
index++
6163
}
6264
if (element?.text == "("){
6365
break
6466
}
65-
offset--
67+
offsetToLeft--
6668
}
6769

6870
context.setCurrentParameter(index)
69-
val rightParenthesis = context.file.findElementAt(context.offset)
7071

7172
return rightParenthesis
7273
}
7374

7475
override fun findElementForParameterInfo(context: CreateParameterInfoContext): PsiElement? {
75-
var offset = context.offset
76+
var offsetToLeft = context.offset
7677
var element:PsiElement? = null
77-
while (offset > 0){
78-
element = context.file.findElementAt(offset)
78+
val rightParenthesis = findRightParenthesis(context)
79+
80+
while (offsetToLeft > 0){
81+
element = context.file.findElementAt(offsetToLeft)
7982
if (element?.parent?.reference is DatalogReference){
8083
break
8184
}
82-
offset--
85+
offsetToLeft--
8386
}
8487
val decl = element?.parent?.reference?.resolve()
8588

8689
context.itemsToShow = arrayOf(decl)
87-
return context.file.findElementAt(context.offset)
90+
return rightParenthesis
91+
}
92+
93+
private fun findRightParenthesis(context: ParameterInfoContext): PsiElement? {
94+
var offsetToRight = context.offset
95+
var rightParenthesis:PsiElement? = null
96+
97+
while (offsetToRight < context.file.textLength){
98+
var element = context.file.findElementAt(offsetToRight)
99+
if (element?.text == ")"){
100+
rightParenthesis = element
101+
break
102+
}
103+
offsetToRight++
104+
}
105+
return rightParenthesis
88106
}
89107
}

0 commit comments

Comments
 (0)