Skip to content

Commit 50c6b73

Browse files
committed
Add getExtensions to ghcide
1 parent 381cec5 commit 50c6b73

File tree

7 files changed

+58
-66
lines changed

7 files changed

+58
-66
lines changed

ghcide/src/Development/IDE/GHC/Util.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ module Development.IDE.GHC.Util(
2626
setHieDir,
2727
dontWriteHieFiles,
2828
disableWarningsAsErrors,
29-
printOutputable
29+
printOutputable,
30+
getExtensions
3031
) where
3132

3233
#if MIN_VERSION_ghc(9,2,0)
34+
import GHC.Data.EnumSet
3335
import GHC.Data.FastString
3436
import GHC.Data.StringBuffer
3537
import GHC.Driver.Env hiding (hscSetFlags)
@@ -73,7 +75,7 @@ import Development.IDE.Types.Location
7375
import Foreign.ForeignPtr
7476
import Foreign.Ptr
7577
import Foreign.Storable
76-
import GHC
78+
import GHC hiding (ParsedModule (..))
7779
import GHC.IO.BufferedIO (BufferedIO)
7880
import GHC.IO.Device as IODevice
7981
import GHC.IO.Encoding
@@ -295,3 +297,6 @@ printOutputable =
295297
-- More discussion at https://github.com/haskell/haskell-language-server/issues/3115.
296298
unescape . T.pack . printWithoutUniques
297299
{-# INLINE printOutputable #-}
300+
301+
getExtensions :: ParsedModule -> [Extension]
302+
getExtensions = toList . extensionFlags . ms_hspp_opts . pm_mod_summary

plugins/hls-alternate-number-format-plugin/src/Ide/Plugin/AlternateNumberFormat.hs

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,32 @@
44
{-# LANGUAGE TypeOperators #-}
55
module Ide.Plugin.AlternateNumberFormat (descriptor, Log(..)) where
66

7-
import Control.Lens ((^.))
8-
import Control.Monad.Except (ExceptT, MonadIO, liftIO)
9-
import qualified Data.HashMap.Strict as HashMap
10-
import Data.Text (Text, unpack)
11-
import qualified Data.Text as T
12-
import Development.IDE (GetParsedModule (GetParsedModule),
13-
GhcSession (GhcSession),
14-
IdeState, RuleResult, Rules,
15-
define, getFileContents,
16-
hscEnv, realSrcSpanToRange,
17-
runAction, use, useWithStale)
18-
import qualified Development.IDE.Core.Shake as Shake
19-
import Development.IDE.GHC.Compat hiding (getSrcSpan)
20-
import Development.IDE.GHC.Compat.Util (toList)
21-
import Development.IDE.Graph.Classes (Hashable, NFData, rnf)
22-
import Development.IDE.Spans.Pragmas (NextPragmaInfo,
23-
getFirstPragma,
24-
getNextPragmaInfo,
25-
insertNewPragma)
26-
import Development.IDE.Types.Logger as Logger
27-
import GHC.Generics (Generic)
28-
import GHC.LanguageExtensions.Type (Extension)
29-
import Ide.Plugin.Conversion (AlternateFormat,
30-
ExtensionNeeded (NeedsExtension, NoExtension),
31-
alternateFormat)
7+
import Control.Lens ((^.))
8+
import Control.Monad.Except (ExceptT, MonadIO, liftIO)
9+
import qualified Data.HashMap.Strict as HashMap
10+
import Data.Text (Text, unpack)
11+
import qualified Data.Text as T
12+
import Development.IDE (GetParsedModule (GetParsedModule),
13+
IdeState, RuleResult, Rules,
14+
define, realSrcSpanToRange,
15+
runAction, use)
16+
import qualified Development.IDE.Core.Shake as Shake
17+
import Development.IDE.GHC.Compat hiding (getSrcSpan)
18+
import Development.IDE.GHC.Util (getExtensions)
19+
import Development.IDE.Graph.Classes (Hashable, NFData, rnf)
20+
import Development.IDE.Spans.Pragmas (NextPragmaInfo, getFirstPragma,
21+
insertNewPragma)
22+
import Development.IDE.Types.Logger as Logger
23+
import GHC.Generics (Generic)
24+
import Ide.Plugin.Conversion (AlternateFormat,
25+
ExtensionNeeded (NeedsExtension, NoExtension),
26+
alternateFormat)
3227
import Ide.Plugin.Literals
33-
import Ide.PluginUtils (getNormalizedFilePath,
34-
handleMaybeM, pluginResponse)
28+
import Ide.PluginUtils (getNormalizedFilePath,
29+
handleMaybeM, pluginResponse)
3530
import Ide.Types
3631
import Language.LSP.Types
37-
import qualified Language.LSP.Types.Lens as L
32+
import qualified Language.LSP.Types.Lens as L
3833

3934
newtype Log = LogShake Shake.Log deriving Show
4035

@@ -75,12 +70,10 @@ collectLiteralsRule :: Recorder (WithPriority Log) -> Rules ()
7570
collectLiteralsRule recorder = define (cmapWithPrio LogShake recorder) $ \CollectLiterals nfp -> do
7671
pm <- use GetParsedModule nfp
7772
-- get the current extensions active and transform them into FormatTypes
78-
let exts = getExtensions <$> pm
73+
let exts = map GhcExtension . getExtensions <$> pm
7974
-- collect all the literals for a file
8075
lits = collectLiterals . pm_parsed_source <$> pm
8176
pure ([], CLR <$> lits <*> exts)
82-
where
83-
getExtensions = map GhcExtension . toList . extensionFlags . ms_hspp_opts . pm_mod_summary
8477

8578
codeActionHandler :: PluginMethodHandler IdeState 'TextDocumentCodeAction
8679
codeActionHandler state pId (CodeActionParams _ _ docId currRange _) = pluginResponse $ do

plugins/hls-brittany-plugin/src/Ide/Plugin/Brittany.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import Data.Semigroup
1717
import Data.Text (Text)
1818
import qualified Data.Text as T
1919
import Development.IDE hiding
20-
(pluginHandlers)
20+
(getExtensions,
21+
pluginHandlers)
2122
import qualified Development.IDE.GHC.Compat as GHC hiding
2223
(Cpp)
2324
import qualified Development.IDE.GHC.Compat.Util as GHC

plugins/hls-class-plugin/src/Ide/Plugin/Class/Utils.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import Development.IDE.GHC.Compat
1313
import Development.IDE.GHC.Compat.Util
1414
import Development.IDE.Spans.Pragmas (getNextPragmaInfo,
1515
insertNewPragma)
16-
import GHC.LanguageExtensions.Type (Extension)
1716
import Ide.PluginUtils
1817
import Language.LSP.Types
1918

@@ -64,6 +63,6 @@ insertPragmaIfNotPresent state nfp pragma = do
6463
$ liftIO
6564
$ runAction "classplugin.insertPragmaIfNotPresent.GetParsedModuleWithComments" state
6665
$ use GetParsedModuleWithComments nfp
67-
let exts = (toList . extensionFlags . ms_hspp_opts . pm_mod_summary) pm
66+
let exts = getExtensions pm
6867
info = getNextPragmaInfo sessionDynFlags fileContents
6968
pure [insertNewPragma info pragma | pragma `notElem` exts]

plugins/hls-explicit-record-fields-plugin/src/Ide/Plugin/ExplicitFields.hs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,15 @@ import Development.IDE.GHC.Compat (HasSrcSpan (..),
4040
HsConDetails (RecCon),
4141
HsRecFields (..),
4242
LPat, Outputable,
43-
SrcSpan,
44-
pm_mod_summary,
45-
unLoc)
43+
SrcSpan, unLoc)
4644
import Development.IDE.GHC.Compat.Core (Extension (NamedFieldPuns),
4745
GhcPass (..),
4846
HsExpr (RecordCon, rcon_flds),
49-
LHsExpr,
50-
ModSummary (..),
51-
Pass (..), Pat (..),
52-
extensionFlags,
53-
hfbPun, hs_valds,
54-
mapLoc)
55-
import Development.IDE.GHC.Compat.Util (toList)
56-
import Development.IDE.GHC.Util (printOutputable)
47+
LHsExpr, Pass (..),
48+
Pat (..), hfbPun,
49+
hs_valds, mapLoc)
50+
import Development.IDE.GHC.Util (getExtensions,
51+
printOutputable)
5752
import Development.IDE.Graph (RuleResult)
5853
import Development.IDE.Graph.Classes (Hashable,
5954
NFData (rnf))
@@ -156,9 +151,9 @@ collectRecordsRule recorder = define (cmapWithPrio LogShake recorder) $ \Collect
156151
let renderedRecs = traverse renderRecordInfo recs
157152
recMap = buildIntervalMap <$> renderedRecs
158153
pure ([], CRR <$> recMap <*> exts)
159-
160-
getEnabledExtensions :: TcModuleResult -> [GhcExtension]
161-
getEnabledExtensions = map GhcExtension . toList . extensionFlags . ms_hspp_opts . pm_mod_summary . tmrParsed
154+
where
155+
getEnabledExtensions :: TcModuleResult -> [GhcExtension]
156+
getEnabledExtensions = map GhcExtension . getExtensions . tmrParsed
162157

