packages feed

dhscanner-bitcode-1.0.13: src/Fqn.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}

module Fqn

where

-- project imports
import Location
import qualified Token

-- general imports
import Data.Aeson
import GHC.Generics

-- |
--
-- * Fully qualified name
-- * Resolution at the /file/ level
-- * Unidirectional resolution only ( one pass )
--
data Fqn
   = Imported ImportedContent
   | ClassInstance ClassInstanceContent
   | ClassName ClassNameContent
   | FieldedAccess Fqn Token.FieldName
   | CallMethodOfClass Location String Token.ClassName
   | NativeTypeInt
   | NativeTypeString
   | NativeTypeBool
   | NativeTypeConstInt Int
   | NativeTypeConstStr String
   | NativeTypeConstBool Bool
   | NativeTypeNull
   | Unknwon
   deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data ImportedContent
   = ImportedLocal ImportedLocalContent
   | ImportedThirdParty ImportedThirdPartyContent
   deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data ImportedLocalContent
   = ImportedLocalContent
     {
         importedLocalLocation :: FilePath,
         importedLocalRest :: [ String ]
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data ImportedThirdPartyContent
   = ImportedThirdPartyContent
     {
         importedThirdPartyName :: String,
         importedThirdPartyRest :: [ String ]
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data ClassInstanceContent
   = ClassInstanceContent
     {
         instanceName :: InstanceName,
         instanceOfClass :: Token.ClassName
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data InstanceName
   = Self -- ^ Python, Ruby
   | This -- ^ Java, Php, Javascript, Typescript
   deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data InstanceAttribute
   = InstanceAttribute
     {
         attributeName :: Token.FieldName
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data ClassNameContent
   = ClassNameContent
     {
         classNameContent :: Token.ClassName
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )