Skip to content

Commit 6ff0e02

Browse files
mrcjkbmergify[bot]
andauthored
Split pragmas plugin by providers + decrease disable-warning priority (#3640)
Fixes #3636. Fixes #3636. Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 2ddd056 commit 6ff0e02

File tree

3 files changed

+92
-59
lines changed

3 files changed

+92
-59
lines changed

plugins/hls-pragmas-plugin/src/Ide/Plugin/Pragmas.hs

+28-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99

1010
-- | Provides code actions to add missing pragmas (whenever GHC suggests to)
1111
module Ide.Plugin.Pragmas
12-
( descriptor
12+
( suggestPragmaDescriptor
13+
, completionDescriptor
14+
, suggestDisableWarningDescriptor
1315
-- For testing
1416
, validPragmas
1517
) where
@@ -33,22 +35,40 @@ import qualified Text.Fuzzy as Fuzzy
3335

3436
-- ---------------------------------------------------------------------
3537

36-
descriptor :: PluginId -> PluginDescriptor IdeState
37-
descriptor plId = (defaultPluginDescriptor plId)
38-
{ pluginHandlers = mkPluginHandler J.STextDocumentCodeAction codeActionProvider
39-
<> mkPluginHandler J.STextDocumentCompletion completion
38+
suggestPragmaDescriptor :: PluginId -> PluginDescriptor IdeState
39+
suggestPragmaDescriptor plId = (defaultPluginDescriptor plId)
40+
{ pluginHandlers = mkPluginHandler J.STextDocumentCodeAction suggestPragmaProvider
41+
, pluginPriority = defaultPluginPriority + 1000
42+
}
43+
44+
completionDescriptor :: PluginId -> PluginDescriptor IdeState
45+
completionDescriptor plId = (defaultPluginDescriptor plId)
46+
{ pluginHandlers = mkPluginHandler J.STextDocumentCompletion completion
4047
, pluginPriority = ghcideCompletionsPluginPriority + 1
4148
}
4249

50+
suggestDisableWarningDescriptor :: PluginId -> PluginDescriptor IdeState
51+
suggestDisableWarningDescriptor plId = (defaultPluginDescriptor plId)
52+
{ pluginHandlers = mkPluginHandler J.STextDocumentCodeAction suggestDisableWarningProvider
53+
-- #3636 Suggestions to disable warnings should appear last.
54+
, pluginPriority = 0
55+
}
56+
4357
-- ---------------------------------------------------------------------
4458
-- | Title and pragma
4559
type PragmaEdit = (T.Text, Pragma)
4660

4761
data Pragma = LangExt T.Text | OptGHC T.Text
4862
deriving (Show, Eq, Ord)
4963

50-
codeActionProvider :: PluginMethodHandler IdeState 'J.TextDocumentCodeAction
51-
codeActionProvider state _plId (J.CodeActionParams _ _ docId _ (J.CodeActionContext (J.List diags) _monly))
64+
suggestPragmaProvider :: PluginMethodHandler IdeState 'J.TextDocumentCodeAction
65+
suggestPragmaProvider = mkCodeActionProvider suggest
66+
67+
suggestDisableWarningProvider :: PluginMethodHandler IdeState 'J.TextDocumentCodeAction
68+
suggestDisableWarningProvider = mkCodeActionProvider $ const suggestDisableWarning
69+
70+
mkCodeActionProvider :: (Maybe DynFlags -> Diagnostic -> [PragmaEdit]) -> PluginMethodHandler IdeState 'J.TextDocumentCodeAction
71+
mkCodeActionProvider mkSuggest state _plId (J.CodeActionParams _ _ docId _ (J.CodeActionContext (J.List diags) _monly))
5272
| let J.TextDocumentIdentifier{ _uri = uri } = docId
5373
, Just normalizedFilePath <- J.uriToNormalizedFilePath $ toNormalizedUri uri = do
5474
-- ghc session to get some dynflags even if module isn't parsed
@@ -60,7 +80,7 @@ codeActionProvider state _plId (J.CodeActionParams _ _ docId _ (J.CodeActionCont
6080
case ghcSession of
6181
Just (hscEnv -> hsc_dflags -> sessionDynFlags, _) ->
6282
let nextPragmaInfo = Pragmas.getNextPragmaInfo sessionDynFlags fileContents
63-
pedits = nubOrdOn snd . concat $ suggest parsedModuleDynFlags <$> diags
83+
pedits = (nubOrdOn snd . concat $ mkSuggest parsedModuleDynFlags <$> diags)
6484
in
6585
pure $ Right $ List $ pragmaEditToAction uri nextPragmaInfo <$> pedits
6686
Nothing -> pure $ Right $ List []
@@ -95,7 +115,6 @@ pragmaEditToAction uri Pragmas.NextPragmaInfo{ nextPragmaLine, lineSplitTextEdit
95115
suggest :: Maybe DynFlags -> Diagnostic -> [PragmaEdit]
96116
suggest dflags diag =
97117
suggestAddPragma dflags diag
98-
++ suggestDisableWarning diag
99118

100119
-- ---------------------------------------------------------------------
101120

0 commit comments

Comments
 (0)