Skip to content

Commit b97b469

Browse files
Restore code actions order (#1273)
An unfortunate side effect of recent changes is that the extend import suggestions ended up at the bottom of the list Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 35b1023 commit b97b469

File tree

2 files changed

+21
-40
lines changed

2 files changed

+21
-40
lines changed

ghcide/src/Development/IDE/Plugin/CodeAction.hs

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -88,59 +88,48 @@ codeAction lsp state _ (TextDocumentIdentifier uri) _range CodeActionContext{_di
8888
df = ms_hspp_opts . pm_mod_summary <$> parsedModule
8989
actions =
9090
[ mkCA title [x] edit
91-
| x <- xs, (title, tedit) <- suggestAction exportsMap ideOptions parsedModule text x
91+
| x <- xs, (title, tedit) <- suggestAction exportsMap ideOptions parsedModule text df annotatedPS x
9292
, let edit = WorkspaceEdit (Just $ Map.singleton uri $ List tedit) Nothing
9393
]
94-
actions' =
95-
[mkCA title [x] edit
96-
| x <- xs
97-
, Just ps <- [annotatedPS]
98-
, Just dynflags <- [df]
99-
, (title, graft) <- suggestExactAction exportsMap dynflags ps x
100-
, Right edit <-
101-
[ -- either (Left . traceShow) Right $
102-
rewriteToEdit dynflags uri (annsA ps) graft
103-
]
104-
]
105-
actions'' = caRemoveRedundantImports parsedModule text diag xs uri
94+
actions' = caRemoveRedundantImports parsedModule text diag xs uri
10695
<> actions
107-
<> actions'
10896
<> caRemoveInvalidExports parsedModule text diag xs uri
109-
pure $ Right $ List actions''
97+
pure $ Right $ List actions'
11098

11199
mkCA :: T.Text -> [Diagnostic] -> WorkspaceEdit -> CAResult
112100
mkCA title diags edit =
113101
CACodeAction $ CodeAction title (Just CodeActionQuickFix) (Just $ List diags) (Just edit) Nothing
114102

115-
suggestExactAction ::
116-
ExportsMap ->
117-
DynFlags ->
118-
Annotated ParsedSource ->
119-
Diagnostic ->
120-
[(T.Text, Rewrite)]
121-
suggestExactAction exportsMap df ps x =
122-
concat
123-
[ suggestConstraint df (astA ps) x
124-
, suggestImplicitParameter (astA ps) x
125-
, suggestExtendImport exportsMap (astA ps) x
126-
]
103+
rewrite ::
104+
Maybe DynFlags ->
105+
Maybe (Annotated ParsedSource) ->
106+
(DynFlags -> ParsedSource -> [(T.Text, Rewrite)]) ->
107+
[(T.Text, [TextEdit])]
108+
rewrite (Just df) (Just ps) f
109+
| Right edit <- (traverse . traverse) (rewriteToEdit df (annsA ps)) (f df $ astA ps) = edit
110+
rewrite _ _ _ = []
127111

128112
suggestAction
129113
:: ExportsMap
130114
-> IdeOptions
131115
-> Maybe ParsedModule
132116
-> Maybe T.Text
117+
-> Maybe DynFlags
118+
-> Maybe (Annotated ParsedSource)
133119
-> Diagnostic
134120
-> [(T.Text, [TextEdit])]
135-
suggestAction packageExports ideOptions parsedModule text diag = concat
121+
suggestAction packageExports ideOptions parsedModule text df annSource diag = concat
136122
-- Order these suggestions by priority
137123
[ suggestSignature True diag
124+
, rewrite df annSource $ \_ ps -> suggestExtendImport packageExports ps diag
138125
, suggestFillTypeWildcard diag
139126
, suggestFixConstructorImport text diag
140127
, suggestModuleTypo diag
141128
, suggestReplaceIdentifier text diag
142129
, removeRedundantConstraints text diag
143130
, suggestAddTypeAnnotationToSatisfyContraints text diag
131+
, rewrite df annSource $ \df ps -> suggestConstraint df ps diag
132+
, rewrite df annSource $ \_ ps -> suggestImplicitParameter ps diag
144133
] ++ concat
145134
[ suggestNewDefinition ideOptions pm text diag
146135
++ suggestNewImport packageExports pm diag

ghcide/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import Control.Monad
1818
import Control.Monad.Trans
1919
import Data.Data (Data)
2020
import Data.Functor
21-
import qualified Data.HashMap.Strict as HMap
2221
import qualified Data.Map.Strict as Map
2322
import Data.Maybe (fromJust)
2423
import qualified Data.Text as T
@@ -50,22 +49,15 @@ data Rewrite where
5049
-- | Convert a 'Rewrite' into a 'WorkspaceEdit'.
5150
rewriteToEdit ::
5251
DynFlags ->
53-
Uri ->
5452
Anns ->
5553
Rewrite ->
56-
Either String WorkspaceEdit
57-
rewriteToEdit dflags uri anns (Rewrite dst f) = do
54+
Either String [TextEdit]
55+
rewriteToEdit dflags anns (Rewrite dst f) = do
5856
(ast, (anns, _), _) <- runTransformT anns $ f dflags
59-
let editMap =
60-
HMap.fromList
61-
[ ( uri,
62-
List
63-
[ TextEdit (fromJust $ srcSpanToRange dst) $
57+
let editMap = [ TextEdit (fromJust $ srcSpanToRange dst) $
6458
T.pack $ tail $ exactPrint ast anns
6559
]
66-
)
67-
]
68-
pure $ WorkspaceEdit (Just editMap) Nothing
60+
pure editMap
6961

7062
srcSpanToRange :: SrcSpan -> Maybe Range
7163
srcSpanToRange (UnhelpfulSpan _) = Nothing

0 commit comments

Comments
 (0)