@@ -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