1
1
mirror of https://github.com/github/semantic.git synced 2024-12-30 10:27:45 +03:00
semantic/semantic-python/test/Instances.hs
2019-10-21 14:09:20 -04:00

48 lines
1.5 KiB
Haskell

{-# LANGUAGE DerivingStrategies, GeneralizedNewtypeDeriving, LambdaCase, StandaloneDeriving, FlexibleInstances, NamedFieldPuns, OverloadedStrings, QuantifiedConstraints, TypeOperators, UndecidableInstances, TypeApplications #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Instances () where
-- Testing code depends on certain instances that we don't want to
-- expose in semantic-core proper, yet are important enough that
-- we should keep track of them in a dedicated file.
import Analysis.File
import Analysis.ScopeGraph
import Core.Name (Name (..))
import Data.Aeson
import qualified Data.Map as Map
import Data.Text (Text, pack)
import qualified System.Path as Path
deriving newtype instance ToJSON Name
deriving newtype instance ToJSONKey Name
instance ToJSON a => ToJSON (File a) where
toJSON File{filePath, fileSpan, fileBody} = object
[ "path" .= filePath
, "span" .= fileSpan
, "body" .= fileBody
]
instance ToJSON Path.AbsRelFile where
toJSON p = toJSON (pack (Path.toString p))
instance ToJSON Ref where
toJSON (Ref path span) = object
[ "kind" .= ("ref" :: Text)
, "path" .= path
, "span" .= span
]
instance ToJSON (Decl Name) where
toJSON Decl{declSymbol, declPath, declSpan} = object
[ "kind" .= ("decl" :: Text)
, "symbol" .= declSymbol
, "path" .= declPath
, "span" .= declSpan
]
instance ToJSON (ScopeGraph Name) where
toJSON (ScopeGraph sc) = toJSON . Map.mapKeys declSymbol $ sc