|
2 | 2 | {-# LANGUAGE PatternSynonyms #-}
|
3 | 3 | module Ide.Plugin.Stan (descriptor, Log) where
|
4 | 4 |
|
5 |
| -import Compat.HieTypes (HieASTs, HieFile (..)) |
6 |
| -import Control.DeepSeq (NFData) |
7 |
| -import Control.Monad (void, when) |
8 |
| -import Control.Monad.IO.Class (liftIO) |
9 |
| -import Control.Monad.Trans.Maybe (MaybeT (MaybeT), runMaybeT) |
10 |
| -import Data.Default |
11 |
| -import Data.Foldable (toList) |
12 |
| -import Data.Hashable (Hashable) |
13 |
| -import qualified Data.HashMap.Strict as HM |
14 |
| -import Data.HashSet (HashSet) |
15 |
| -import qualified Data.HashSet as HS |
16 |
| -import qualified Data.Map as Map |
17 |
| -import Data.Maybe (fromJust, mapMaybe, |
18 |
| - maybeToList) |
19 |
| -import Data.String (IsString (fromString)) |
20 |
| -import qualified Data.Text as T |
| 5 | +import Control.DeepSeq (NFData) |
| 6 | +import Control.Monad (void) |
| 7 | +import Control.Monad.IO.Class (liftIO) |
| 8 | +import Data.Foldable (toList) |
| 9 | +import Data.Hashable (Hashable) |
| 10 | +import qualified Data.HashMap.Strict as HM |
| 11 | +import qualified Data.Map as Map |
| 12 | +import Data.Maybe (mapMaybe) |
| 13 | +import qualified Data.Text as T |
21 | 14 | import Development.IDE
|
22 |
| -import Development.IDE.Core.Rules (getHieFile, |
23 |
| - getSourceFileSource) |
24 |
| -import Development.IDE.Core.RuleTypes (HieAstResult (..)) |
25 |
| -import qualified Development.IDE.Core.Shake as Shake |
26 |
| -import Development.IDE.GHC.Compat (HieASTs (HieASTs), |
27 |
| - HieFile (hie_hs_file), |
28 |
| - RealSrcSpan (..), mkHieFile', |
29 |
| - mkRealSrcLoc, mkRealSrcSpan, |
30 |
| - runHsc, srcSpanEndCol, |
31 |
| - srcSpanEndLine, |
32 |
| - srcSpanStartCol, |
33 |
| - srcSpanStartLine, tcg_exports) |
34 |
| -import Development.IDE.GHC.Error (realSrcSpanToRange) |
35 |
| -import GHC.Generics (Generic) |
36 |
| -import Ide.Plugin.Config (PluginConfig (..)) |
37 |
| -import Ide.Types (PluginDescriptor (..), |
38 |
| - PluginId, configHasDiagnostics, |
39 |
| - configInitialGenericConfig, |
40 |
| - defaultConfigDescriptor, |
41 |
| - defaultPluginDescriptor) |
42 |
| -import qualified Language.LSP.Protocol.Types as LSP |
43 |
| -import Stan (createCabalExtensionsMap, |
44 |
| - getStanConfig) |
45 |
| -import Stan.Analysis (Analysis (..), runAnalysis) |
46 |
| -import Stan.Category (Category (..)) |
47 |
| -import Stan.Cli (StanArgs (..)) |
48 |
| -import Stan.Config (Config, ConfigP (..), |
49 |
| - applyConfig, defaultConfig) |
50 |
| -import Stan.Config.Pretty (ConfigAction, configToTriples, |
51 |
| - prettyConfigAction, |
52 |
| - prettyConfigCli) |
53 |
| -import Stan.Core.Id (Id (..)) |
54 |
| -import Stan.EnvVars (EnvVars (..), envVarsToText) |
55 |
| -import Stan.Inspection (Inspection (..)) |
56 |
| -import Stan.Inspection.All (inspectionsIds, inspectionsMap) |
57 |
| -import Stan.Observation (Observation (..)) |
58 |
| -import Stan.Report.Settings (OutputSettings (..), |
59 |
| - ToggleSolution (..), |
60 |
| - Verbosity (..)) |
61 |
| -import Stan.Toml (usedTomlFiles) |
62 |
| -import System.Directory (makeRelativeToCurrentDirectory) |
63 |
| -import Trial (Fatality, Trial (..), fiasco, |
64 |
| - pattern FiascoL, |
65 |
| - pattern ResultL, prettyTrial, |
66 |
| - prettyTrialWith) |
| 15 | +import Development.IDE.Core.Rules (getHieFile) |
| 16 | +import qualified Development.IDE.Core.Shake as Shake |
| 17 | +import GHC.Generics (Generic) |
| 18 | +import Ide.Plugin.Config (PluginConfig (..)) |
| 19 | +import Ide.Types (PluginDescriptor (..), PluginId, |
| 20 | + configHasDiagnostics, |
| 21 | + configInitialGenericConfig, |
| 22 | + defaultConfigDescriptor, |
| 23 | + defaultPluginDescriptor) |
| 24 | +import qualified Language.LSP.Protocol.Types as LSP |
| 25 | +import Stan (createCabalExtensionsMap, |
| 26 | + getStanConfig) |
| 27 | +import Stan.Analysis (Analysis (..), runAnalysis) |
| 28 | +import Stan.Category (Category (..)) |
| 29 | +import Stan.Cli (StanArgs (..)) |
| 30 | +import Stan.Config (Config, ConfigP (..), applyConfig) |
| 31 | +import Stan.Config.Pretty (prettyConfigCli) |
| 32 | +import Stan.Core.Id (Id (..)) |
| 33 | +import Stan.EnvVars (EnvVars (..), envVarsToText) |
| 34 | +import Stan.Inspection (Inspection (..)) |
| 35 | +import Stan.Inspection.All (inspectionsIds, inspectionsMap) |
| 36 | +import Stan.Observation (Observation (..)) |
| 37 | +import Stan.Report.Settings (OutputSettings (..), |
| 38 | + ToggleSolution (..), |
| 39 | + Verbosity (..)) |
| 40 | +import Stan.Toml (usedTomlFiles) |
| 41 | +import System.Directory (makeRelativeToCurrentDirectory) |
| 42 | +import Trial (Fatality, Trial (..), fiasco, |
| 43 | + pattern FiascoL, pattern ResultL, |
| 44 | + prettyTrial, prettyTrialWith) |
67 | 45 | descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState
|
68 | 46 | descriptor recorder plId = (defaultPluginDescriptor plId desc)
|
69 | 47 | { pluginRules = rules recorder plId
|
@@ -101,12 +79,11 @@ stripModifiers = go ""
|
101 | 79 | Nothing -> txt
|
102 | 80 | Just index -> T.drop (index + 1) txt
|
103 | 81 |
|
104 |
| -renderId :: Id a -> T.Text |
105 |
| -renderId (Id t) = "Id = " <> t |
| 82 | + |
106 | 83 |
|
107 | 84 | instance Pretty Log where
|
108 | 85 | pretty = \case
|
109 |
| - LogShake log -> pretty log |
| 86 | + LogShake msg -> pretty msg |
110 | 87 | LogWarnConf errs -> "Fiasco encountered when trying to load stan configuration. Using default inspections:"
|
111 | 88 | <> line <> (pretty $ show errs)
|
112 | 89 | LogDebugStanConfigResult fps t -> "Config result using: "
|
@@ -162,24 +139,21 @@ rules recorder plId = do
|
162 | 139 |
|
163 | 140 | -- If envVar is set to 'False', stan will ignore all local and global .stan.toml files
|
164 | 141 | logWith recorder Debug (LogDebugStanEnvVars env)
|
165 |
| - seTomlFiles <- liftIO $ usedTomlFiles useDefConfig (stanArgsConfigFile stanArgs) |
166 | 142 |
|
167 | 143 | (cabalExtensionsMap, checksMap, confIgnored) <- case configTrial of
|
168 | 144 | FiascoL es -> do
|
169 | 145 | logWith recorder Development.IDE.Warning (LogWarnConf es)
|
170 | 146 | pure (Map.empty,
|
171 | 147 | HM.fromList [(LSP.fromNormalizedFilePath file, inspectionsIds)],
|
172 | 148 | [])
|
173 |
| - ResultL warnings stanConfig -> do |
| 149 | + ResultL _warnings stanConfig -> do |
174 | 150 | let currentHSAbs = fromNormalizedFilePath file -- hie_hs_file hie
|
175 | 151 | currentHSRel <- liftIO $ makeRelativeToCurrentDirectory currentHSAbs
|
176 | 152 | cabalExtensionsMap <- liftIO $ createCabalExtensionsMap isLoud (stanArgsCabalFilePath stanArgs) [hie]
|
177 | 153 |
|
178 | 154 | -- Files (keys) in checksMap need to have an absolute path for the analysis, but applyConfig needs to receive relative
|
179 | 155 | -- filepaths to apply the config, because the toml config has relative paths. Stan itself seems to work only in terms of relative paths.
|
180 | 156 | let checksMap = HM.mapKeys (const currentHSAbs) $ applyConfig [currentHSRel] stanConfig
|
181 |
| - |
182 |
| - let analysis = runAnalysis cabalExtensionsMap checksMap (configIgnored stanConfig) [hie] |
183 | 157 | pure (cabalExtensionsMap, checksMap, configIgnored stanConfig)
|
184 | 158 | let analysis = runAnalysis cabalExtensionsMap checksMap confIgnored [hie]
|
185 | 159 | return (analysisToDiagnostics file analysis, Just ())
|
|
0 commit comments