Skip to content

Commit 6dc7894

Browse files
authored
Merge pull request #123 from pepeiborra/rename-providers
Add plugin support for Rename providers
2 parents 6c58c2d + 1a46b0b commit 6dc7894

File tree

9 files changed

+63
-60
lines changed

9 files changed

+63
-60
lines changed

Diff for: src/Ide/Plugin.hs

+25-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ asGhcIdePlugin mp =
6262
mkPlugin hoverPlugins pluginHoverProvider <>
6363
mkPlugin symbolsPlugins pluginSymbolsProvider <>
6464
mkPlugin formatterPlugins pluginFormattingProvider <>
65-
mkPlugin completionsPlugins pluginCompletionProvider
65+
mkPlugin completionsPlugins pluginCompletionProvider <>
66+
mkPlugin renamePlugins pluginRenameProvider
6667
where
6768
justs (p, Just x) = [(p, x)]
6869
justs (_, Nothing) = []
@@ -453,6 +454,29 @@ makeSymbols sps lf ideState params
453454
[] -> return $ Left $ responseError $ T.pack $ show $ lefts mhs
454455
hs -> return $ Right $ convertSymbols $ concat hs
455456

457+
458+
-- ---------------------------------------------------------------------
459+
-- ---------------------------------------------------------------------
460+
461+
renamePlugins :: [(PluginId, RenameProvider)] -> Plugin Config
462+
renamePlugins providers = Plugin rules handlers
463+
where
464+
rules = mempty
465+
handlers = PartialHandlers $ \WithMessage{..} x -> return x
466+
{ LSP.renameHandler = withResponse RspRename (renameWith providers)}
467+
468+
renameWith ::
469+
[(PluginId, RenameProvider)] ->
470+
LSP.LspFuncs Config ->
471+
IdeState ->
472+
RenameParams ->
473+
IO (Either ResponseError WorkspaceEdit)
474+
renameWith providers lspFuncs state params = do
475+
results <- mapM (\(_,p) -> p lspFuncs state params) providers
476+
case partitionEithers results of
477+
(errors, []) -> return $ Left $ responseError $ T.pack $ show $ errors
478+
(_, edits) -> return $ Right $ mconcat edits
479+
456480
-- ---------------------------------------------------------------------
457481
-- ---------------------------------------------------------------------
458482

Diff for: src/Ide/Plugin/Brittany.hs

+2-11
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,8 @@ import System.FilePath
1919
import Data.Maybe (maybeToList)
2020

