Skip to content

Commit a2769a9

Browse files
committed
Allow plugins to use GetAnnotatedParsedSource by linking it in when depended on
1 parent eec0222 commit a2769a9

File tree

8 files changed

+41
-25
lines changed

8 files changed

+41
-25
lines changed

exe/Plugins.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ idePlugins recorder includeExamples = pluginDescToIdePlugins allPlugins
162162
StylishHaskell.descriptor "stylish-haskell" :
163163
#endif
164164
#if hls_rename
165-
Rename.descriptor "rename" :
165+
Rename.descriptor pluginRecorder "rename" :
166166
#endif
167167
#if hls_retrie
168168
Retrie.descriptor "retrie" :
@@ -177,7 +177,7 @@ idePlugins recorder includeExamples = pluginDescToIdePlugins allPlugins
177177
Class.descriptor pluginRecorder "class" :
178178
#endif
179179
#if hls_haddockComments
180-
HaddockComments.descriptor "haddockComments" :
180+
HaddockComments.descriptor pluginRecorder "haddockComments" :
181181
#endif
182182
#if hls_eval
183183
Eval.descriptor pluginRecorder "eval" :

plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import Development.IDE.Core.PositionMapping (PositionMapping,
3131
fromCurrentPosition,
3232
toCurrentRange)
3333
import Development.IDE.Types.Logger (Pretty (..))
34+
import qualified Development.IDE.GHC.ExactPrint as E
35+
import Development.IDE.Plugin.CodeAction
3436
import Ide.Plugin.CodeRange.Rules (CodeRange (..),
3537
GetCodeRange (..),
3638
codeRangeRule)
@@ -55,18 +57,20 @@ import Language.LSP.Types (List (List),
5557
import Prelude hiding (log, span)
5658

5759
descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState
58-
descriptor recorder plId = (defaultPluginDescriptor plId)
60+
descriptor recorder plId = mkExactprintPluginDescriptor (cmapWithPrio LogExactPrint recorder) $ (defaultPluginDescriptor plId)
5961
{ pluginHandlers = mkPluginHandler STextDocumentSelectionRange selectionRangeHandler
6062
-- TODO @sloorush add folding range
6163
-- <> mkPluginHandler STextDocumentFoldingRange foldingRangeHandler
6264
, pluginRules = codeRangeRule (cmapWithPrio LogRules recorder)
6365
}
6466

6567
data Log = LogRules Rules.Log
68+
| LogExactPrint E.Log
6669

6770
instance Pretty Log where
6871
pretty log = case log of
6972
LogRules codeRangeLog -> pretty codeRangeLog
73+
LogExactPrint exactPrintLog -> pretty exactPrintLog
7074

7175
selectionRangeHandler :: IdeState -> PluginId -> SelectionRangeParams -> LspM c (Either ResponseError (List SelectionRange))
7276
selectionRangeHandler ide _ SelectionRangeParams{..} = do

plugins/hls-haddock-comments-plugin/src/Ide/Plugin/HaddockComments.hs

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@ import qualified Data.Map as Map
1515
import qualified Data.Text as T
1616
import Development.IDE hiding (pluginHandlers)
1717
import Development.IDE.GHC.Compat
18+
import Development.IDE.Plugin.CodeAction
1819
import Development.IDE.GHC.Compat.ExactPrint
1920
import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (..))
21+
import qualified Development.IDE.GHC.ExactPrint as E
2022
import Ide.Types
2123
import Language.Haskell.GHC.ExactPrint
2224
import Language.Haskell.GHC.ExactPrint.Types hiding (GhcPs)
2325
import Language.Haskell.GHC.ExactPrint.Utils
2426
import Language.LSP.Types
2527

2628
-----------------------------------------------------------------------------
27-
descriptor :: PluginId -> PluginDescriptor IdeState
28-
descriptor plId =
29+
descriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
30+
descriptor recorder plId = mkExactprintPluginDescriptor recorder $
2931
(defaultPluginDescriptor plId)
3032
{ pluginHandlers = mkPluginHandler STextDocumentCodeAction codeActionProvider
3133
}

plugins/hls-haddock-comments-plugin/test/Main.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ main :: IO ()
1919
main = defaultTestRunner tests
2020

2121
haddockCommentsPlugin :: PluginDescriptor IdeState
22-
haddockCommentsPlugin = HaddockComments.descriptor "haddockComments"
22+
haddockCommentsPlugin = HaddockComments.descriptor mempty "haddockComments"
2323

2424
tests :: TestTree
2525
tests =

plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs

+16-14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
module Development.IDE.Plugin.CodeAction
2323
(
24+
mkExactprintPluginDescriptor,
2425
iePluginDescriptor,
2526
typeSigsPluginDescriptor,
2627
bindingsPluginDescriptor,
@@ -158,39 +159,40 @@ iePluginDescriptor recorder plId =
158159
, wrap suggestExportUnusedTopBinding
159160
]
160161
plId
161-
in old {pluginHandlers = pluginHandlers old <> mkPluginHandler STextDocumentCodeAction codeAction
162-
, pluginRules = getAnnotatedParsedSourceRule recorder
163-
}
162+
in mkExactprintPluginDescriptor recorder $ old {pluginHandlers = pluginHandlers old <> mkPluginHandler STextDocumentCodeAction codeAction }
164163

