1
1
mirror of https://github.com/github/semantic.git synced 2024-11-28 10:15:55 +03:00
semantic/semantic-python/test/Instances.hs

48 lines
1.5 KiB
Haskell
Raw Normal View History

{-# LANGUAGE DeriveAnyClass, DerivingStrategies, GeneralizedNewtypeDeriving, LambdaCase, StandaloneDeriving, FlexibleInstances, NamedFieldPuns, OverloadedStrings, QuantifiedConstraints, TypeOperators, UndecidableInstances, TypeApplications #-}
2019-08-27 18:27:53 +03:00
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Instances () where
2019-08-27 18:27:53 +03:00
-- 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.ScopeGraph
import Core.File
import Core.Name (Name (..))
2019-08-27 18:27:53 +03:00
import Data.Aeson
import qualified Data.Map as Map
2019-10-11 01:08:25 +03:00
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
2019-10-10 21:18:56 +03:00
toJSON File{filePath, fileSpan, fileBody} = object
[ "path" .= filePath
, "span" .= fileSpan
, "body" .= fileBody
]
2019-08-27 18:27:53 +03:00
2019-10-11 01:08:25 +03:00
instance ToJSON Path.AbsRelFile where
toJSON p = toJSON (pack (show p))
2019-08-27 18:27:53 +03:00
instance ToJSON Ref where
2019-10-10 21:18:56 +03:00
toJSON (Ref path span) = object
[ "kind" .= ("ref" :: Text)
, "path" .= path
, "span" .= span
]
2019-08-27 18:27:53 +03:00
instance ToJSON Decl where
2019-10-10 21:18:56 +03:00
toJSON Decl{declSymbol, declPath, declSpan} = object
2019-08-27 18:27:53 +03:00
[ "kind" .= ("decl" :: Text)
, "symbol" .= declSymbol
2019-10-10 21:18:56 +03:00
, "path" .= declPath
, "span" .= declSpan
2019-08-27 18:27:53 +03:00
]
instance ToJSON ScopeGraph where
toJSON (ScopeGraph sc) = toJSON . Map.mapKeys declSymbol $ sc