|
2 | 2 | module Development.IDE.Session.Ghc where |
3 | 3 |
|
4 | 4 | import Control.Monad |
5 | | -import Control.Monad.Extra as Extra |
| 5 | +import Control.Monad.Extra as Extra |
6 | 6 | import Control.Monad.IO.Class |
7 | | -import qualified Crypto.Hash.SHA1 as H |
8 | | -import qualified Data.ByteString.Base16 as B16 |
9 | | -import qualified Data.ByteString.Char8 as B |
| 7 | +import qualified Crypto.Hash.SHA1 as H |
| 8 | +import qualified Data.ByteString.Base16 as B16 |
| 9 | +import qualified Data.ByteString.Char8 as B |
10 | 10 | import Data.Function |
11 | 11 | import Data.List |
12 | | -import Data.List.Extra as L |
13 | | -import Data.List.NonEmpty (NonEmpty (..)) |
14 | | -import qualified Data.List.NonEmpty as NE |
15 | | -import qualified Data.Map.Strict as Map |
| 12 | +import Data.List.Extra as L |
| 13 | +import Data.List.NonEmpty (NonEmpty (..)) |
| 14 | +import qualified Data.List.NonEmpty as NE |
| 15 | +import qualified Data.Map.Strict as Map |
16 | 16 | import Data.Maybe |
17 | | -import qualified Data.Text as T |
18 | | -import Development.IDE.Core.Shake hiding (Log, knownTargets, |
19 | | - withHieDb) |
20 | | -import qualified Development.IDE.GHC.Compat as Compat |
| 17 | +import qualified Data.Text as T |
| 18 | +import Development.IDE.Core.Shake hiding (Log, knownTargets, |
| 19 | + withHieDb) |
| 20 | +import qualified Development.IDE.GHC.Compat as Compat |
21 | 21 | import Development.IDE.GHC.Compat.CmdLine |
22 | | -import Development.IDE.GHC.Compat.Core hiding (Target, TargetFile, |
23 | | - TargetModule, Var, |
24 | | - Warning, getOptions) |
25 | | -import qualified Development.IDE.GHC.Compat.Core as GHC |
26 | | -import Development.IDE.GHC.Compat.Env hiding (Logger) |
27 | | -import Development.IDE.GHC.Compat.Units (UnitId) |
| 22 | +import Development.IDE.GHC.Compat.Core hiding (Target, TargetFile, |
| 23 | + TargetModule, Var, Warning, |
| 24 | + getOptions) |
| 25 | +import qualified Development.IDE.GHC.Compat.Core as GHC |
| 26 | +import Development.IDE.GHC.Compat.Env hiding (Logger) |
| 27 | +import Development.IDE.GHC.Compat.Units (UnitId) |
28 | 28 | import Development.IDE.GHC.Util |
29 | 29 | import Development.IDE.Types.Diagnostics |
30 | | -import Development.IDE.Types.HscEnvEq (HscEnvEq, newHscEnvEq) |
| 30 | +import Development.IDE.Types.HscEnvEq (HscEnvEq, newHscEnvEq) |
31 | 31 | import Development.IDE.Types.Location |
32 | 32 | import GHC.ResponseFile |
33 | | -import HIE.Bios.Environment hiding (getCacheDir) |
34 | | -import HIE.Bios.Types hiding (Log) |
35 | | -import Ide.Logger (Pretty (pretty), |
36 | | - Priority (Debug, Error, Info), |
37 | | - Recorder, WithPriority, logWith, viaShow, (<+>)) |
| 33 | +import HIE.Bios.Environment hiding (getCacheDir) |
| 34 | +import HIE.Bios.Types hiding (Log) |
| 35 | +import Ide.Logger (Pretty (pretty), |
| 36 | + Priority (Debug, Error, Info), |
| 37 | + Recorder, WithPriority, |
| 38 | + logWith, viaShow, (<+>)) |
38 | 39 | import System.Directory |
39 | 40 | import System.FilePath |
40 | 41 | import System.Info |
41 | 42 |
|
42 | 43 |
|
43 | 44 | import Control.DeepSeq |
44 | | -import Control.Exception (evaluate) |
45 | | -import Control.Monad.IO.Unlift (MonadUnliftIO) |
46 | | -import qualified Data.Set as OS |
47 | | -import qualified Development.IDE.GHC.Compat.Util as Compat |
| 45 | +import Control.Exception (evaluate) |
| 46 | +import Control.Monad.IO.Unlift (MonadUnliftIO) |
| 47 | +import qualified Data.Set as OS |
| 48 | +import qualified Development.IDE.GHC.Compat.Util as Compat |
48 | 49 | import Development.IDE.Session.Dependency |
| 50 | +import Development.IDE.Types.Options |
49 | 51 | import GHC.Data.Graph.Directed |
50 | | -import Ide.PluginUtils (toAbsolute) |
| 52 | +import Ide.PluginUtils (toAbsolute) |
51 | 53 |
|
52 | | -import GHC.Driver.Env (hsc_all_home_unit_ids) |
| 54 | +import GHC.Driver.Env (hsc_all_home_unit_ids) |
53 | 55 | import GHC.Driver.Errors.Types |
54 | | -import GHC.Types.Error (errMsgDiagnostic, |
55 | | - singleMessage) |
| 56 | +import GHC.Types.Error (errMsgDiagnostic, |
| 57 | + singleMessage) |
56 | 58 | import GHC.Unit.State |
57 | 59 |
|
58 | 60 | data Log |
@@ -192,12 +194,13 @@ newComponentCache recorder exts _cfp hsc_env old_cis new_cis = do |
192 | 194 |
|
193 | 195 | -- | Throws if package flags are unsatisfiable |
194 | 196 | setOptions :: GhcMonad m |
195 | | - => NormalizedFilePath |
| 197 | + => OptHaddockParse |
| 198 | + -> NormalizedFilePath |
196 | 199 | -> ComponentOptions |
197 | 200 | -> DynFlags |
198 | 201 | -> FilePath -- ^ root dir, see Note [Root Directory] |
199 | 202 | -> m (NonEmpty (DynFlags, [GHC.Target])) |
200 | | -setOptions cfp (ComponentOptions theOpts compRoot _) dflags rootDir = do |
| 203 | +setOptions haddockOpt cfp (ComponentOptions theOpts compRoot _) dflags rootDir = do |
201 | 204 | ((theOpts',_errs,_warns),units) <- processCmdLineP unit_flags [] (map noLoc theOpts) |
202 | 205 | case NE.nonEmpty units of |
203 | 206 | Just us -> initMulti us |
@@ -258,6 +261,7 @@ setOptions cfp (ComponentOptions theOpts compRoot _) dflags rootDir = do |
258 | 261 | dontWriteHieFiles $ |
259 | 262 | setIgnoreInterfacePragmas $ |
260 | 263 | setBytecodeLinkerOptions $ |
| 264 | + enableOptHaddock haddockOpt $ |
261 | 265 | disableOptimisation $ |
262 | 266 | Compat.setUpTypedHoles $ |
263 | 267 | makeDynFlagsAbsolute compRoot -- makeDynFlagsAbsolute already accounts for workingDirectory |
@@ -318,6 +322,14 @@ setIgnoreInterfacePragmas df = |
318 | 322 | disableOptimisation :: DynFlags -> DynFlags |
319 | 323 | disableOptimisation df = updOptLevel 0 df |
320 | 324 |
|
| 325 | +-- | We always compile with '-haddock' unless explicitly disabled. |
| 326 | +-- |
| 327 | +-- This avoids inconsistencies when doing recompilation checking which was |
| 328 | +-- observed in https://github.com/haskell/haskell-language-server/issues/4511 |
| 329 | +enableOptHaddock :: OptHaddockParse -> DynFlags -> DynFlags |
| 330 | +enableOptHaddock HaddockParse d = gopt_set d Opt_Haddock |
| 331 | +enableOptHaddock NoHaddockParse d = d |
| 332 | + |
321 | 333 | setHiDir :: FilePath -> DynFlags -> DynFlags |
322 | 334 | setHiDir f d = |
323 | 335 | -- override user settings to avoid conflicts leading to recompilation |
|
0 commit comments