packages feed

ghcide-0.7.3.0: src/Development/IDE/Plugin/HLS/GhcIde.hs

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}

-- | Exposes the ghcide features as an HLS plugin
module Development.IDE.Plugin.HLS.GhcIde
  (
    descriptors
  ) where
import Development.IDE
import Development.IDE.LSP.HoverDefinition
import Development.IDE.LSP.Outline
import Ide.PluginUtils
import Ide.Types
import Language.Haskell.LSP.Types
import Text.Regex.TDFA.Text()
import qualified Development.IDE.Plugin.CodeAction as CodeAction
import qualified Development.IDE.Plugin.Completions as Completions
import qualified Development.IDE.Plugin.TypeLenses as TypeLenses

descriptors :: [PluginDescriptor IdeState]
descriptors =
  [ descriptor "ghcide-hover-and-symbols",
    CodeAction.descriptor "ghcide-code-actions",
    Completions.descriptor "ghcide-completions",
    TypeLenses.descriptor "ghcide-type-lenses"
  ]

-- ---------------------------------------------------------------------

descriptor :: PluginId -> PluginDescriptor IdeState
descriptor plId = (defaultPluginDescriptor plId)
  { pluginHoverProvider      = Just hover'
  , pluginSymbolsProvider    = Just symbolsProvider
  }

-- ---------------------------------------------------------------------

hover' :: HoverProvider IdeState
hover' ideState params = do
    logDebug (ideLogger ideState) "GhcIde.hover entered (ideLogger)" -- AZ
    hover ideState params

-- ---------------------------------------------------------------------
symbolsProvider :: SymbolsProvider IdeState
symbolsProvider ls ide params = do
    ds <- moduleOutline ls ide params
    case ds of
        Right (DSDocumentSymbols (List ls)) -> return $ Right ls
        Right (DSSymbolInformation (List _si)) ->
            return $ Left $ responseError "GhcIde.symbolsProvider: DSSymbolInformation deprecated"
        Left err -> return $ Left err

-- ---------------------------------------------------------------------