From 39d4ed913d2d7ef15f901b2a7db16527e68adb86 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sun, 6 Sep 2020 17:04:45 +0100 Subject: [PATCH 1/3] Rebase on top of ghcide HEAD --- exe/Main.hs | 2 +- ghcide | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exe/Main.hs b/exe/Main.hs index 7a5bd8e44e..9d0adb69fc 100644 --- a/exe/Main.hs +++ b/exe/Main.hs @@ -186,7 +186,7 @@ runLspMode lspArgs@LspArguments {..} = do hPutStrLn stderr $ " in directory: " <> dir hPutStrLn stderr "If you are seeing this in a terminal, you probably should have run ghcide WITHOUT the --lsp option!" - runLanguageServer options (pluginHandler plugins) getInitialConfig getConfigFromNotification $ \getLspId event vfs caps wProg wIndefProg _getConfig -> do + runLanguageServer options (pluginHandler plugins) getInitialConfig getConfigFromNotification $ \getLspId event vfs caps wProg wIndefProg _getConfig _rootPath -> do t <- t hPutStrLn stderr $ "Started LSP server in " ++ showDuration t sessionLoader <- loadSession dir diff --git a/ghcide b/ghcide index 078e3d3c0d..96cf8c53d0 160000 --- a/ghcide +++ b/ghcide @@ -1 +1 @@ -Subproject commit 078e3d3c0d319f83841ccbcdc60ff5f0e243f6be +Subproject commit 96cf8c53d0bdc16d3d2cd0559b74962593ce6dc5 From b2d45e899c1f307023d862c2c817d69751dff33d Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sun, 9 Aug 2020 11:37:06 +0100 Subject: [PATCH 2/3] use Development.IDE to trim imports --- src/Ide/Plugin.hs | 7 +------ src/Ide/Plugin/Brittany.hs | 2 +- src/Ide/Plugin/Eval.hs | 19 ++++++------------- src/Ide/Plugin/Example.hs | 14 ++++---------- src/Ide/Plugin/Example2.hs | 10 ++-------- src/Ide/Plugin/Floskell.hs | 3 +-- src/Ide/Plugin/Formatter.hs | 12 +----------- src/Ide/Plugin/Fourmolu.hs | 7 +------ src/Ide/Plugin/GhcIde.hs | 7 +++---- src/Ide/Plugin/ImportLens.hs | 9 +-------- src/Ide/Plugin/Ormolu.hs | 7 +------ src/Ide/Plugin/Pragmas.hs | 2 +- src/Ide/Plugin/Retrie.hs | 24 +++--------------------- src/Ide/Types.hs | 4 +--- 14 files changed, 27 insertions(+), 100 deletions(-) diff --git a/src/Ide/Plugin.hs b/src/Ide/Plugin.hs index ed3610522d..1ef7c3e436 100644 --- a/src/Ide/Plugin.hs +++ b/src/Ide/Plugin.hs @@ -28,13 +28,8 @@ import qualified Data.List as List import qualified Data.Map as Map import Data.Maybe import qualified Data.Text as T -import Development.IDE.Core.Rules -import Development.IDE.Core.Shake +import Development.IDE hiding (pluginRules) import Development.IDE.LSP.Server -import Development.IDE.Plugin hiding (pluginRules) -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Logger -import Development.Shake hiding ( Diagnostic, command ) import GHC.Generics import Ide.Plugin.Config import Ide.Plugin.Formatter diff --git a/src/Ide/Plugin/Brittany.hs b/src/Ide/Plugin/Brittany.hs index 9d4fca2368..0d68bb9f0f 100644 --- a/src/Ide/Plugin/Brittany.hs +++ b/src/Ide/Plugin/Brittany.hs @@ -7,7 +7,7 @@ import Data.Coerce import Data.Semigroup import Data.Text (Text) import qualified Data.Text as T -import Development.IDE.Types.Location +import Development.IDE import Language.Haskell.Brittany import Language.Haskell.LSP.Types as J import qualified Language.Haskell.LSP.Types.Lens as J diff --git a/src/Ide/Plugin/Eval.hs b/src/Ide/Plugin/Eval.hs index 9f779841b3..d94bca4573 100644 --- a/src/Ide/Plugin/Eval.hs +++ b/src/Ide/Plugin/Eval.hs @@ -41,17 +41,10 @@ import Data.String (IsString (fromString)) import Data.Text (Text) import qualified Data.Text as T import Data.Time (getCurrentTime) -import Development.IDE.Core.Rules (runAction) -import Development.IDE.Core.RuleTypes (GetModSummary (..), - GhcSession (..)) -import Development.IDE.Core.Shake (use_) -import Development.IDE.GHC.Util (evalGhcEnv, hscEnv, - textToStringBuffer) -import Development.IDE.Types.Location (toNormalizedFilePath', - uriToFilePath') +import Development.IDE import DynamicLoading (initializePlugins) import DynFlags (targetPlatform) -import GHC (Ghc, TcRnExprMode(..), DynFlags, ExecResult (..), GeneralFlag (Opt_IgnoreHpcChanges, Opt_IgnoreOptimChanges, Opt_ImplicitImportQualified), +import Development.IDE.GHC.Compat (Ghc, TcRnExprMode(..), DynFlags, ExecResult (..), GeneralFlag (Opt_IgnoreHpcChanges, Opt_IgnoreOptimChanges, Opt_ImplicitImportQualified), GhcLink (LinkInMemory), GhcMode (CompManager), HscTarget (HscInterpreted), @@ -316,15 +309,15 @@ evalGhciLikeCmd cmd arg = do (ty, kind) <- typeKind True $ T.unpack input pure $ Just - $ T.unlines + $ T.unlines $ map ("-- " <>) [ input <> " :: " <> tppr kind , "= " <> tppr ty - ] + ] "type" -> do let (emod, expr) = parseExprMode arg ty <- exprType emod $ T.unpack expr - pure $ Just $ + pure $ Just $ "-- " <> expr <> " :: " <> tppr ty <> "\n" _ -> E.throw $ GhciLikeCmdNotImplemented cmd arg @@ -346,7 +339,7 @@ instance Show GhciLikeCmdException where showsPrec _ GhciLikeCmdNotImplemented{..} = showString "unknown command '" . showString (T.unpack ghciCmdName) . showChar '\'' - + instance E.Exception GhciLikeCmdException parseGhciLikeCmd :: Text -> Maybe (Text, Text) diff --git a/src/Ide/Plugin/Example.hs b/src/Ide/Plugin/Example.hs index 1e77471f46..864d67005c 100644 --- a/src/Ide/Plugin/Example.hs +++ b/src/Ide/Plugin/Example.hs @@ -23,21 +23,15 @@ import qualified Data.HashSet as HashSet import Data.Hashable import qualified Data.Text as T import Data.Typeable -import Development.IDE.Core.OfInterest -import Development.IDE.Core.RuleTypes -import Development.IDE.Core.Rules -import Development.IDE.Core.Service -import Development.IDE.Core.Shake -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location -import Development.IDE.Types.Logger -import Development.Shake hiding ( Diagnostic ) +import Development.IDE as D +import Development.IDE.GHC.Compat (ParsedModule(ParsedModule)) +import Development.IDE.Core.Rules (useE) +import Development.IDE.Core.Shake (getDiagnostics, getHiddenDiagnostics) import GHC.Generics import Ide.Plugin import Ide.Types import Language.Haskell.LSP.Types import Text.Regex.TDFA.Text() -import Development.IDE.GHC.Compat (ParsedModule(ParsedModule)) -- --------------------------------------------------------------------- diff --git a/src/Ide/Plugin/Example2.hs b/src/Ide/Plugin/Example2.hs index acfdbffdd2..ec4863bef3 100644 --- a/src/Ide/Plugin/Example2.hs +++ b/src/Ide/Plugin/Example2.hs @@ -13,7 +13,7 @@ module Ide.Plugin.Example2 descriptor ) where -import Control.DeepSeq ( NFData ) +import Control.DeepSeq (NFData) import Control.Monad.Trans.Maybe import Data.Aeson import Data.Binary @@ -23,15 +23,9 @@ import qualified Data.HashSet as HashSet import Data.Hashable import qualified Data.Text as T import Data.Typeable -import Development.IDE.Core.OfInterest -import Development.IDE.Core.RuleTypes +import Development.IDE as D import Development.IDE.Core.Rules -import Development.IDE.Core.Service import Development.IDE.Core.Shake -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location -import Development.IDE.Types.Logger -import Development.Shake hiding ( Diagnostic ) import GHC.Generics import Ide.Plugin import Ide.Types diff --git a/src/Ide/Plugin/Floskell.hs b/src/Ide/Plugin/Floskell.hs index b77f974e3e..2628646973 100644 --- a/src/Ide/Plugin/Floskell.hs +++ b/src/Ide/Plugin/Floskell.hs @@ -14,8 +14,7 @@ where import qualified Data.ByteString.Lazy as BS import qualified Data.Text as T import qualified Data.Text.Encoding as T -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location +import Development.IDE as D import Floskell import Ide.Plugin.Formatter import Ide.Types diff --git a/src/Ide/Plugin/Formatter.hs b/src/Ide/Plugin/Formatter.hs index 5fccb50b4a..1d2d8f8480 100644 --- a/src/Ide/Plugin/Formatter.hs +++ b/src/Ide/Plugin/Formatter.hs @@ -17,20 +17,10 @@ where import qualified Data.Map as Map import qualified Data.Text as T -import Development.IDE.Core.FileStore -import Development.IDE.Core.Rules -import Development.IDE.Core.Shake --- import Development.IDE.LSP.Server --- import Development.IDE.Plugin -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location --- import Development.Shake hiding ( Diagnostic ) --- import Ide.Logger +import Development.IDE import Ide.Types -import Development.IDE.Types.Logger import Ide.Plugin.Config import qualified Language.Haskell.LSP.Core as LSP --- import Language.Haskell.LSP.Messages import Language.Haskell.LSP.Types import Text.Regex.TDFA.Text() diff --git a/src/Ide/Plugin/Fourmolu.hs b/src/Ide/Plugin/Fourmolu.hs index 07d4272b95..7f621d0153 100644 --- a/src/Ide/Plugin/Fourmolu.hs +++ b/src/Ide/Plugin/Fourmolu.hs @@ -13,12 +13,7 @@ where import Control.Exception import qualified Data.Text as T -import Development.IDE.Core.Rules -import Development.IDE.Core.RuleTypes (GhcSession (GhcSession)) -import Development.IDE.Core.Shake (use) -import Development.IDE.GHC.Util (hscEnv) -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location +import Development.IDE as D import qualified DynFlags as D import qualified EnumSet as S import GHC diff --git a/src/Ide/Plugin/GhcIde.hs b/src/Ide/Plugin/GhcIde.hs index 06ebbd5f75..608bc063d0 100644 --- a/src/Ide/Plugin/GhcIde.hs +++ b/src/Ide/Plugin/GhcIde.hs @@ -6,12 +6,11 @@ module Ide.Plugin.GhcIde ) where import Data.Aeson -import Development.IDE.Core.Service +import Development.IDE +import Development.IDE.Plugin.Completions +import Development.IDE.Plugin.CodeAction import Development.IDE.LSP.HoverDefinition import Development.IDE.LSP.Outline -import Development.IDE.Plugin.CodeAction -import Development.IDE.Plugin.Completions -import Development.IDE.Types.Logger import Ide.Plugin import Ide.Types import Language.Haskell.LSP.Types diff --git a/src/Ide/Plugin/ImportLens.hs b/src/Ide/Plugin/ImportLens.hs index eefe574178..34b700f267 100644 --- a/src/Ide/Plugin/ImportLens.hs +++ b/src/Ide/Plugin/ImportLens.hs @@ -24,13 +24,8 @@ import Data.Map (Map) import qualified Data.Map.Strict as Map import Data.Maybe (catMaybes, fromMaybe) import qualified Data.Text as T -import Development.IDE.Core.RuleTypes (GhcSessionDeps (GhcSessionDeps), - TcModuleResult (tmrModule), - TypeCheck (TypeCheck)) -import Development.IDE.Core.Shake (use, IdeState (..)) +import Development.IDE import Development.IDE.GHC.Compat -import Development.IDE.GHC.Error (realSpan, realSrcSpanToRange) -import Development.IDE.GHC.Util (HscEnvEq, hscEnv, prettyPrint) import GHC.Generics (Generic) import Ide.Plugin import Ide.Types @@ -40,8 +35,6 @@ import RnNames (findImportUsage, getMinimalImports) import TcRnMonad (initTcWithGbl) import TcRnTypes (TcGblEnv (tcg_used_gres)) -import Development.IDE.Core.Service (runAction) -import Development.Shake (Action) importCommandId :: CommandId importCommandId = "ImportLensCommand" diff --git a/src/Ide/Plugin/Ormolu.hs b/src/Ide/Plugin/Ormolu.hs index e5d268232b..094e513ae9 100644 --- a/src/Ide/Plugin/Ormolu.hs +++ b/src/Ide/Plugin/Ormolu.hs @@ -13,12 +13,7 @@ where import Control.Exception import qualified Data.Text as T -import Development.IDE.Core.Rules -import Development.IDE.Core.RuleTypes (GhcSession (GhcSession)) -import Development.IDE.Core.Shake (use) -import Development.IDE.GHC.Util (hscEnv) -import Development.IDE.Types.Diagnostics as D -import Development.IDE.Types.Location +import Development.IDE import qualified DynFlags as D import qualified EnumSet as S import GHC diff --git a/src/Ide/Plugin/Pragmas.hs b/src/Ide/Plugin/Pragmas.hs index 534610f963..3b87b1517b 100644 --- a/src/Ide/Plugin/Pragmas.hs +++ b/src/Ide/Plugin/Pragmas.hs @@ -18,7 +18,7 @@ import Ide.Types import qualified GHC.Generics as Generics import qualified Language.Haskell.LSP.Types as J import qualified Language.Haskell.LSP.Types.Lens as J -import Development.IDE.Types.Diagnostics as D +import Development.IDE as D import Language.Haskell.LSP.Types -- --------------------------------------------------------------------- diff --git a/src/Ide/Plugin/Retrie.hs b/src/Ide/Plugin/Retrie.hs index e919d34f2c..c66b37c377 100644 --- a/src/Ide/Plugin/Retrie.hs +++ b/src/Ide/Plugin/Retrie.hs @@ -40,27 +40,9 @@ import Data.String (IsString (fromString)) import qualified Data.Text as T import qualified Data.Text.IO as T import Data.Typeable (Typeable) -import Development.IDE.Core.FileStore (getFileContents) -import Development.IDE.Core.Rules -import Development.IDE.Core.RuleTypes as Ghcide (GetModIface (..), - GetModSummary (..), - GhcSessionDeps (..), - HiFileResult (..), - TypeCheck (..), - tmrModule) -import Development.IDE.Core.Shake (IdeRule, - IdeState (shakeExtras), - ideLogger, knownFilesVar, - runIdeAction, use, - useWithStaleFast, use_) -import Development.IDE.GHC.Error (isInsideSrcSpan, - realSrcSpanToRange) -import Development.IDE.GHC.Util (hscEnv, prettyPrint, runGhcEnv) -import Development.IDE.Types.Location -import Development.IDE.Types.Logger (Logger (logPriority), - Priority (..)) -import Development.Shake (RuleResult) -import GHC (GenLocated (L), GhcRn, +import Development.IDE +import Development.IDE.Core.Shake (ShakeExtras(knownFilesVar)) +import Development.IDE.GHC.Compat (GenLocated (L), GhcRn, HsBindLR (FunBind), HsGroup (..), HsValBindsLR (..), HscEnv, IdP, diff --git a/src/Ide/Types.hs b/src/Ide/Types.hs index 4f2bc29560..071b9572cb 100644 --- a/src/Ide/Types.hs +++ b/src/Ide/Types.hs @@ -30,9 +30,7 @@ import qualified Data.Map as Map import qualified Data.Set as S import Data.String import qualified Data.Text as T -import Development.IDE.Core.Rules -import Development.IDE.Types.Location -import Development.Shake +import Development.IDE import Ide.Plugin.Config import qualified Language.Haskell.LSP.Core as LSP import Language.Haskell.LSP.Types From 57121eb35db45c690b0893b80d05fef08734fd0a Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sun, 6 Sep 2020 19:02:12 +0100 Subject: [PATCH 3/3] Fix Eval plugin to use GhcSessionDeps --- src/Ide/Plugin/Eval.hs | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/Ide/Plugin/Eval.hs b/src/Ide/Plugin/Eval.hs index d94bca4573..a6aba8ce16 100644 --- a/src/Ide/Plugin/Eval.hs +++ b/src/Ide/Plugin/Eval.hs @@ -172,25 +172,10 @@ runEvalCmd lsp state EvalParams {..} = response' $ do contents <- liftIO $ getVirtualFileFunc lsp $ toNormalizedUri _uri text <- handleMaybe "contents" $ virtualFileText <$> contents -{- Note: GhcSessionDeps - -Depending on GhcSession means we do need to reload all the module -dependencies in the GHC session(from interface files, hopefully). - -The GhcSessionDeps dependency would allow us to reuse a GHC session preloaded -with all the dependencies. Unfortunately, the ModSummary objects that -GhcSessionDeps puts in the GHC session are not suitable for reuse since they -clear out the timestamps; this is done to avoid internal ghcide bugs and -can probably be relaxed so that plugins like Eval can reuse them. Once that's -done, we want to switch back to GhcSessionDeps: - --- https://github.com/digital-asset/ghcide/pull/694 - - -} session <- liftIO $ runAction "runEvalCmd.ghcSession" state $ - use_ GhcSession $ -- See the note on GhcSessionDeps + use_ GhcSessionDeps $ toNormalizedFilePath' $ fp