Skip to content

Commit 13629b7

Browse files
committed
Check SourceFileOrigin in GetHieAst
1 parent 096c52b commit 13629b7

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

ghcide/src/Development/IDE/Core/Rules.hs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,28 @@ reportImportCyclesRule recorder =
569569

570570
getHieAstsRule :: Recorder (WithPriority Log) -> Rules ()
571571
getHieAstsRule recorder =
572-
define (cmapWithPrio LogShake recorder) $ \GetHieAst f -> do
573-
tmr <- use_ TypeCheck f
574-
hsc <- hscEnv <$> use_ GhcSessionDeps f
575-
getHieAstRuleDefinition f hsc tmr
572+
define (cmapWithPrio LogShake recorder) $ \GetHieAst f ->
573+
case getSourceFileOrigin f of
574+
FromProject -> do
575+
tmr <- use_ TypeCheck f
576+
hsc <- hscEnv <$> use_ GhcSessionDeps f
577+
getHieAstRuleDefinition f hsc tmr
578+
FromDependency -> do
579+
se <- getShakeExtras
580+
mHieFile <- liftIO
581+
$ runIdeAction "GetHieAst" se
582+
$ runMaybeT
583+
$ readHieFileForSrcFromDisk recorder f
584+
pure ([], makeHieAstResult <$> mHieFile)
585+
where
586+
makeHieAstResult :: Compat.HieFile -> HieAstResult
587+
makeHieAstResult hieFile =
588+
HAR
589+
(Compat.hie_module hieFile)
590+
(Compat.hie_asts hieFile)
591+
mempty
592+
mempty
593+
(HieFromDisk hieFile)
576594

577595
persistentHieFileRule :: Recorder (WithPriority Log) -> Rules ()
578596
persistentHieFileRule recorder = addPersistentRule GetHieAst $ \file -> runMaybeT $ do

ghcide/src/Development/IDE/Core/Shake.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ module Development.IDE.Core.Shake(
4444
define, defineNoDiagnostics,
4545
defineEarlyCutoff,
4646
defineNoFile, defineEarlyCutOffNoFile,
47+
getSourceFileOrigin,
48+
SourceFileOrigin(..),
4749
getDiagnostics,
4850
mRunLspT, mRunLspTCallback,
4951
getHiddenDiagnostics,
@@ -107,6 +109,7 @@ import qualified Data.HashMap.Strict as HMap
107109
import Data.HashSet (HashSet)
108110
import qualified Data.HashSet as HSet
109111
import Data.IORef
112+
import Data.List (isInfixOf)
110113
import Data.List.Extra (foldl', partition,
111114
takeEnd)
112115
import qualified Data.Map.Strict as Map
@@ -1125,6 +1128,14 @@ defineEarlyCutOffNoFile recorder f = defineEarlyCutoff recorder $ RuleNoDiagnost
11251128
if file == emptyFilePath then do (hash, res) <- f k; return (Just hash, Just res) else
11261129
fail $ "Rule " ++ show k ++ " should always be called with the empty string for a file"
11271130

1131+
data SourceFileOrigin = FromProject | FromDependency
1132+
1133+
getSourceFileOrigin :: NormalizedFilePath -> SourceFileOrigin
1134+
getSourceFileOrigin f =
1135+
case isInfixOf ".hls/dependencies" (show f) of
1136+
True -> FromDependency
1137+
False -> FromProject
1138+
11281139
defineEarlyCutoff'
11291140
:: forall k v. IdeRule k v
11301141
=> (Maybe Int32 -> [FileDiagnostic] -> Action ()) -- ^ update diagnostics

0 commit comments

Comments
 (0)