Skip to content

Commit d461e1c

Browse files
committed
add paramterinfo
1 parent 44cf9a1 commit d461e1c

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed
Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package com.lfrobeen.datalog.ide.hints
22

3-
import com.intellij.codeInsight.lookup.LookupElement
43
import com.intellij.lang.parameterInfo.*
54
import com.intellij.psi.PsiElement
65
import com.intellij.psi.util.parentOfType
6+
import com.lfrobeen.datalog.DatalogReference
77
import com.lfrobeen.datalog.lang.psi.*
88

9-
class DatalogParameterInfoHandler : ParameterInfoHandler<DatalogArgumentList, DatalogRelDecl> {
10-
override fun showParameterInfo(element: DatalogArgumentList, context: CreateParameterInfoContext) {
9+
class DatalogParameterInfoHandler : ParameterInfoHandler<PsiElement, DatalogRelDecl> {
10+
override fun showParameterInfo(element: PsiElement, context: CreateParameterInfoContext) {
1111
context.showHint(element, element.textRange.startOffset, this)
1212
}
1313

14-
override fun updateParameterInfo(parameterOwner: DatalogArgumentList, context: UpdateParameterInfoContext) {
14+
override fun updateParameterInfo(parameterOwner: PsiElement, context: UpdateParameterInfoContext) {
15+
// context.setCurrentParameter(0)
1516
}
1617

1718
override fun updateUI(p: DatalogRelDecl?, context: ParameterInfoUIContext) {
@@ -49,38 +50,40 @@ class DatalogParameterInfoHandler : ParameterInfoHandler<DatalogArgumentList, Da
4950
)
5051
}
5152

52-
override fun getParametersForLookup(item: LookupElement?, context: ParameterInfoContext?): Array<Any>? = null
53-
54-
override fun findElementForUpdatingParameterInfo(context: UpdateParameterInfoContext): DatalogArgumentList? {
55-
val atom = getAtom(context.file.findElementAt(context.offset))
56-
val argumentList = atom?.argumentList
57-
58-
if (argumentList != null) {
59-
val index = ParameterInfoUtils.getCurrentParameterIndex(
60-
argumentList.node,
61-
context.offset,
62-
DatalogTypes.COMMA
63-
)
64-
context.setCurrentParameter(index)
53+
override fun findElementForUpdatingParameterInfo(context: UpdateParameterInfoContext): PsiElement? {
54+
var offset = context.offset
55+
var element:PsiElement? = null
56+
var index = 0
57+
while (offset > 0){
58+
element = context.file.findElementAt(offset)
59+
if (element?.text == ","){
60+
index++
61+
}
62+
if (element?.text == "("){
63+
break
64+
}
65+
offset--
6566
}
6667

67-
return atom?.argumentList
68-
}
68+
context.setCurrentParameter(index)
69+
val rightParenthesis = context.file.findElementAt(context.offset)
6970

70-
override fun findElementForParameterInfo(context: CreateParameterInfoContext): DatalogArgumentList? {
71-
val atom = getAtom(context.file.findElementAt(context.offset)) ?: return null
71+
return rightParenthesis
72+
}
7273

73-
val declRef = atom.anyReference.reference
74-
val decl = declRef?.resolve() as? DatalogRelDecl
74+
override fun findElementForParameterInfo(context: CreateParameterInfoContext): PsiElement? {
75+
var offset = context.offset
76+
var element:PsiElement? = null
77+
while (offset > 0){
78+
element = context.file.findElementAt(offset)
79+
if (element?.parent?.reference is DatalogReference){
80+
break
81+
}
82+
offset--
83+
}
84+
val decl = element?.parent?.reference?.resolve()
7585

7686
context.itemsToShow = arrayOf(decl)
77-
78-
return atom.argumentList
87+
return context.file.findElementAt(context.offset)
7988
}
80-
81-
private fun getAtom(psiElement: PsiElement?): DatalogAtom? =
82-
psiElement as? DatalogAtom ?: psiElement?.parentOfType()
83-
84-
override fun couldShowInLookup(): Boolean = true
85-
8689
}

0 commit comments

Comments
 (0)