{- | Copyright: (c) 2020 Kowainik SPDX-License-Identifier: MPL-2.0 Maintainer: Kowainik @stan@ configuration pretty printing helper functions. -} module Stan.Config.Pretty ( ConfigAction (..) , prettyConfigAction , configActionClass , configActionColour , prettyConfigCli , configToTriples ) where import Colourista (bold, formatWith, green, magenta, red, yellow) import Stan.Category (Category (..)) import Stan.Config (Check (..), CheckFilter (..), CheckType (..), Config, ConfigP (..), Scope (..)) import Stan.Core.Id (Id (..)) data ConfigAction = RemoveAction | IncludeAction | ExcludeAction | IgnoreAction deriving stock (Show, Eq) prettyConfigAction :: ConfigAction -> Text prettyConfigAction = \case RemoveAction -> "— Remove " IncludeAction -> "∪ Include" ExcludeAction -> "∩ Exclude" IgnoreAction -> "✖ Ignore " configActionClass :: ConfigAction -> Text configActionClass = \case RemoveAction -> "remove" IncludeAction -> "include" ExcludeAction -> "exclude" IgnoreAction -> "ignore" configActionColour :: ConfigAction -> Text configActionColour = \case RemoveAction -> red IncludeAction -> green ExcludeAction -> yellow IgnoreAction -> magenta configToTriples :: Config -> [(ConfigAction, Text, Text)] configToTriples ConfigP{..} = map ((RemoveAction, "", ) . prettyScope) configRemoved ++ map checkToTriple configChecks ++ map ((IgnoreAction, , "") . unId) configIgnored checkToTriple :: Check -> (ConfigAction, Text, Text) checkToTriple Check{..} = ( checkTypeToAction checkType , prettyFilter checkFilter , prettyScope checkScope ) checkTypeToAction :: CheckType -> ConfigAction checkTypeToAction = \case Include -> IncludeAction Exclude -> ExcludeAction prettyFilter :: CheckFilter -> Text prettyFilter = \case CheckInspection ins -> "ID: " <> unId ins CheckSeverity sev -> "Severity: " <> show sev CheckCategory cat -> "Category: " <> unCategory cat CheckAll -> "All inspections" prettyScope :: Scope -> Text prettyScope = \case ScopeFile fp -> "File: " <> toText fp ScopeDirectory dir -> "Directory: " <> toText dir ScopeAll -> "All files" prettyConfigCli :: Config -> Text prettyConfigCli = unlines . concatMap action . configToTriples where action :: (ConfigAction, Text, Text) -> [Text] action (act, check, scope) = formatWith [configActionColour act, bold] (prettyConfigAction act) : [ " " <> check | check /= ""] ++ [ " " <> scope | scope /= ""]