2121
descriptor :: PluginId -> PluginDescriptor
22-
descriptor plId = PluginDescriptor
23-
{ pluginId = plId
24-
, pluginRules = mempty
25-
, pluginCommands = []
26-
, pluginCodeActionProvider = Nothing
27-
, pluginCodeLensProvider = Nothing
28-
, pluginDiagnosticProvider = Nothing
29-
, pluginHoverProvider = Nothing
30-
, pluginSymbolsProvider = Nothing
31-
, pluginFormattingProvider = Just provider
32-
, pluginCompletionProvider = Nothing
22+
descriptor plId = (defaultPluginDescriptor plId)
23+
{ pluginFormattingProvider = Just provider
3324
}
3425

3526
-- | Formatter provider of Brittany.

Diff for: src/Ide/Plugin/Example.hs

+2-5
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,13 @@ import Text.Regex.TDFA.Text()
4141
-- ---------------------------------------------------------------------
4242

4343
descriptor :: PluginId -> PluginDescriptor
44-
descriptor plId = PluginDescriptor
45-
{ pluginId = plId
46-
, pluginRules = exampleRules
44+
descriptor plId = (defaultPluginDescriptor plId)
45+
{ pluginRules = exampleRules
4746
, pluginCommands = [PluginCommand "codelens.todo" "example adding" addTodoCmd]
4847
, pluginCodeActionProvider = Just codeAction
4948
, pluginCodeLensProvider = Just codeLens
50-
, pluginDiagnosticProvider = Nothing
5149
, pluginHoverProvider = Just hover
5250
, pluginSymbolsProvider = Just symbols
53-
, pluginFormattingProvider = Nothing
5451
, pluginCompletionProvider = Just completion
5552
}
5653

Diff for: src/Ide/Plugin/Example2.hs

+2-5
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,13 @@ import Text.Regex.TDFA.Text()
4141
-- ---------------------------------------------------------------------
4242

4343
descriptor :: PluginId -> PluginDescriptor
44-
descriptor plId = PluginDescriptor
45-
{ pluginId = plId
46-
, pluginRules = exampleRules
44+
descriptor plId = (defaultPluginDescriptor plId)
45+
{ pluginRules = exampleRules
4746
, pluginCommands = [PluginCommand "codelens.todo" "example adding" addTodoCmd]
4847
, pluginCodeActionProvider = Just codeAction
4948
, pluginCodeLensProvider = Just codeLens
50-
, pluginDiagnosticProvider = Nothing
5149
, pluginHoverProvider = Just hover
5250
, pluginSymbolsProvider = Just symbols
53-
, pluginFormattingProvider = Nothing
5451
, pluginCompletionProvider = Just completion
5552
}
5653

Diff for: src/Ide/Plugin/Floskell.hs

+2-11
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,8 @@ import Text.Regex.TDFA.Text()
2525
-- ---------------------------------------------------------------------
2626

2727
descriptor :: PluginId -> PluginDescriptor
28-
descriptor plId = PluginDescriptor
29-
{ pluginId = plId
30-
, pluginRules = mempty
31-
, pluginCommands = []
32-
, pluginCodeActionProvider = Nothing
33-
, pluginCodeLensProvider = Nothing
34-
, pluginDiagnosticProvider = Nothing
35-
, pluginHoverProvider = Nothing
36-
, pluginSymbolsProvider = Nothing
37-
, pluginFormattingProvider = Just provider
38-
, pluginCompletionProvider = Nothing
28+
descriptor plId = (defaultPluginDescriptor plId)
29+
{ pluginFormattingProvider = Just provider
3930
}
4031

4132
-- ---------------------------------------------------------------------

Diff for: src/Ide/Plugin/GhcIde.hs

+2-6
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,12 @@ import Text.Regex.TDFA.Text()
2020
-- ---------------------------------------------------------------------
2121

2222
descriptor :: PluginId -> PluginDescriptor
23-
descriptor plId = PluginDescriptor
24-
{ pluginId = plId
25-
, pluginRules = mempty
26-
, pluginCommands = [PluginCommand (CommandId "typesignature.add") "adds a signature" commandAddSignature]
23+
descriptor plId = (defaultPluginDescriptor plId)
24+
{ pluginCommands = [PluginCommand (CommandId "typesignature.add") "adds a signature" commandAddSignature]
2725
, pluginCodeActionProvider = Just codeAction'
2826
, pluginCodeLensProvider = Just codeLens'
29-
, pluginDiagnosticProvider = Nothing
3027
, pluginHoverProvider = Just hover'
3128
, pluginSymbolsProvider = Just symbolsProvider
32-
, pluginFormattingProvider = Nothing
3329
, pluginCompletionProvider = Just getCompletionsLSP
3430
}
3531

Diff for: src/Ide/Plugin/Ormolu.hs

+2-11
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,8 @@ import Text.Regex.TDFA.Text()
2929
-- ---------------------------------------------------------------------
3030

3131
descriptor :: PluginId -> PluginDescriptor
32-
descriptor plId = PluginDescriptor
33-
{ pluginId = plId
34-
, pluginRules = mempty
35-
, pluginCommands = []
36-
, pluginCodeActionProvider = Nothing
37-
, pluginCodeLensProvider = Nothing
38-
, pluginDiagnosticProvider = Nothing
39-
, pluginHoverProvider = Nothing
40-
, pluginSymbolsProvider = Nothing
41-
, pluginFormattingProvider = Just provider
42-
, pluginCompletionProvider = Nothing
32+
descriptor plId = (defaultPluginDescriptor plId)
33+
{ pluginFormattingProvider = Just provider
4334
}
4435

4536
-- ---------------------------------------------------------------------

Diff for: src/Ide/Plugin/Pragmas.hs

+2-10
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,9 @@ import Language.Haskell.LSP.Types
2424
-- ---------------------------------------------------------------------
2525

2626
descriptor :: PluginId -> PluginDescriptor
27-
descriptor plId = PluginDescriptor
28-
{ pluginId = plId
29-
, pluginRules = mempty
30-
, pluginCommands = commands
27+
descriptor plId = (defaultPluginDescriptor plId)
28+
{ pluginCommands = commands
3129
, pluginCodeActionProvider = Just codeActionProvider
32-
, pluginCodeLensProvider = Nothing
33-
, pluginDiagnosticProvider = Nothing
34-
, pluginHoverProvider = Nothing
35-
, pluginSymbolsProvider = Nothing
36-
, pluginFormattingProvider = Nothing
37-
, pluginCompletionProvider = Nothing
3830
}
3931

4032
-- ---------------------------------------------------------------------

Diff for: src/Ide/Types.hs

+24
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
{-# LANGUAGE GADTs #-}
2+
{-# LANGUAGE OverloadedStrings #-}
23
{-# LANGUAGE ScopedTypeVariables #-}
34

45
module Ide.Types
56
(
67
IdePlugins(..)
78
, PluginDescriptor(..)
9+
, defaultPluginDescriptor
810
, PluginCommand(..)
911
, PluginId(..)
1012
, CommandId(..)
@@ -19,6 +21,7 @@ module Ide.Types
1921
, CommandFunction
2022
, ExecuteCommandProvider
2123
, CompletionProvider
24+
, RenameProvider
2225
, WithSnippets(..)
2326
) where
2427

@@ -57,8 +60,24 @@ data PluginDescriptor =
5760
, pluginSymbolsProvider :: !(Maybe SymbolsProvider)
5861
, pluginFormattingProvider :: !(Maybe (FormattingProvider IO))
5962
, pluginCompletionProvider :: !(Maybe CompletionProvider)
63+
, pluginRenameProvider :: !(Maybe RenameProvider)
6064
}
6165

66+
defaultPluginDescriptor :: PluginId -> PluginDescriptor
67+
defaultPluginDescriptor plId =
68+
PluginDescriptor
69+
plId
70+
mempty
71+
mempty
72+
Nothing
73+
Nothing
74+
Nothing
75+
Nothing
76+
Nothing
77+
Nothing
78+
Nothing
79+
Nothing
80+
6281
-- instance Show PluginCommand where
6382
-- show (PluginCommand i _ _) = "PluginCommand { name = " ++ show i ++ " }"
6483

@@ -112,6 +131,11 @@ type CodeLensProvider = LSP.LspFuncs Config
112131
-> CodeLensParams
113132
-> IO (Either ResponseError (List CodeLens))
114133

134+
type RenameProvider = LSP.LspFuncs Config
135+
-> IdeState
136+
-> RenameParams
137+
-> IO (Either ResponseError WorkspaceEdit)
138+
115139
type DiagnosticProviderFuncSync
116140
= DiagnosticTrigger -> Uri
117141
-> IO (Either ResponseError (Map.Map Uri (S.Set Diagnostic)))

0 commit comments

Comments
 (0)