{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Language.PureScript.Ide.Filter.Declaration ( DeclarationType(..) , declarationType ) where import Protolude hiding (isPrefixOf) import Data.Aeson import qualified Language.PureScript.Ide.Types as PI data DeclarationType = Value | Type | Synonym | DataConstructor | TypeClass | ValueOperator | TypeOperator | Kind | Module deriving (Show, Eq, Ord) instance FromJSON DeclarationType where parseJSON = withText "Declaration type tag" $ \str -> case str of "value" -> pure Value "type" -> pure Type "synonym" -> pure Synonym "dataconstructor" -> pure DataConstructor "typeclass" -> pure TypeClass "valueoperator" -> pure ValueOperator "typeoperator" -> pure TypeOperator "kind" -> pure Kind "module" -> pure Module _ -> mzero declarationType :: PI.IdeDeclaration -> DeclarationType declarationType decl = case decl of PI.IdeDeclValue _ -> Value PI.IdeDeclType _ -> Type PI.IdeDeclTypeSynonym _ -> Synonym PI.IdeDeclDataConstructor _ -> DataConstructor PI.IdeDeclTypeClass _ -> TypeClass PI.IdeDeclValueOperator _ -> ValueOperator PI.IdeDeclTypeOperator _ -> TypeOperator PI.IdeDeclKind _ -> Kind PI.IdeDeclModule _ -> Module