diff --git a/ghcide/src/Development/IDE/Core/Shake.hs b/ghcide/src/Development/IDE/Core/Shake.hs index 0b31b83ac7..8943ab9e90 100644 --- a/ghcide/src/Development/IDE/Core/Shake.hs +++ b/ghcide/src/Development/IDE/Core/Shake.hs @@ -162,7 +162,7 @@ import GHC.Stack (HasCallStack) import HieDb.Types import Ide.Plugin.Config import qualified Ide.PluginUtils as HLS -import Ide.Types (PluginId, IdePlugins) +import Ide.Types (IdePlugins, PluginId) import Language.LSP.Diagnostics import qualified Language.LSP.Server as LSP import Language.LSP.Types diff --git a/ghcide/src/Development/IDE/Plugin/Completions.hs b/ghcide/src/Development/IDE/Plugin/Completions.hs index 8e95614a27..4a02d94bf9 100644 --- a/ghcide/src/Development/IDE/Plugin/Completions.hs +++ b/ghcide/src/Development/IDE/Plugin/Completions.hs @@ -8,46 +8,45 @@ module Development.IDE.Plugin.Completions , ghcideCompletionsPluginPriority ) where -import Control.Concurrent.Async (concurrently) -import Control.Concurrent.STM.Stats (readTVarIO) +import Control.Concurrent.Async (concurrently) +import Control.Concurrent.STM.Stats (readTVarIO) import Control.Monad.Extra import Control.Monad.IO.Class import Control.Monad.Trans.Maybe import Data.Aeson -import qualified Data.HashMap.Strict as Map -import qualified Data.HashSet as Set -import Data.List (find) +import qualified Data.HashMap.Strict as Map +import qualified Data.HashSet as Set +import Data.List (find) import Data.Maybe -import qualified Data.Text as T +import qualified Data.Text as T import Development.IDE.Core.PositionMapping import Development.IDE.Core.RuleTypes -import Development.IDE.Core.Service hiding (Log, - LogShake) -import Development.IDE.Core.Shake hiding (Log) -import qualified Development.IDE.Core.Shake as Shake +import Development.IDE.Core.Service hiding (Log, LogShake) +import Development.IDE.Core.Shake hiding (Log) +import qualified Development.IDE.Core.Shake as Shake import Development.IDE.GHC.Compat -import Development.IDE.GHC.Error (rangeToSrcSpan) -import Development.IDE.GHC.Util (printOutputable) +import Development.IDE.GHC.Error (rangeToSrcSpan) +import Development.IDE.GHC.Util (printOutputable) import Development.IDE.Graph import Development.IDE.Plugin.Completions.Logic import Development.IDE.Plugin.Completions.Types import Development.IDE.Types.Exports -import Development.IDE.Types.HscEnvEq (HscEnvEq (envPackageExports), - hscEnv) -import qualified Development.IDE.Types.KnownTargets as KT +import Development.IDE.Types.HscEnvEq (HscEnvEq (envPackageExports), + hscEnv) +import qualified Development.IDE.Types.KnownTargets as KT import Development.IDE.Types.Location -import Development.IDE.Types.Logger (Pretty (pretty), - Recorder, - WithPriority, - cmapWithPrio) -import GHC.Exts (fromList, toList) -import Ide.Plugin.Config (Config) +import Development.IDE.Types.Logger (Pretty (pretty), + Recorder, + WithPriority, + cmapWithPrio) +import GHC.Exts (fromList, toList) +import Ide.Plugin.Config (Config) import Ide.Types -import qualified Language.LSP.Server as LSP +import qualified Language.LSP.Server as LSP import Language.LSP.Types -import qualified Language.LSP.VFS as VFS +import qualified Language.LSP.VFS as VFS import Numeric.Natural -import Text.Fuzzy.Parallel (Scored (..)) +import Text.Fuzzy.Parallel (Scored (..)) data Log = LogShake Shake.Log deriving Show diff --git a/ghcide/src/Development/IDE/Plugin/Completions/Logic.hs b/ghcide/src/Development/IDE/Plugin/Completions/Logic.hs index 415743d082..f88f459a73 100644 --- a/ghcide/src/Development/IDE/Plugin/Completions/Logic.hs +++ b/ghcide/src/Development/IDE/Plugin/Completions/Logic.hs @@ -59,7 +59,8 @@ import GHC.Plugins (Depth (AllTheWay), #endif import Ide.PluginUtils (mkLspCommand) import Ide.Types (CommandId (..), - IdePlugins(..), PluginId) + IdePlugins (..), + PluginId) import Language.LSP.Types import Language.LSP.Types.Capabilities import qualified Language.LSP.VFS as VFS diff --git a/hls-plugin-api/src/Ide/Types.hs b/hls-plugin-api/src/Ide/Types.hs index e9fbe8a28d..997300900a 100644 --- a/hls-plugin-api/src/Ide/Types.hs +++ b/hls-plugin-api/src/Ide/Types.hs @@ -56,6 +56,7 @@ import Control.Monad (void) import qualified System.Posix.Process as P (getProcessID) import System.Posix.Signals #endif +import Control.Applicative ((<|>)) import Control.Arrow ((&&&)) import Control.Lens ((^.)) import Data.Aeson hiding (defaultOptions) @@ -67,7 +68,7 @@ import Data.GADT.Compare import Data.Hashable (Hashable) import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap -import Data.List.Extra (sortOn, find) +import Data.List.Extra (find, sortOn) import Data.List.NonEmpty (NonEmpty (..), toList) import qualified Data.Map as Map import Data.Maybe @@ -107,12 +108,11 @@ import Options.Applicative (ParserInfo) import System.FilePath import System.IO.Unsafe import Text.Regex.TDFA.Text () -import Control.Applicative ((<|>)) -- --------------------------------------------------------------------- data IdePlugins ideState = IdePlugins_ - { ipMap_ :: HashMap PluginId (PluginDescriptor ideState) + { ipMap_ :: HashMap PluginId (PluginDescriptor ideState) , lookupCommandProvider :: CommandId -> Maybe PluginId } diff --git a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs index 23a02cfb60..59143edd56 100644 --- a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs +++ b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs @@ -30,9 +30,9 @@ import Development.IDE.Core.Actions (useE) import Development.IDE.Core.PositionMapping (PositionMapping, fromCurrentPosition, toCurrentRange) -import Development.IDE.Types.Logger (Pretty (..)) import qualified Development.IDE.GHC.ExactPrint as E import Development.IDE.Plugin.CodeAction +import Development.IDE.Types.Logger (Pretty (..)) import Ide.Plugin.CodeRange.Rules (CodeRange (..), GetCodeRange (..), codeRangeRule) @@ -69,7 +69,7 @@ data Log = LogRules Rules.Log instance Pretty Log where pretty log = case log of - LogRules codeRangeLog -> pretty codeRangeLog + LogRules codeRangeLog -> pretty codeRangeLog LogExactPrint exactPrintLog -> pretty exactPrintLog selectionRangeHandler :: IdeState -> PluginId -> SelectionRangeParams -> LspM c (Either ResponseError (List SelectionRange)) diff --git a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange/Rules.hs b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange/Rules.hs index fcd96ffea1..87b61f2fc8 100644 --- a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange/Rules.hs +++ b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange/Rules.hs @@ -23,41 +23,42 @@ module Ide.Plugin.CodeRange.Rules , simplify ) where -import Control.DeepSeq (NFData) -import qualified Control.Lens as Lens -import Control.Monad (foldM) -import Control.Monad.Except (ExceptT (..), runExceptT) -import Control.Monad.Reader (runReader) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Maybe (MaybeT (MaybeT), - maybeToExceptT) +import Control.DeepSeq (NFData) +import qualified Control.Lens as Lens +import Control.Monad (foldM) +import Control.Monad.Except (ExceptT (..), + runExceptT) +import Control.Monad.Reader (runReader) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Maybe (MaybeT (MaybeT), + maybeToExceptT) import Control.Monad.Trans.Writer.CPS -import Data.Coerce (coerce) -import Data.Data (Typeable) -import Data.Foldable (traverse_) -import Data.Function (on, (&)) +import Data.Coerce (coerce) +import Data.Data (Typeable) +import Data.Foldable (traverse_) +import Data.Function (on, (&)) import Data.Hashable -import Data.List (sort) -import qualified Data.Map.Strict as Map -import Data.Vector (Vector) -import qualified Data.Vector as V +import Data.List (sort) +import qualified Data.Map.Strict as Map +import Data.Vector (Vector) +import qualified Data.Vector as V import Development.IDE -import Development.IDE.Core.Rules (toIdeResult) -import qualified Development.IDE.Core.Shake as Shake +import Development.IDE.Core.Rules (toIdeResult) +import qualified Development.IDE.Core.Shake as Shake +import Development.IDE.GHC.Compat (HieAST (..), + HieASTs (getAsts), + ParsedSource, RefMap) import Development.IDE.GHC.Compat.ExactPrint (Annotated) -import Development.IDE.GHC.Compat (HieAST (..), - HieASTs (getAsts), - ParsedSource, RefMap) import Development.IDE.GHC.Compat.Util -import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (GetAnnotatedParsedSource)) -import GHC.Generics (Generic) -import Ide.Plugin.CodeRange.ASTPreProcess (CustomNodeType (..), - PreProcessEnv (..), - isCustomNode, - preProcessAST) -import Language.LSP.Types.Lens (HasEnd (end), - HasStart (start)) -import Prelude hiding (log) +import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (GetAnnotatedParsedSource)) +import GHC.Generics (Generic) +import Ide.Plugin.CodeRange.ASTPreProcess (CustomNodeType (..), + PreProcessEnv (..), + isCustomNode, + preProcessAST) +import Language.LSP.Types.Lens (HasEnd (end), + HasStart (start)) +import Prelude hiding (log) data Log = LogShake Shake.Log | LogNoAST diff --git a/plugins/hls-haddock-comments-plugin/src/Ide/Plugin/HaddockComments.hs b/plugins/hls-haddock-comments-plugin/src/Ide/Plugin/HaddockComments.hs index 2993219893..79acf7b072 100644 --- a/plugins/hls-haddock-comments-plugin/src/Ide/Plugin/HaddockComments.hs +++ b/plugins/hls-haddock-comments-plugin/src/Ide/Plugin/HaddockComments.hs @@ -15,10 +15,10 @@ import qualified Data.Map as Map import qualified Data.Text as T import Development.IDE hiding (pluginHandlers) import Development.IDE.GHC.Compat -import Development.IDE.Plugin.CodeAction import Development.IDE.GHC.Compat.ExactPrint import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (..)) -import qualified Development.IDE.GHC.ExactPrint as E +import qualified Development.IDE.GHC.ExactPrint as E +import Development.IDE.Plugin.CodeAction import Ide.Types import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint.Types hiding (GhcPs) diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Compat/ExactPrint.hs b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Compat/ExactPrint.hs index 28e34ba379..64e94a5740 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Compat/ExactPrint.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Compat/ExactPrint.hs @@ -1,6 +1,9 @@ -- | This module contains compatibility constructs to write type signatures across -- multiple ghc-exactprint versions, accepting that anything more ambitious is -- pretty much impossible with the GHC 9.2 redesign of ghc-exactprint +{-# LANGUAGE CPP #-} +{-# LANGUAGE PatternSynonyms #-} + module Development.IDE.GHC.Compat.ExactPrint #if MIN_VERSION_ghc(9,3,0) ( ) where @@ -8,7 +11,10 @@ module Development.IDE.GHC.Compat.ExactPrint ( ExactPrint , exactPrint , makeDeltaAst - , Retrie.Annotated, pattern Annotated, astA, annsA + , Retrie.Annotated + , pattern Annotated + , astA + , annsA ) where #if !MIN_VERSION_ghc(9,2,0) diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Dump.hs b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Dump.hs index cde3f79c48..19e7efe6e6 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Dump.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/Dump.hs @@ -1,7 +1,7 @@ {-# LANGUAGE CPP #-} module Development.IDE.GHC.Dump(showAstDataHtml) where -import Data.Data hiding (Fixity) -import Development.IDE.GHC.Compat hiding (NameAnn) +import Data.Data hiding (Fixity) +import Development.IDE.GHC.Compat hiding (NameAnn) import Development.IDE.GHC.Compat.ExactPrint #if MIN_VERSION_ghc(8,10,1) import GHC.Hs.Dump @@ -9,9 +9,9 @@ import GHC.Hs.Dump import HsDumpAst #endif #if MIN_VERSION_ghc(9,2,1) -import qualified Data.ByteString as B +import qualified Data.ByteString as B import Development.IDE.GHC.Compat.Util -import Generics.SYB (ext1Q, ext2Q, extQ) +import Generics.SYB (ext1Q, ext2Q, extQ) import GHC.Hs #endif #if MIN_VERSION_ghc(9,0,1) @@ -19,7 +19,7 @@ import GHC.Plugins #else import GhcPlugins #endif -import Prelude hiding ((<>)) +import Prelude hiding ((<>)) -- | Show a GHC syntax tree in HTML. #if MIN_VERSION_ghc(9,2,1) diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/ExactPrint.hs b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/ExactPrint.hs index d56b513a79..05edfb0bcf 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/GHC/ExactPrint.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/GHC/ExactPrint.hs @@ -1,5 +1,6 @@ -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-} +{-# LANGUAGE TypeFamilies #-} -- | This module hosts various abstractions and utility functions to work with ghc-exactprint. module Development.IDE.GHC.ExactPrint @@ -114,10 +115,10 @@ instance Pretty Log where instance Show (Annotated ParsedSource) where show _ = "" - + instance NFData (Annotated ParsedSource) where rnf = rwhnf - + data GetAnnotatedParsedSource = GetAnnotatedParsedSource deriving (Eq, Show, Typeable, GHC.Generic) diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs index 01c3b555c1..2d8ed28757 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs @@ -1,5 +1,6 @@ -- Copyright (c) 2019 The DAML Authors. All rights reserved. -- SPDX-License-Identifier: Apache-2.0 +{-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-} module Development.IDE.Plugin.CodeAction @@ -19,9 +20,9 @@ import Control.Arrow (second, (&&&), (>>>)) import Control.Concurrent.STM.Stats (atomically) +import Control.Monad.Extra import Control.Monad.IO.Class import Control.Monad.Trans.Maybe -import Control.Monad.Extra import Data.Aeson import Data.Char import qualified Data.DList as DL @@ -39,50 +40,52 @@ import qualified Data.Set as S import qualified Data.Text as T import qualified Data.Text.Utf16.Rope as Rope import Data.Tuple.Extra (fst3) -import Development.IDE.Types.Logger hiding (group) import Development.IDE.Core.Rules import Development.IDE.Core.RuleTypes import Development.IDE.Core.Service +import Development.IDE.Core.Shake hiding (Log) import Development.IDE.GHC.Compat import Development.IDE.GHC.Compat.ExactPrint import Development.IDE.GHC.Compat.Util import Development.IDE.GHC.Error import Development.IDE.GHC.ExactPrint -import qualified Development.IDE.GHC.ExactPrint as E +import qualified Development.IDE.GHC.ExactPrint as E import Development.IDE.GHC.Util (printOutputable, printRdrName) -import Development.IDE.Core.Shake hiding (Log) import Development.IDE.Plugin.CodeAction.Args import Development.IDE.Plugin.CodeAction.ExactPrint -import Development.IDE.Plugin.CodeAction.Util import Development.IDE.Plugin.CodeAction.PositionIndexed +import Development.IDE.Plugin.CodeAction.Util import Development.IDE.Plugin.Completions.Types import Development.IDE.Plugin.TypeLenses (suggestSignature) import Development.IDE.Types.Exports import Development.IDE.Types.Location +import Development.IDE.Types.Logger hiding + (group) import Development.IDE.Types.Options +import GHC.Exts (fromList) import qualified GHC.LanguageExtensions as Lang import Ide.PluginUtils (subRange) import Ide.Types import qualified Language.LSP.Server as LSP -import Language.LSP.Types (ApplyWorkspaceEditParams(..), CodeAction (..), +import Language.LSP.Types (ApplyWorkspaceEditParams (..), + CodeAction (..), CodeActionContext (CodeActionContext, _diagnostics), CodeActionKind (CodeActionQuickFix, CodeActionUnknown), CodeActionParams (CodeActionParams), Command, Diagnostic (..), - MessageType (..), - ShowMessageParams (..), List (..), + MessageType (..), ResponseError, SMethod (..), + ShowMessageParams (..), TextDocumentIdentifier (TextDocumentIdentifier), TextEdit (TextEdit, _range), UInt, WorkspaceEdit (WorkspaceEdit, _changeAnnotations, _changes, _documentChanges), type (|?) (InR), uriToFilePath) -import GHC.Exts (fromList) import Language.LSP.VFS (VirtualFile, _file_text) import Text.Regex.TDFA (mrAfter, @@ -389,7 +392,7 @@ suggestHideShadow ps fileContents mTcM mHar Diagnostic {_message, _range} | otherwise = [] where L _ HsModule {hsmodImports} = astA ps - + suggests identifier modName s | Just tcM <- mTcM, Just har <- mHar, diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Args.hs b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Args.hs index ef5c7b623a..0c953fdf0f 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Args.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Args.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} module Development.IDE.Plugin.CodeAction.Args ( CodeActionTitle, CodeActionPreferred, diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs index 57da3ee2f6..98e0b825eb 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs @@ -1,5 +1,6 @@ -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-} +{-# LANGUAGE TypeFamilies #-} module Development.IDE.Plugin.CodeAction.ExactPrint ( Rewrite (..), rewriteToEdit, @@ -20,17 +21,17 @@ module Development.IDE.Plugin.CodeAction.ExactPrint ( import Control.Monad import Control.Monad.Trans -import Data.Char (isAlphaNum) -import Data.Data (Data) -import Data.Generics (listify) -import qualified Data.Text as T -import Development.IDE.GHC.Compat hiding (Annotation) +import Data.Char (isAlphaNum) +import Data.Data (Data) +import Data.Generics (listify) +import qualified Data.Text as T +import Development.IDE.GHC.Compat hiding (Annotation) import Development.IDE.GHC.Error import Development.IDE.GHC.ExactPrint import Development.IDE.GHC.Util import Development.IDE.Spans.Common -import GHC.Exts (IsList (fromList)) -import GHC.Stack (HasCallStack) +import GHC.Exts (IsList (fromList)) +import GHC.Stack (HasCallStack) import Language.Haskell.GHC.ExactPrint import Language.LSP.Types @@ -38,28 +39,35 @@ import Development.IDE.Plugin.CodeAction.Util -- GHC version specific imports. For any supported GHC version, make sure there is no warning in imports. #if MIN_VERSION_ghc(9,2,0) -import Control.Lens (_head, _last, over) -import Data.Bifunctor (first) -import Data.Default (Default (..)) -import Data.Maybe (fromJust, fromMaybe, mapMaybe) -import GHC (AddEpAnn (..), AnnContext (..), AnnList (..), - AnnParen (..), DeltaPos (SameLine), EpAnn (..), - EpaLocation (EpaDelta), - IsUnicodeSyntax (NormalSyntax), - NameAdornment (NameParens), - TrailingAnn (AddCommaAnn), addAnns, ann, - emptyComments, reAnnL) +import Control.Lens (_head, _last, over) +import Data.Bifunctor (first) +import Data.Default (Default (..)) +import Data.Maybe (fromJust, fromMaybe, + mapMaybe) +import GHC (AddEpAnn (..), + AnnContext (..), + AnnList (..), + AnnParen (..), + DeltaPos (SameLine), + EpAnn (..), + EpaLocation (EpaDelta), + IsUnicodeSyntax (NormalSyntax), + NameAdornment (NameParens), + TrailingAnn (AddCommaAnn), + addAnns, ann, + emptyComments, reAnnL) #else -import Control.Applicative (Alternative ((<|>))) -import Control.Monad.Extra (whenJust) -import Data.Foldable (find) -import Data.Functor (($>)) -import qualified Data.Map.Strict as Map -import Data.Maybe (fromJust, isJust, - isNothing, mapMaybe) -import qualified Development.IDE.GHC.Compat.Util as Util -import Language.Haskell.GHC.ExactPrint.Types (DeltaPos (DP), - KeywordId (G), mkAnnKey) +import Control.Applicative (Alternative ((<|>))) +import Control.Monad.Extra (whenJust) +import Data.Foldable (find) +import Data.Functor (($>)) +import qualified Data.Map.Strict as Map +import Data.Maybe (fromJust, isJust, + isNothing, mapMaybe) +import qualified Development.IDE.GHC.Compat.Util as Util +import Language.Haskell.GHC.ExactPrint.Types (DeltaPos (DP), + KeywordId (G), + mkAnnKey) #endif ------------------------------------------------------------------------------ @@ -256,7 +264,7 @@ appendConstraint constraintT = go . traceAst "appendConstraint" -- we have to reposition it manually into the AnnContext close_dp = case ctxt of [L _ (HsParTy EpAnn{anns=AnnParen{ap_close}} _)] -> Just ap_close - _ -> Nothing + _ -> Nothing ctxt' = over _last (first addComma) $ map dropHsParTy ctxt return $ L l $ it{hst_ctxt = Just $ L l'' $ ctxt' ++ [constraint]} #endif @@ -293,7 +301,7 @@ liftParseAST df s = case parseAST df "" s of #if !MIN_VERSION_ghc(9,2,0) Right (anns, x) -> modifyAnnsT (anns <>) $> x #else - Right x -> pure (makeDeltaAst x) + Right x -> pure (makeDeltaAst x) #endif Left _ -> lift $ Left $ "No parse: " <> s @@ -433,33 +441,33 @@ extendImportViaParent df parent child (L l it@ImportDecl{..}) srcChild <- uniqueSrcSpanT let childRdr = reLocA $ L srcChild $ mkRdrUnqual $ mkVarOcc child childLIE = reLocA $ L srcChild $ IEName childRdr -#if !MIN_VERSION_ghc(9,2,0) - x :: LIE GhcPs = L ll' $ IEThingWith noExtField absIE NoIEWildcard [childLIE] [] +#if MIN_VERSION_ghc(9,2,0) + x :: LIE GhcPs = L ll' (IEThingWith (addAnns mempty [AddEpAnn AnnOpenP (EpaDelta (SameLine 1) []), AddEpAnn AnnCloseP def] emptyComments) absIE NoIEWildcard [childLIE]) +#else + x :: LIE GhcPs = L ll' (IEThingWith noExtField absIE NoIEWildcard [childLIE] []) -- take anns from ThingAbs, and attatch parens to it transferAnn lAbs x $ \old -> old{annsDP = annsDP old ++ [(G AnnOpenP, DP (0, 1)), (G AnnCloseP, dp00)]} addSimpleAnnT childRdr dp00 [(G AnnVal, dp00)] -#else - x :: LIE GhcPs = L ll' $ IEThingWith (addAnns mempty [AddEpAnn AnnOpenP (EpaDelta (SameLine 1) []), AddEpAnn AnnCloseP def] emptyComments) absIE NoIEWildcard [childLIE] #endif return $ L l it{ideclHiding = Just (hide, L l' $ reverse pre ++ [x] ++ xs)} #if !MIN_VERSION_ghc(9,2,0) go hide l' pre ((L l'' (IEThingWith _ twIE@(L _ ie) _ lies' _)) : xs) + -- ThingWith ie lies' => ThingWith ie (lies' ++ [child]) + | parent == unIEWrappedName ie + , child == wildCardSymbol = do + let thing = L l'' (IEThingWith noExtField twIE (IEWildcard 2) [] []) + modifyAnnsT (Map.map (\ann -> ann{annsDP = (G AnnDotdot, dp00) : annsDP ann})) + return $ L l it{ideclHiding = Just (hide, L l' $ reverse pre ++ [thing] ++ xs)} #else go hide l' pre ((L l'' (IEThingWith l''' twIE@(L _ ie) _ lies')) : xs) -#endif -- ThingWith ie lies' => ThingWith ie (lies' ++ [child]) | parent == unIEWrappedName ie , child == wildCardSymbol = do -#if MIN_VERSION_ghc(9,2,0) let it' = it{ideclHiding = Just (hide, lies)} thing = IEThingWith newl twIE (IEWildcard 2) [] newl = (\ann -> ann ++ [(AddEpAnn AnnDotdot d0)]) <$> l''' lies = L l' $ reverse pre ++ [L l'' thing] ++ xs return $ L l it' -#else - let thing = L l'' (IEThingWith noExtField twIE (IEWildcard 2) [] []) - modifyAnnsT (Map.map (\ann -> ann{annsDP = (G AnnDotdot, dp00) : annsDP ann})) - return $ L l it{ideclHiding = Just (hide, L l' $ reverse pre ++ [thing] ++ xs)} #endif | parent == unIEWrappedName ie , hasSibling <- not $ null lies' = @@ -507,7 +515,7 @@ extendImportViaParent df parent child (L l it@ImportDecl{..}) let parentLIE = reLocA $ L srcParent $ (if isParentOperator then IEType (epl 0) parentRdr' else IEName parentRdr') parentRdr' = modifyAnns parentRdr $ \case it@NameAnn{nann_adornment = NameParens} -> it{nann_open = epl 1} - other -> other + other -> other childLIE = reLocA $ L srcChild $ IEName childRdr #endif #if !MIN_VERSION_ghc(9,2,0) @@ -546,14 +554,14 @@ addCommaInImportList lies x = where isTrailingAnnComma :: TrailingAnn -> Bool isTrailingAnnComma (AddCommaAnn _) = True - isTrailingAnnComma _ = False + isTrailingAnnComma _ = False -- check if there is an existing trailing comma existingTrailingComma = fromMaybe False $ do L lastItemSrcAnn _ <- lastMaybe lies lastItemAnn <- case ann lastItemSrcAnn of EpAnn _ lastItemAnn _ -> pure lastItemAnn - _ -> Nothing + _ -> Nothing pure $ any isTrailingAnnComma (lann_trailing lastItemAnn) hasSibling = not . null $ lies @@ -638,7 +646,7 @@ extendHiding symbol (L l idecls) mlies df = do lies <- pure $ over _head (`setEntryDP` SameLine 1) lies #endif #if !MIN_VERSION_ghc(9,2,0) - singleHide = L l' [x] + let singleHide = L l' [x] when (isNothing mlies) $ do addSimpleAnnT singleHide @@ -693,11 +701,11 @@ deleteFromImport (T.pack -> symbol) (L l idecl) llies@(L lieLoc lies) _ = do #endif pure lidecl' where - deletedLies = #if MIN_VERSION_ghc(9,2,0) - over _last removeTrailingComma $ + deletedLies = over _last removeTrailingComma $ mapMaybe killLie lies +#else + deletedLies = mapMaybe killLie lies #endif - mapMaybe killLie lies killLie :: LIE GhcPs -> Maybe (LIE GhcPs) killLie v@(L _ (IEVar _ (L _ (unqualIEWrapName -> nam)))) | nam == symbol = Nothing @@ -707,9 +715,18 @@ deleteFromImport (T.pack -> symbol) (L l idecl) llies@(L lieLoc lies) _ = do | otherwise = Just v #if !MIN_VERSION_ghc(9,2,0) killLie (L lieL (IEThingWith xt ty@(L _ (unqualIEWrapName -> nam)) wild cons flds)) + | nam == symbol = Nothing + | otherwise = + Just $ + L lieL $ + IEThingWith + xt + ty + wild + (filter ((/= symbol) . unqualIEWrapName . unLoc) cons) + (filter ((/= symbol) . T.pack . Util.unpackFS . flLabel . unLoc) flds) #else killLie (L lieL (IEThingWith xt ty@(L _ (unqualIEWrapName -> nam)) wild cons)) -#endif | nam == symbol = Nothing | otherwise = Just $ @@ -719,7 +736,5 @@ deleteFromImport (T.pack -> symbol) (L l idecl) llies@(L lieLoc lies) _ = do ty wild (filter ((/= symbol) . unqualIEWrapName . unLoc) cons) -#if !MIN_VERSION_ghc(9,2,0) - (filter ((/= symbol) . T.pack . Util.unpackFS . flLabel . unLoc) flds) #endif killLie v = Just v diff --git a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Util.hs b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Util.hs index bfcb0d7a37..4eab4e23f2 100644 --- a/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Util.hs +++ b/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/Util.hs @@ -1,23 +1,25 @@ +{-# LANGUAGE CPP #-} module Development.IDE.Plugin.CodeAction.Util where #if MIN_VERSION_ghc(9,2,0) import GHC.Utils.Outputable #else -import Development.IDE.GHC.Util -import Development.IDE.GHC.Compat.Util import Development.IDE.GHC.Compat +import Development.IDE.GHC.Compat.Util +import Development.IDE.GHC.Util #endif -import Data.Data (Data) -import qualified Data.Unique as U +import Data.Data (Data) +import Data.Time.Clock.POSIX (POSIXTime, + getCurrentTime, + utcTimeToPOSIXSeconds) +import qualified Data.Unique as U import Debug.Trace import Development.IDE.GHC.Compat.ExactPrint as GHC +import Development.IDE.GHC.Dump (showAstDataHtml) import GHC.Stack -import System.Environment.Blank (getEnvDefault) +import System.Environment.Blank (getEnvDefault) import System.IO.Unsafe import Text.Printf -import Development.IDE.GHC.Dump (showAstDataHtml) -import Data.Time.Clock.POSIX (POSIXTime, getCurrentTime, - utcTimeToPOSIXSeconds) -------------------------------------------------------------------------------- -- Tracing exactprint terms diff --git a/plugins/hls-refactor-plugin/test/Main.hs b/plugins/hls-refactor-plugin/test/Main.hs index dafbd1e843..2a81b9085e 100644 --- a/plugins/hls-refactor-plugin/test/Main.hs +++ b/plugins/hls-refactor-plugin/test/Main.hs @@ -1,17 +1,17 @@ -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE ImplicitParams #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiWayIf #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-} -{-# LANGUAGE TypeOperators #-} -{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -Wno-deprecations -Wno-unticked-promoted-constructors #-} module Main @@ -19,34 +19,34 @@ module Main ) where import Control.Applicative.Combinators +import Control.Lens ((^.)) import Control.Monad import Data.Default import Data.Foldable import Data.List.Extra import Data.Maybe import qualified Data.Text as T -import Development.IDE.Test +import Data.Tuple.Extra import Development.IDE.GHC.Util import Development.IDE.Plugin.Completions.Types (extendImportCommandId) +import Development.IDE.Test import Development.IDE.Types.Location import Development.Shake (getDirectoryFilesIO) +import Ide.Types import Language.LSP.Test import Language.LSP.Types hiding (SemanticTokenAbsolute (length, line), SemanticTokenRelative (length), SemanticTokensEdit (_start), mkRange) -import qualified Language.LSP.Types.Lens as L +import qualified Language.LSP.Types as LSP import Language.LSP.Types.Capabilities +import qualified Language.LSP.Types.Lens as L import System.Directory import System.FilePath import System.Info.Extra (isMac, isWindows) import qualified System.IO.Extra import System.IO.Extra hiding (withTempDir) -import Control.Lens ((^.)) -import Data.Tuple.Extra -import Ide.Types -import qualified Language.LSP.Types as LSP import System.Time.Extra import Test.Tasty import Test.Tasty.ExpectedFailure @@ -54,11 +54,11 @@ import Test.Tasty.HUnit import Text.Regex.TDFA ((=~)) -import Test.Hls import Development.IDE.Plugin.CodeAction (matchRegExMultipleImports) +import Test.Hls -import qualified Development.IDE.Plugin.CodeAction as Refactor -import qualified Development.IDE.Plugin.HLS.GhcIde as GhcIde +import qualified Development.IDE.Plugin.CodeAction as Refactor +import qualified Development.IDE.Plugin.HLS.GhcIde as GhcIde main :: IO () main = defaultTestRunner tests diff --git a/plugins/hls-rename-plugin/src/Ide/Plugin/Rename.hs b/plugins/hls-rename-plugin/src/Ide/Plugin/Rename.hs index c6c1238b61..8a22172a67 100644 --- a/plugins/hls-rename-plugin/src/Ide/Plugin/Rename.hs +++ b/plugins/hls-rename-plugin/src/Ide/Plugin/Rename.hs @@ -29,7 +29,7 @@ import qualified Data.Map as M import Data.Maybe import Data.Mod.Word import qualified Data.Text as T -import Development.IDE (Recorder, WithPriority) +import Development.IDE (Recorder, WithPriority) import Development.IDE.Core.PositionMapping import Development.IDE.Core.RuleTypes import Development.IDE.Core.Service @@ -40,10 +40,10 @@ import Development.IDE.GHC.Compat.Parser import Development.IDE.GHC.Compat.Units import Development.IDE.GHC.Error import Development.IDE.GHC.ExactPrint -import qualified Development.IDE.GHC.ExactPrint as E +import qualified Development.IDE.GHC.ExactPrint as E +import Development.IDE.Plugin.CodeAction import Development.IDE.Spans.AtPoint import Development.IDE.Types.Location -import Development.IDE.Plugin.CodeAction import HieDb.Query import Ide.Plugin.Properties import Ide.PluginUtils