{-# LANGUAGE CPP #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE OverloadedStrings #-} module HlsPlugins where import Development.IDE.Types.Logger (Pretty (pretty), Recorder, WithPriority, cmapWithPrio) import Ide.PluginUtils (pluginDescToIdePlugins) import Ide.Types (IdePlugins) -- fixed plugins import Development.IDE (IdeState) import qualified Development.IDE.Plugin.HLS.GhcIde as GhcIde -- haskell-language-server optional plugins #if hls_qualifyImportedNames import qualified Ide.Plugin.QualifyImportedNames as QualifyImportedNames #endif #if hls_callHierarchy import qualified Ide.Plugin.CallHierarchy as CallHierarchy #endif #if hls_class import qualified Ide.Plugin.Class as Class #endif #if hls_haddockComments import qualified Ide.Plugin.HaddockComments as HaddockComments #endif #if hls_eval import qualified Ide.Plugin.Eval as Eval #endif #if hls_importLens import qualified Ide.Plugin.ExplicitImports as ExplicitImports #endif #if hls_refineImports import qualified Ide.Plugin.RefineImports as RefineImports #endif #if hls_rename import qualified Ide.Plugin.Rename as Rename #endif #if hls_retrie import qualified Ide.Plugin.Retrie as Retrie #endif #if hls_tactic import qualified Ide.Plugin.Tactic as Tactic #endif #if hls_hlint import qualified Ide.Plugin.Hlint as Hlint #endif #if hls_stan import qualified Ide.Plugin.Stan as Stan #endif #if hls_moduleName import qualified Ide.Plugin.ModuleName as ModuleName #endif #if hls_pragmas import qualified Ide.Plugin.Pragmas as Pragmas #endif #if hls_splice import qualified Ide.Plugin.Splice as Splice #endif #if hls_alternateNumberFormat import qualified Ide.Plugin.AlternateNumberFormat as AlternateNumberFormat #endif #if hls_codeRange import qualified Ide.Plugin.CodeRange as CodeRange #endif #if hls_changeTypeSignature import Ide.Plugin.ChangeTypeSignature as ChangeTypeSignature #endif #if hls_gadt import Ide.Plugin.GADT as GADT #endif #if explicitFixity import Ide.Plugin.ExplicitFixity as ExplicitFixity #endif -- formatters #if hls_floskell import qualified Ide.Plugin.Floskell as Floskell #endif #if hls_fourmolu import qualified Ide.Plugin.Fourmolu as Fourmolu #endif #if hls_ormolu import qualified Ide.Plugin.Ormolu as Ormolu #endif #if hls_stylishHaskell import qualified Ide.Plugin.StylishHaskell as StylishHaskell #endif #if hls_brittany import qualified Ide.Plugin.Brittany as Brittany #endif #if hls_refactor import qualified Development.IDE.Plugin.CodeAction as Refactor #endif data Log = forall a. (Pretty a) => Log a instance Pretty Log where pretty (Log a) = pretty a -- --------------------------------------------------------------------- -- | The plugins configured for use in this instance of the language -- server. -- These can be freely added or removed to tailor the available -- features of the server. idePlugins :: Recorder (WithPriority Log) -> IdePlugins IdeState idePlugins recorder = pluginDescToIdePlugins allPlugins where pluginRecorder :: forall log. (Pretty log) => Recorder (WithPriority log) pluginRecorder = cmapWithPrio Log recorder allPlugins = #if hls_pragmas Pragmas.descriptor "pragmas" : #endif #if hls_floskell Floskell.descriptor "floskell" : #endif #if hls_fourmolu Fourmolu.descriptor pluginRecorder "fourmolu" : #endif #if hls_tactic Tactic.descriptor pluginRecorder "tactics" : #endif #if hls_ormolu Ormolu.descriptor "ormolu" : #endif #if hls_stylishHaskell StylishHaskell.descriptor "stylish-haskell" : #endif #if hls_rename Rename.descriptor pluginRecorder "rename" : #endif #if hls_retrie Retrie.descriptor "retrie" : #endif #if hls_brittany Brittany.descriptor "brittany" : #endif #if hls_callHierarchy CallHierarchy.descriptor : #endif #if hls_class Class.descriptor pluginRecorder "class" : #endif #if hls_haddockComments HaddockComments.descriptor pluginRecorder "haddockComments" : #endif #if hls_eval Eval.descriptor pluginRecorder "eval" : #endif #if hls_importLens ExplicitImports.descriptor pluginRecorder "importLens" : #endif #if hls_qualifyImportedNames QualifyImportedNames.descriptor "qualifyImportedNames" : #endif #if hls_refineImports RefineImports.descriptor pluginRecorder "refineImports" : #endif #if hls_moduleName ModuleName.descriptor pluginRecorder "moduleName" : #endif #if hls_hlint Hlint.descriptor pluginRecorder "hlint" : #endif #if hls_stan Stan.descriptor pluginRecorder "stan" : #endif #if hls_splice Splice.descriptor "splice" : #endif #if hls_alternateNumberFormat AlternateNumberFormat.descriptor pluginRecorder : #endif #if hls_codeRange CodeRange.descriptor pluginRecorder "codeRange" : #endif #if hls_changeTypeSignature ChangeTypeSignature.descriptor : #endif #if hls_gadt GADT.descriptor "gadt" : #endif #if hls_refactor Refactor.iePluginDescriptor pluginRecorder "ghcide-code-actions-imports-exports" : Refactor.typeSigsPluginDescriptor pluginRecorder "ghcide-code-actions-type-signatures" : Refactor.bindingsPluginDescriptor pluginRecorder "ghcide-code-actions-bindings" : Refactor.fillHolePluginDescriptor pluginRecorder "ghcide-code-actions-fill-holes" : Refactor.extendImportPluginDescriptor pluginRecorder "ghcide-extend-import-action" : #endif GhcIde.descriptors pluginRecorder #if explicitFixity ++ [ExplicitFixity.descriptor pluginRecorder] #endif