3
3
4
4
{-# LANGUAGE CPP #-}
5
5
{-# LANGUAGE DuplicateRecordFields #-}
6
- {-# LANGUAGE GADTs #-}
7
- {-# LANGUAGE RankNTypes #-}
8
6
#include "ghc-api-version.h"
9
7
10
8
-- | Go to the definition of a variable.
9
+
11
10
module Development.IDE.Plugin.CodeAction
12
11
( descriptor
13
12
@@ -20,7 +19,6 @@ import Control.Applicative ((<|>))
20
19
import Control.Arrow (second ,
21
20
(>>>) )
22
21
import Control.Concurrent.Extra (readVar )
23
- import Control.Lens (alaf )
24
22
import Control.Monad (guard , join )
25
23
import Control.Monad.IO.Class
26
24
import Data.Char
@@ -34,7 +32,6 @@ import Data.List.NonEmpty (NonEmpty ((:
34
32
import qualified Data.List.NonEmpty as NE
35
33
import qualified Data.Map as M
36
34
import Data.Maybe
37
- import Data.Monoid (Ap (.. ))
38
35
import qualified Data.Rope.UTF16 as Rope
39
36
import qualified Data.Set as S
40
37
import qualified Data.Text as T
@@ -47,13 +44,12 @@ import Development.IDE.GHC.Error
47
44
import Development.IDE.GHC.ExactPrint
48
45
import Development.IDE.GHC.Util (prettyPrint ,
49
46
printRdrName )
47
+ import Development.IDE.Plugin.CodeAction.Args
50
48
import Development.IDE.Plugin.CodeAction.ExactPrint
51
49
import Development.IDE.Plugin.CodeAction.PositionIndexed
52
50
import Development.IDE.Plugin.TypeLenses (GetGlobalBindingTypeSigs (GetGlobalBindingTypeSigs ),
53
- GlobalBindingTypeSigsResult ,
54
51
suggestSignature )
55
52
import Development.IDE.Spans.Common
56
- import Development.IDE.Spans.LocalBindings (Bindings )
57
53
import Development.IDE.Types.Exports
58
54
import Development.IDE.Types.HscEnvEq
59
55
import Development.IDE.Types.Location
@@ -117,7 +113,7 @@ codeAction state _ (CodeActionParams _ _ (TextDocumentIdentifier uri) _range Cod
117
113
df = ms_hspp_opts . pm_mod_summary <$> parsedModule
118
114
actions =
119
115
[ mkCA title [x] edit
120
- | x <- xs, (title, tedit) <- suggestAction exportsMap ideOptions parsedModule text df annotatedPS tcM har bindings gblSigs x
116
+ | x <- xs, (title, tedit) <- suggestAction $ CodeActionArgs exportsMap ideOptions parsedModule text df annotatedPS tcM har bindings gblSigs x
121
117
, let edit = WorkspaceEdit (Just $ Map. singleton uri $ List tedit) Nothing
122
118
]
123
119
actions' = caRemoveRedundantImports parsedModule text diag xs uri
@@ -129,55 +125,29 @@ mkCA :: T.Text -> [Diagnostic] -> WorkspaceEdit -> (Command |? CodeAction)
129
125
mkCA title diags edit =
130
126
InR $ CodeAction title (Just CodeActionQuickFix ) (Just $ List diags) Nothing Nothing (Just edit) Nothing
131
127
132
- rewrite ::
133
- Maybe DynFlags ->
134
- Maybe (Annotated ParsedSource ) ->
135
- (DynFlags -> ParsedSource -> [(T. Text , [Rewrite ])]) ->
136
- [(T. Text , [TextEdit ])]
137
- rewrite (Just df) (Just ps) f
138
- | Right edit <- (traverse . traverse )
139
- (alaf Ap foldMap (rewriteToEdit df (annsA ps)))
140
- (f df $ astA ps) = edit
141
- rewrite _ _ _ = []
142
-
143
- suggestAction
144
- :: ExportsMap
145
- -> IdeOptions
146
- -> Maybe ParsedModule
147
- -> Maybe T. Text
148
- -> Maybe DynFlags
149
- -> Maybe (Annotated ParsedSource )
150
- -> Maybe TcModuleResult
151
- -> Maybe HieAstResult
152
- -> Maybe Bindings
153
- -> Maybe GlobalBindingTypeSigsResult
154
- -> Diagnostic
155
- -> [(T. Text , [TextEdit ])]
156
- suggestAction packageExports ideOptions parsedModule text df annSource tcM har bindings gblSigs diag =
157
- concat
128
+ suggestAction :: CodeActionArgs -> [(T. Text , [TextEdit ])]
129
+ suggestAction caa =
130
+ concat $ unwrap caa <$>
158
131
-- Order these suggestions by priority
159
- [ suggestSignature True gblSigs tcM bindings diag
160
- , rewrite df annSource $ \ _ ps -> suggestExtendImport packageExports ps diag
161
- , rewrite df annSource $ \ df ps ->
162
- suggestImportDisambiguation df text ps diag
163
- , rewrite df annSource $ \ _ ps -> suggestNewOrExtendImportForClassMethod packageExports ps diag
164
- , suggestFillTypeWildcard diag
165
- , suggestFixConstructorImport text diag
166
- , suggestModuleTypo diag
167
- , suggestReplaceIdentifier text diag
168
- , removeRedundantConstraints text diag
169
- , suggestAddTypeAnnotationToSatisfyContraints text diag
170
- , rewrite df annSource $ \ df ps -> suggestConstraint df ps diag
171
- , rewrite df annSource $ \ _ ps -> suggestImplicitParameter ps diag
172
- , rewrite df annSource $ \ _ ps -> suggestHideShadow ps tcM har diag
173
- ] ++ concat
174
- [ suggestNewDefinition ideOptions pm text diag
175
- ++ suggestNewImport packageExports pm diag
176
- ++ suggestDeleteUnusedBinding pm text diag
177
- ++ suggestExportUnusedTopBinding text pm diag
178
- | Just pm <- [parsedModule]
179
- ] ++
180
- suggestFillHole diag -- Lowest priority
132
+ [ wrap $ suggestSignature True
133
+ , wrap suggestExtendImport
134
+ , wrap suggestImportDisambiguation
135
+ , wrap suggestNewOrExtendImportForClassMethod
136
+ , wrap suggestFillTypeWildcard
137
+ , wrap suggestFixConstructorImport
138
+ , wrap suggestModuleTypo
139
+ , wrap suggestReplaceIdentifier
140
+ , wrap removeRedundantConstraints
141
+ , wrap suggestAddTypeAnnotationToSatisfyContraints
142
+ , wrap suggestConstraint
143
+ , wrap suggestImplicitParameter
144
+ , wrap suggestHideShadow
145
+ , wrap suggestNewDefinition
146
+ , wrap suggestNewImport
147
+ , wrap suggestDeleteUnusedBinding
148
+ , wrap suggestExportUnusedTopBinding
149
+ , wrap suggestFillHole -- Lowest priority
150
+ ]
181
151
182
152
findSigOfDecl :: (IdP p -> Bool ) -> [LHsDecl p ] -> Maybe (Sig p )
183
153
findSigOfDecl pred decls =
0 commit comments