From d4827af4220c934739e4ee3b26caab32e591d8ed Mon Sep 17 00:00:00 2001
From: alexwl <alexey.a.kiryushin@gmail.com>
Date: Fri, 9 Nov 2018 19:37:55 +0300
Subject: Fix pattern synonym declarations

---
 src/HaskellCodeExplorer/GhcUtils.hs   |  4 ++--
 src/HaskellCodeExplorer/ModuleInfo.hs | 20 ++++++++++++++------
 2 files changed, 16 insertions(+), 8 deletions(-)

(limited to 'src/HaskellCodeExplorer')

diff --git a/src/HaskellCodeExplorer/GhcUtils.hs b/src/HaskellCodeExplorer/GhcUtils.hs
index b25678d..33370d5 100644
--- a/src/HaskellCodeExplorer/GhcUtils.hs
+++ b/src/HaskellCodeExplorer/GhcUtils.hs
@@ -172,7 +172,7 @@ import Name
   , isSystemName
   , isTvNameSpace
   , isTyConName
-  , isVarNameSpace
+  , isValNameSpace
   , isWiredInName
   , mkInternalName
   , mkOccName
@@ -360,9 +360,9 @@ nameSort n =
   
 occNameNameSpace :: OccName -> HCE.NameSpace
 occNameNameSpace n
-  | isVarNameSpace (occNameSpace n) = HCE.VarName
   | isDataConNameSpace (occNameSpace n) = HCE.DataName
   | isTvNameSpace (occNameSpace n) = HCE.TvName
+  | isValNameSpace (occNameSpace n) = HCE.VarName  
   | otherwise = HCE.TcClsName
 
 -- Two 'Id''s may have different types even though they have the same 'Unique'.
diff --git a/src/HaskellCodeExplorer/ModuleInfo.hs b/src/HaskellCodeExplorer/ModuleInfo.hs
index ddd7e9f..e908af2 100644
--- a/src/HaskellCodeExplorer/ModuleInfo.hs
+++ b/src/HaskellCodeExplorer/ModuleInfo.hs
@@ -660,7 +660,7 @@ addIdentifierToMaps environment idSrcSpanMap idMaps@(idInfoMap, idOccMap) nameOc
      nameOcc =
     case nameOcc of
       TyLitOccurrence {kind = kind} ->
-        addTypeToMaps
+        addNameToMaps
           environment
           idMaps
           (Just kind)
@@ -707,11 +707,11 @@ addIdentifierToMaps environment idSrcSpanMap idMaps@(idInfoMap, idOccMap) nameOc
                     [((startCol, endCol), idOcc)]
                     idOccMap
              in (idInfoMap', idOccMap')
-          Nothing -- type variable
+          Nothing -- type variable or an internal identifier in a pattern synonym
            ->
             case unLoc $ locatedName nameOcc of
               Just name ->
-                addTypeToMaps
+                addNameToMaps
                   environment
                   idMaps
                   Nothing
@@ -723,7 +723,7 @@ addIdentifierToMaps environment idSrcSpanMap idMaps@(idInfoMap, idOccMap) nameOc
               Nothing -> idMaps             
 addIdentifierToMaps _ _ idMaps _ = idMaps
 
-addTypeToMaps ::
+addNameToMaps ::
      Environment
   -> (HCE.IdentifierInfoMap, HCE.IdentifierOccurrenceMap)
   -> Maybe Type
@@ -733,7 +733,7 @@ addTypeToMaps ::
   -> Int
   -> Int
   -> (HCE.IdentifierInfoMap, HCE.IdentifierOccurrenceMap)
-addTypeToMaps environment (idInfoMap, idOccMap) mbKind mbName descr lineNumber colStart colEnd =
+addNameToMaps environment (idInfoMap, idOccMap) mbKind mbName descr lineNumber colStart colEnd =
   let flags = envDynFlags environment
       idInfoMap' =
         maybe
@@ -754,7 +754,15 @@ addTypeToMaps environment (idInfoMap, idOccMap) mbKind mbName descr lineNumber c
           , idOccType = mkType flags <$> mbKind
           , typeArguments = Nothing
           , description = descr
-          , sort = HCE.TypeId
+          , sort =
+              maybe
+                HCE.TypeId
+                (\name ->
+                   case occNameNameSpace . nameOccName $ name of
+                     HCE.VarName -> HCE.ValueId
+                     HCE.DataName -> HCE.ValueId
+                     _ -> HCE.TypeId)
+                mbName
           }
       idOccMap' =
         IM.insertWith
-- 
cgit v1.2.3