|
1 | 1 | package com.lfrobeen.datalog.ide.hints |
2 | 2 |
|
3 | | -import com.intellij.codeInsight.lookup.LookupElement |
4 | 3 | import com.intellij.lang.parameterInfo.* |
5 | 4 | import com.intellij.psi.PsiElement |
6 | 5 | import com.intellij.psi.util.parentOfType |
| 6 | +import com.lfrobeen.datalog.DatalogReference |
7 | 7 | import com.lfrobeen.datalog.lang.psi.* |
8 | 8 |
|
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) { |
11 | 11 | context.showHint(element, element.textRange.startOffset, this) |
12 | 12 | } |
13 | 13 |
|
14 | | - override fun updateParameterInfo(parameterOwner: DatalogArgumentList, context: UpdateParameterInfoContext) { |
| 14 | + override fun updateParameterInfo(parameterOwner: PsiElement, context: UpdateParameterInfoContext) { |
| 15 | +// context.setCurrentParameter(0) |
15 | 16 | } |
16 | 17 |
|
17 | 18 | override fun updateUI(p: DatalogRelDecl?, context: ParameterInfoUIContext) { |
@@ -49,38 +50,40 @@ class DatalogParameterInfoHandler : ParameterInfoHandler<DatalogArgumentList, Da |
49 | 50 | ) |
50 | 51 | } |
51 | 52 |
|
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-- |
65 | 66 | } |
66 | 67 |
|
67 | | - return atom?.argumentList |
68 | | - } |
| 68 | + context.setCurrentParameter(index) |
| 69 | + val rightParenthesis = context.file.findElementAt(context.offset) |
69 | 70 |
|
70 | | - override fun findElementForParameterInfo(context: CreateParameterInfoContext): DatalogArgumentList? { |
71 | | - val atom = getAtom(context.file.findElementAt(context.offset)) ?: return null |
| 71 | + return rightParenthesis |
| 72 | + } |
72 | 73 |
|
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() |
75 | 85 |
|
76 | 86 | context.itemsToShow = arrayOf(decl) |
77 | | - |
78 | | - return atom.argumentList |
| 87 | + return context.file.findElementAt(context.offset) |
79 | 88 | } |
80 | | - |
81 | | - private fun getAtom(psiElement: PsiElement?): DatalogAtom? = |
82 | | - psiElement as? DatalogAtom ?: psiElement?.parentOfType() |
83 | | - |
84 | | - override fun couldShowInLookup(): Boolean = true |
85 | | - |
86 | 89 | } |
0 commit comments