-- | A plugin that uses tactics to synthesize code module Wingman.Plugin where import Control.Monad import Development.IDE.Core.Shake (IdeState (..)) import Ide.Types import Language.LSP.Types import Prelude hiding (span) import Wingman.AbstractLSP import Wingman.AbstractLSP.TacticActions (makeTacticInteraction) import Wingman.EmptyCase import Wingman.LanguageServer import Wingman.LanguageServer.Metaprogram (hoverProvider) import Wingman.StaticPlugin descriptor :: PluginId -> PluginDescriptor IdeState descriptor plId = installInteractions ( emptyCaseInteraction : fmap makeTacticInteraction [minBound .. maxBound] ) $ (defaultPluginDescriptor plId) { pluginHandlers = mkPluginHandler STextDocumentHover hoverProvider , pluginRules = wingmanRules plId , pluginConfigDescriptor = defaultConfigDescriptor { configCustomConfig = mkCustomConfig properties } , pluginModifyDynflags = staticPlugin }