165164
typeSigsPluginDescriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
166-
typeSigsPluginDescriptor recorder plId =
167-
(mkGhcideCAsPlugin [
165+
typeSigsPluginDescriptor recorder plId = mkExactprintPluginDescriptor recorder $
166+
mkGhcideCAsPlugin [
168167
wrap $ suggestSignature True
169168
, wrap suggestFillTypeWildcard
170169
, wrap removeRedundantConstraints
171170
, wrap suggestAddTypeAnnotationToSatisfyContraints
172171
, wrap suggestConstraint
173172
]
174-
plId) { pluginRules = getAnnotatedParsedSourceRule recorder }
173+
plId
175174

176175
bindingsPluginDescriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
177-
bindingsPluginDescriptor recorder plId =
178-
(mkGhcideCAsPlugin [
176+
bindingsPluginDescriptor recorder plId = mkExactprintPluginDescriptor recorder $
177+
mkGhcideCAsPlugin [
179178
wrap suggestReplaceIdentifier
180179
, wrap suggestImplicitParameter
181180
, wrap suggestNewDefinition
182181
, wrap suggestDeleteUnusedBinding
183182
]
184-
plId) { pluginRules = getAnnotatedParsedSourceRule recorder }
183+
plId
185184

186185
fillHolePluginDescriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
187-
fillHolePluginDescriptor recorder plId = (mkGhcideCAPlugin (wrap suggestFillHole) plId) { pluginRules = getAnnotatedParsedSourceRule recorder }
186+
fillHolePluginDescriptor recorder plId = mkExactprintPluginDescriptor recorder (mkGhcideCAPlugin (wrap suggestFillHole) plId)
188187

189188
extendImportPluginDescriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
190-
extendImportPluginDescriptor recorder plId = (defaultPluginDescriptor plId)
191-
{ pluginCommands = [extendImportCommand]
192-
, pluginRules = getAnnotatedParsedSourceRule recorder
193-
}
189+
extendImportPluginDescriptor recorder plId = mkExactprintPluginDescriptor recorder $ (defaultPluginDescriptor plId)
190+
{ pluginCommands = [extendImportCommand] }
191+
192+
193+
-- | Add the ability for a plugin to call GetAnnotatedParsedSource
194+
mkExactprintPluginDescriptor :: Recorder (WithPriority E.Log) -> PluginDescriptor a -> PluginDescriptor a
195+
mkExactprintPluginDescriptor recorder desc = desc { pluginRules = pluginRules desc >> getAnnotatedParsedSourceRule recorder }
194196

195197
-------------------------------------------------------------------------------------------------
196198

plugins/hls-rename-plugin/src/Ide/Plugin/Rename.hs

+5-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import qualified Data.Map as M
2929
import Data.Maybe
3030
import Data.Mod.Word
3131
import qualified Data.Text as T
32+
import Development.IDE (Recorder, WithPriority)
3233
import Development.IDE.Core.PositionMapping
3334
import Development.IDE.Core.RuleTypes
3435
import Development.IDE.Core.Service
@@ -39,8 +40,10 @@ import Development.IDE.GHC.Compat.Parser
3940
import Development.IDE.GHC.Compat.Units
4041
import Development.IDE.GHC.Error
4142
import Development.IDE.GHC.ExactPrint
43+
import qualified Development.IDE.GHC.ExactPrint as E
4244
import Development.IDE.Spans.AtPoint
4345
import Development.IDE.Types.Location
46+
import Development.IDE.Plugin.CodeAction
4447
import HieDb.Query
4548
import Ide.Plugin.Properties
4649
import Ide.PluginUtils
@@ -50,8 +53,8 @@ import Language.LSP.Types
5053

5154
instance Hashable (Mod a) where hash n = hash (unMod n)
5255

53-
descriptor :: PluginId -> PluginDescriptor IdeState
54-
descriptor pluginId = (defaultPluginDescriptor pluginId)
56+
descriptor :: Recorder (WithPriority E.Log) -> PluginId -> PluginDescriptor IdeState
57+
descriptor recorder pluginId = mkExactprintPluginDescriptor recorder $ (defaultPluginDescriptor pluginId)
5558
{ pluginHandlers = mkPluginHandler STextDocumentRename renameProvider
5659
, pluginConfigDescriptor = defaultConfigDescriptor
5760
{ configCustomConfig = mkCustomConfig properties }

plugins/hls-rename-plugin/test/Main.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ main :: IO ()
1313
main = defaultTestRunner tests
1414

1515
renamePlugin :: PluginDescriptor IdeState
16-
renamePlugin = Rename.descriptor "rename"
16+
renamePlugin = Rename.descriptor mempty "rename"
1717

1818
-- See https://github.com/wz1000/HieDb/issues/45
1919
recordConstructorIssue :: String

plugins/hls-tactics-plugin/src/Wingman/Plugin.hs

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ module Wingman.Plugin where
33

44
import Control.Monad
55
import Development.IDE.Core.Shake (IdeState (..))
6+
import Development.IDE.Plugin.CodeAction
7+
import qualified Development.IDE.GHC.ExactPrint as E
68
import Ide.Types
79
import Language.LSP.Types
810
import Prelude hiding (span)
@@ -15,17 +17,20 @@ import Wingman.LanguageServer.Metaprogram (hoverProvider)
1517
import Wingman.StaticPlugin
1618
import Development.IDE.Types.Logger (Recorder, cmapWithPrio, WithPriority, Pretty (pretty))
1719

18-
newtype Log
20+
data Log
1921
= LogWingmanLanguageServer WingmanLanguageServer.Log
22+
| LogExactPrint E.Log
2023
deriving Show
2124

2225
instance Pretty Log where
2326
pretty = \case
2427
LogWingmanLanguageServer log -> pretty log
28+
LogExactPrint exactPrintLog -> pretty exactPrintLog
2529

2630
descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState
2731
descriptor recorder plId
28-
= installInteractions
32+
= mkExactprintPluginDescriptor (cmapWithPrio LogExactPrint recorder)
33+
$ installInteractions
2934
( emptyCaseInteraction
3035
: fmap makeTacticInteraction [minBound .. maxBound]
3136
)

0 commit comments

Comments
 (0)