packages feed

dhscanner-bitcode-1.0.14: 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
   = ClassInstance ClassInstanceContent
   | ClassName ClassNameContent
   | FieldedAccess Fqn Token.FieldName
   | CallMethodOfClass Location String Token.ClassName
   | FirstPartyImport FirstPartyImportContent
   | ThirdPartyImport ThirdPartyImportContent
   | NativeTypeInt
   | NativeTypeString
   | NativeTypeBool
   | NativeTypeConstInt Int
   | NativeTypeConstStr String
   | NativeTypeConstBool Bool
   | NativeTypeNull
   | Unknwon
   deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

data FirstPartyImportContent
   = FirstPartyImportContent
     {
         firstPartyImportedLocation :: FilePath,
         firstPartyImportedName :: Maybe String
     }
     deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )

-- |
--
-- ==== __Examples:__
--
-- * Entire third party package import
--
-- @
-- # thirdPartyImportedPackageName == "urllib3"
-- # thirdPartyImportedPartsFromPackage == []
-- # thirdPartyImportJustOneName == Nothing
-- # thirdPartyImportWithAlias == Nothing
-- import urllib3
-- @
--
-- * Specific third party import
--
-- @
-- # thirdPartyImportedPackageName == "scipy"
-- # thirdPartyImportedPartsFromPackage == [ "linalg" ]
-- # thirdPartyImportJustOneName == Nothing
-- # thirdPartyImportWithAlias == Nothing
-- import scipy.linalg
-- @
--
-- * Named third party import
--
-- @
-- # thirdPartyImportedPackageName == "django"
-- # thirdPartyImportedPartsFromPackage == [ "db" ]
-- # thirdPartyImportJustOneName == "models"
-- # thirdPartyImportWithAlias == Nothing
-- from django.db import models
-- @
--
data ThirdPartyImportContent
   = ThirdPartyImportContent
     {
         thirdPartyImportedPackageName :: String,
         thirdPartyImportedPartsFromPackage :: [ String ],
         thirdPartyImportJustOneName :: Maybe String,
         thirdPartyImportWithAlias :: Maybe 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 )