File tree Expand file tree Collapse file tree 2 files changed +33
-4
lines changed
ghcide/src/Development/IDE/Core Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Original file line number Diff line number Diff line change @@ -569,10 +569,28 @@ reportImportCyclesRule recorder =
569
569
570
570
getHieAstsRule :: Recorder (WithPriority Log ) -> Rules ()
571
571
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)
576
594
577
595
persistentHieFileRule :: Recorder (WithPriority Log ) -> Rules ()
578
596
persistentHieFileRule recorder = addPersistentRule GetHieAst $ \ file -> runMaybeT $ do
Original file line number Diff line number Diff line change @@ -44,6 +44,8 @@ module Development.IDE.Core.Shake(
44
44
define , defineNoDiagnostics ,
45
45
defineEarlyCutoff ,
46
46
defineNoFile , defineEarlyCutOffNoFile ,
47
+ getSourceFileOrigin ,
48
+ SourceFileOrigin (.. ),
47
49
getDiagnostics ,
48
50
mRunLspT , mRunLspTCallback ,
49
51
getHiddenDiagnostics ,
@@ -107,6 +109,7 @@ import qualified Data.HashMap.Strict as HMap
107
109
import Data.HashSet (HashSet )
108
110
import qualified Data.HashSet as HSet
109
111
import Data.IORef
112
+ import Data.List (isInfixOf )
110
113
import Data.List.Extra (foldl' , partition ,
111
114
takeEnd )
112
115
import qualified Data.Map.Strict as Map
@@ -1125,6 +1128,14 @@ defineEarlyCutOffNoFile recorder f = defineEarlyCutoff recorder $ RuleNoDiagnost
1125
1128
if file == emptyFilePath then do (hash, res) <- f k; return (Just hash, Just res) else
1126
1129
fail $ " Rule " ++ show k ++ " should always be called with the empty string for a file"
1127
1130
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
+
1128
1139
defineEarlyCutoff'
1129
1140
:: forall k v . IdeRule k v
1130
1141
=> (Maybe Int32 -> [FileDiagnostic ] -> Action () ) -- ^ update diagnostics
You can’t perform that action at this time.
0 commit comments