Skip to content

Commit 4fcddfc

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

File tree

5 files changed

+27
-19
lines changed

5 files changed

+27
-19
lines changed

exe/Plugins.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -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

0 commit comments

Comments
 (0)