Skip to content

Stan: Respect plugin configuration globalOn #3179

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions plugins/hls-stan-plugin/hls-stan-plugin.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ library
build-depends:
base
, containers
, data-default
, deepseq
, hashable
, hls-plugin-api
Expand Down
53 changes: 24 additions & 29 deletions plugins/hls-stan-plugin/src/Ide/Plugin/Stan.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,17 @@ import Control.Monad (void)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Maybe (MaybeT (MaybeT), runMaybeT)
import Data.Default
import Data.Foldable (toList)
import Data.Hashable (Hashable)
import qualified Data.HashMap.Strict as HM
import Data.Hashable (Hashable)
import qualified Data.Map as Map
import Data.Maybe (fromJust, mapMaybe)
import qualified Data.Text as T
import Development.IDE (Action, FileDiagnostic,
GetHieAst (..),
GetModSummaryWithoutTimestamps (..),
GhcSession (..), IdeState,
NormalizedFilePath,
Pretty (..), Recorder,
RuleResult, Rules,
ShowDiagnostic (..),
TypeCheck (..), WithPriority,
action, cmapWithPrio, define,
getFilesOfInterestUntracked,
hscEnv, msrModSummary,
tmrTypechecked, use, uses)
import Development.IDE
import Development.IDE.Core.RuleTypes (HieAstResult (..))
import Development.IDE.Core.Rules (getHieFile,
getSourceFileSource)
import Development.IDE.Core.RuleTypes (HieAstResult (..))
import qualified Development.IDE.Core.Shake as Shake
import Development.IDE.GHC.Compat (HieASTs (HieASTs),
RealSrcSpan (..), mkHieFile',
Expand All @@ -38,9 +27,11 @@ import Development.IDE.GHC.Compat (HieASTs (HieASTs),
import Development.IDE.GHC.Error (realSrcSpanToRange)
import GHC.Generics (Generic)
import HieTypes (HieASTs, HieFile)
import Ide.Plugin.Config
import Ide.Types (PluginDescriptor (..),
PluginId,
defaultPluginDescriptor)
defaultPluginDescriptor,
pluginEnabledConfig)
import qualified Language.LSP.Types as LSP
import Stan.Analysis (Analysis (..), runAnalysis)
import Stan.Category (Category (..))
Expand All @@ -50,7 +41,8 @@ import Stan.Inspection.All (inspectionsIds, inspectionsMap)
import Stan.Observation (Observation (..))

descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState
descriptor recorder plId = (defaultPluginDescriptor plId) {pluginRules = rules recorder}
descriptor recorder plId = (defaultPluginDescriptor plId)
{pluginRules = rules recorder plId}

newtype Log = LogShake Shake.Log deriving (Show)

Expand All @@ -67,18 +59,21 @@ instance NFData GetStanDiagnostics

type instance RuleResult GetStanDiagnostics = ()

rules :: Recorder (WithPriority Log) -> Rules ()
rules recorder = do
rules :: Recorder (WithPriority Log) -> PluginId -> Rules ()
rules recorder plId = do
define (cmapWithPrio LogShake recorder) $
\GetStanDiagnostics file -> do
maybeHie <- getHieFile file
case maybeHie of
Nothing -> return ([], Nothing)
Just hie -> do
let enabledInspections = HM.fromList [(LSP.fromNormalizedFilePath file, inspectionsIds)]
-- This should use Cabal config for extensions and Stan config for inspection preferences is the future
let analysis = runAnalysis Map.empty enabledInspections [] [hie]
return (analysisToDiagnostics file analysis, Just ())
config <- getClientConfigAction def
if pluginEnabledConfig plcDiagnosticsOn plId config then do
maybeHie <- getHieFile file
case maybeHie of
Nothing -> return ([], Nothing)
Just hie -> do
let enabledInspections = HM.fromList [(LSP.fromNormalizedFilePath file, inspectionsIds)]
-- This should use Cabal config for extensions and Stan config for inspection preferences is the future
let analysis = runAnalysis Map.empty enabledInspections [] [hie]
return (analysisToDiagnostics file analysis, Just ())
else return ([], Nothing)

action $ do
files <- getFilesOfInterestUntracked
Expand All @@ -87,7 +82,7 @@ rules recorder = do
analysisToDiagnostics :: NormalizedFilePath -> Analysis -> [FileDiagnostic]
analysisToDiagnostics file = mapMaybe (observationToDianostic file) . toList . analysisObservations
observationToDianostic :: NormalizedFilePath -> Observation -> Maybe FileDiagnostic
observationToDianostic file (Observation {observationSrcSpan, observationInspectionId}) =
observationToDianostic file Observation {observationSrcSpan, observationInspectionId} =
do
inspection <- HM.lookup observationInspectionId inspectionsMap
let
Expand All @@ -109,7 +104,7 @@ rules recorder = do
return ( file,
ShowDiag,
LSP.Diagnostic
{ _range = realSrcSpanToRange $ observationSrcSpan,
{ _range = realSrcSpanToRange observationSrcSpan,
_severity = Just LSP.DsHint,
_code = Just (LSP.InR $ unId (inspectionId inspection)),
_source = Just "stan",
Expand Down