163158
getRecords :: TcModuleResult -> [RecordInfo]
164159
getRecords (tmrRenamed -> (hs_valds -> valBinds,_,_,_)) =

plugins/hls-gadt-plugin/src/Ide/Plugin/GADT.hs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,26 @@
88
{-# LANGUAGE ViewPatterns #-}
99
module Ide.Plugin.GADT (descriptor) where
1010

11-
import Control.Lens ((^.))
11+
import Control.Lens ((^.))
1212
import Control.Monad.Except
13-
import Data.Aeson (FromJSON, ToJSON,
14-
Value (Null), toJSON)
15-
import Data.Either.Extra (maybeToEither)
16-
import qualified Data.HashMap.Lazy as HashMap
17-
import qualified Data.Text as T
13+
import Data.Aeson (FromJSON, ToJSON, Value (Null),
14+
toJSON)
15+
import Data.Either.Extra (maybeToEither)
16+
import qualified Data.HashMap.Lazy as HashMap
17+
import qualified Data.Text as T
1818
import Development.IDE
1919
import Development.IDE.GHC.Compat
2020

21-
import Control.Monad.Trans.Except (throwE)
22-
import Data.Maybe (mapMaybe)
23-
import Development.IDE.GHC.Compat.Util (toList)
24-
import Development.IDE.Spans.Pragmas (getFirstPragma,
25-
insertNewPragma)
26-
import GHC.Generics (Generic)
21+
import Control.Monad.Trans.Except (throwE)
22+
import Data.Maybe (mapMaybe)
23+
import Development.IDE.Spans.Pragmas (getFirstPragma, insertNewPragma)
24+
import GHC.Generics (Generic)
2725
import Ide.Plugin.GHC
2826
import Ide.PluginUtils
2927
import Ide.Types
30-
import Language.LSP.Server (sendRequest)
28+
import Language.LSP.Server (sendRequest)
3129
import Language.LSP.Types
32-
import qualified Language.LSP.Types.Lens as L
30+
import qualified Language.LSP.Types.Lens as L
3331

3432
descriptor :: PluginId -> PluginDescriptor IdeState
3533
descriptor plId = (defaultPluginDescriptor plId)
@@ -116,5 +114,5 @@ getInRangeH98DeclsAndExts state range nfp = do
116114
decls = filter isH98DataDecl
117115
$ mapMaybe getDataDecl
118116
$ filter (inRange range) hsDecls
119-
exts = (toList . extensionFlags . ms_hspp_opts . pm_mod_summary) pm
117+
exts = getExtensions pm
120118
pure (decls, exts)

plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ import qualified Data.Text as T
5151
import qualified Data.Text.Encoding as T
5252
import Data.Typeable
5353
import Development.IDE hiding
54-
(Error)
54+
(Error,
55+
getExtensions)
5556
import Development.IDE.Core.Rules (defineNoFile,
5657
getParsedModuleWithComments,
5758
usePropertyAction)

0 commit comments

Comments
 (0)