From bcbfa2b869ea584f1fa0e2664eba857316ff7e02 Mon Sep 17 00:00:00 2001 From: Rik van der Kleij Date: Thu, 3 Oct 2019 15:41:10 +0200 Subject: [PATCH] Improve code completion and fix issue #470 --- .../haskell/editor/HaskellCompletionContributor.scala | 9 ++++----- src/main/scala/intellij/haskell/psi/HaskellPsiUtil.scala | 7 +++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/scala/intellij/haskell/editor/HaskellCompletionContributor.scala b/src/main/scala/intellij/haskell/editor/HaskellCompletionContributor.scala index b5c2a471..0b9b85b4 100644 --- a/src/main/scala/intellij/haskell/editor/HaskellCompletionContributor.scala +++ b/src/main/scala/intellij/haskell/editor/HaskellCompletionContributor.scala @@ -45,7 +45,7 @@ class HaskellCompletionContributor extends CompletionContributor { private final val HaskellWhere = LazyList("where") private final val HaskellLet = LazyList("let") - private final val haskellDeclKeywords = LazyList("family", "data", "type", "module", "class", "instance", "newtype", "deriving", "in") + private final val haskellDeclarationKeywords = LazyList("family", "data", "type", "module", "class", "instance", "newtype", "deriving", "in") private final val HaskellDefault = LazyList("default") private final val HaskellImportKeywords = LazyList("import", "qualified", "as", "hiding") private final val HaskellForeignKeywords = LazyList("foreign", "export", "ccall", "safe", "unsafe", "interruptible", "capi", "prim") @@ -60,7 +60,7 @@ class HaskellCompletionContributor extends CompletionContributor { private final val HaskellRecursiveDo = LazyList("mdo", "rec") private final val HaskellArrowSyntax = LazyList("proc") - private final val Keywords = HaskellWhere ++ HaskellLet ++ haskellDeclKeywords ++ HaskellDefault ++ HaskellImportKeywords ++ + private final val Keywords = HaskellWhere ++ HaskellLet ++ haskellDeclarationKeywords ++ HaskellDefault ++ HaskellImportKeywords ++ HaskellForeignKeywords ++ HaskellKeyword ++ HaskellStatic ++ HaskellConditional ++ HaskellInfix ++ HaskellBottom ++ HaskellTodo ++ HaskellTypeRoles ++ HaskellForall ++ HaskellRecursiveDo ++ HaskellArrowSyntax @@ -127,7 +127,7 @@ class HaskellCompletionContributor extends CompletionContributor { val prefixText = ( for { e <- positionElement - mie <- HaskellPsiUtil.findModIdElement(e) + mie <- HaskellPsiUtil.findModIdElement(e).orElse(HaskellPsiUtil.findQualifierElement(e)) start = mie.getTextRange.getStartOffset end = parameters.getOffset } yield psiFile.getText.substring(start, end) @@ -231,8 +231,7 @@ class HaskellCompletionContributor extends CompletionContributor { def addCompletions(parameters: CompletionParameters, context: ProcessingContext, originalResultSet: CompletionResultSet): Unit = { ProgressManager.checkCanceled() - val project = parameters.getOriginalPosition.getProject - + val project = parameters.getOriginalFile.getProject if (StackProjectManager.isInitializing(project)) { HaskellEditorUtil.showHaskellSupportIsNotAvailableWhileInitializing(project) } else { diff --git a/src/main/scala/intellij/haskell/psi/HaskellPsiUtil.scala b/src/main/scala/intellij/haskell/psi/HaskellPsiUtil.scala index 350d6733..4cb2f34e 100644 --- a/src/main/scala/intellij/haskell/psi/HaskellPsiUtil.scala +++ b/src/main/scala/intellij/haskell/psi/HaskellPsiUtil.scala @@ -58,6 +58,13 @@ object HaskellPsiUtil { } } + def findQualifierElement(psiElement: PsiElement): Option[HaskellQualifier] = { + psiElement match { + case e: HaskellQualifier => Some(e) + case e => Option(TreeUtil.findParent(e.getNode, HaskellTypes.HS_QUALIFIER)).map(_.getPsi.asInstanceOf[HaskellQualifier]) + } + } + def findDataConstr(psiElement: PsiElement): Option[HaskellConstr] = { psiElement match { case e: HaskellConstr => Some(e)