packages feed

dhscanner-ast 1.0.10 → 1.1.0

raw patch · 4 files changed

+51/−66 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Ast: [filename] :: Root -> FilePath
- Ast: [paramNominalTypeV2] :: Param -> Maybe Var
- Ast: locationVar :: Var -> Location
- Asts: Asts :: [Root] -> Asts
- Asts: [asts] :: Asts -> [Root]
- Asts: data Asts
- Asts: instance Data.Aeson.Types.FromJSON.FromJSON Asts.Asts
- Asts: instance Data.Aeson.Types.ToJSON.ToJSON Asts.Asts
- Asts: instance GHC.Classes.Eq Asts.Asts
- Asts: instance GHC.Generics.Generic Asts.Asts
- Asts: instance GHC.Show.Show Asts.Asts
- Token: MembrName :: Named -> MembrName
- Token: MethdName :: Named -> MethdName
- Token: NominalTy :: Named -> NominalTy
- Token: PkgName :: Named -> PkgName
- Token: data MembrName
- Token: data MethdName
- Token: data NominalTy
- Token: data PkgName
- Token: getMembrNameToken :: MembrName -> Named
- Token: getMethdNameToken :: MethdName -> Named
- Token: getNominalTyToken :: NominalTy -> Named
- Token: getPkgNameToken :: PkgName -> Named
- Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.MembrName
- Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.MethdName
- Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.NominalTy
- Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.PkgName
- Token: instance Data.Aeson.Types.FromJSON.FromJSONKey Token.MembrName
- Token: instance Data.Aeson.Types.FromJSON.FromJSONKey Token.MethdName
- Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.MembrName
- Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.MethdName
- Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.NominalTy
- Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.PkgName
- Token: instance Data.Aeson.Types.ToJSON.ToJSONKey Token.MembrName
- Token: instance Data.Aeson.Types.ToJSON.ToJSONKey Token.MethdName
- Token: instance GHC.Classes.Eq Token.MembrName
- Token: instance GHC.Classes.Eq Token.MethdName
- Token: instance GHC.Classes.Eq Token.NominalTy
- Token: instance GHC.Classes.Eq Token.PkgName
- Token: instance GHC.Classes.Ord Token.MembrName
- Token: instance GHC.Classes.Ord Token.MethdName
- Token: instance GHC.Classes.Ord Token.NominalTy
- Token: instance GHC.Classes.Ord Token.PkgName
- Token: instance GHC.Generics.Generic Token.MembrName
- Token: instance GHC.Generics.Generic Token.MethdName
- Token: instance GHC.Generics.Generic Token.NominalTy
- Token: instance GHC.Generics.Generic Token.PkgName
- Token: instance GHC.Show.Show Token.MembrName
- Token: instance GHC.Show.Show Token.MethdName
- Token: instance GHC.Show.Show Token.NominalTy
- Token: instance GHC.Show.Show Token.PkgName
+ Token: MemberName :: Named -> MemberName
+ Token: MethodName :: Named -> MethodName
+ Token: data MemberName
+ Token: data MethodName
+ Token: getMemberNameToken :: MemberName -> Named
+ Token: getMethodNameToken :: MethodName -> Named
+ Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.MemberName
+ Token: instance Data.Aeson.Types.FromJSON.FromJSON Token.MethodName
+ Token: instance Data.Aeson.Types.FromJSON.FromJSONKey Token.MemberName
+ Token: instance Data.Aeson.Types.FromJSON.FromJSONKey Token.MethodName
+ Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.MemberName
+ Token: instance Data.Aeson.Types.ToJSON.ToJSON Token.MethodName
+ Token: instance Data.Aeson.Types.ToJSON.ToJSONKey Token.MemberName
+ Token: instance Data.Aeson.Types.ToJSON.ToJSONKey Token.MethodName
+ Token: instance GHC.Classes.Eq Token.MemberName
+ Token: instance GHC.Classes.Eq Token.MethodName
+ Token: instance GHC.Classes.Ord Token.MemberName
+ Token: instance GHC.Classes.Ord Token.MethodName
+ Token: instance GHC.Generics.Generic Token.MemberName
+ Token: instance GHC.Generics.Generic Token.MethodName
+ Token: instance GHC.Show.Show Token.MemberName
+ Token: instance GHC.Show.Show Token.MethodName
- Ast: DataMember :: MembrName -> NominalTy -> Maybe Exp -> DataMember
+ Ast: DataMember :: MemberName -> Maybe Var -> Maybe Exp -> DataMember
- Ast: DataMembers :: Map MembrName DataMember -> DataMembers
+ Ast: DataMembers :: Map MemberName DataMember -> DataMembers
- Ast: Methods :: Map MethdName StmtMethodContent -> Methods
+ Ast: Methods :: Map MethodName StmtMethodContent -> Methods
- Ast: Param :: ParamName -> NominalTy -> Maybe Var -> Word -> Param
+ Ast: Param :: ParamName -> Maybe Var -> Word -> Param
- Ast: Root :: FilePath -> [Stmt] -> Root
+ Ast: Root :: [Stmt] -> Root
- Ast: StmtFuncContent :: NominalTy -> FuncName -> [Param] -> [Stmt] -> [Exp] -> Location -> StmtFuncContent
+ Ast: StmtFuncContent :: Maybe Var -> FuncName -> [Param] -> [Stmt] -> [Exp] -> Location -> StmtFuncContent
- Ast: StmtMethodContent :: NominalTy -> MethdName -> [Param] -> [Stmt] -> Location -> ClassName -> [SuperName] -> StmtMethodContent
+ Ast: StmtMethodContent :: Maybe Var -> MethodName -> [Param] -> [Stmt] -> Location -> ClassName -> [SuperName] -> StmtMethodContent
- Ast: StmtVardecContent :: VarName -> NominalTy -> Maybe Exp -> Location -> StmtVardecContent
+ Ast: StmtVardecContent :: VarName -> Maybe Var -> Maybe Exp -> Location -> StmtVardecContent
- Ast: [actualDataMembers] :: DataMembers -> Map MembrName DataMember
+ Ast: [actualDataMembers] :: DataMembers -> Map MemberName DataMember
- Ast: [actualMethods] :: Methods -> Map MethdName StmtMethodContent
+ Ast: [actualMethods] :: Methods -> Map MethodName StmtMethodContent
- Ast: [dataMemberName] :: DataMember -> MembrName
+ Ast: [dataMemberName] :: DataMember -> MemberName
- Ast: [dataMemberNominalType] :: DataMember -> NominalTy
+ Ast: [dataMemberNominalType] :: DataMember -> Maybe Var
- Ast: [paramNominalType] :: Param -> NominalTy
+ Ast: [paramNominalType] :: Param -> Maybe Var
- Ast: [stmtFuncReturnType] :: StmtFuncContent -> NominalTy
+ Ast: [stmtFuncReturnType] :: StmtFuncContent -> Maybe Var
- Ast: [stmtMethodName] :: StmtMethodContent -> MethdName
+ Ast: [stmtMethodName] :: StmtMethodContent -> MethodName
- Ast: [stmtMethodReturnType] :: StmtMethodContent -> NominalTy
+ Ast: [stmtMethodReturnType] :: StmtMethodContent -> Maybe Var
- Ast: [stmtVardecNominalType] :: StmtVardecContent -> NominalTy
+ Ast: [stmtVardecNominalType] :: StmtVardecContent -> Maybe Var
- Token: getMethodNameLocation :: MethdName -> Location
+ Token: getMethodNameLocation :: MethodName -> Location

Files

dhscanner-ast.cabal view
@@ -22,7 +22,7 @@     and models both of them as plain sequential code blocks. Every file has exactly one ast that represents it.
     Non Haskell parogrammers note: The ast is /immutable/ (like everything else in Haskell ...)
 
-version:            1.0.10
+version:            1.1.0
 license:            GPL-3.0-only
 license-file:       LICENSE
 author:             OrenGitHub
@@ -32,17 +32,17 @@ stability:          experimental
 build-type:         Simple
 
-common warnings
-    ghc-options: -Wall
+common ghc_options
 
+    ghc-options: -Wall -O2
+
 library
 
     import:
-        warnings
+        ghc_options
 
     exposed-modules:
         Ast,
-        Asts,
         Token,
         Location
 
@@ -60,7 +60,7 @@ test-suite dhscanner-ast-test
 
     import:
-        warnings
+        ghc_options
 
     type:
         exitcode-stdio-1.0
src/Ast.hs view
@@ -64,14 +64,11 @@ -- |
 -- * every file has /exactly one/ root 🌱
 --
--- * classes, functions and methods are organized as /statements/ ( not /declarations/ )
---
--- * this enables a simpler view for /modules/, /namespaces/, /nested classes/ etc.
+-- * classes, functions and methods are organized as /statements/
 --
 data Root
    = Root
      {
-         filename :: FilePath,
          stmts :: [ Stmt ]
      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
@@ -106,23 +103,46 @@    deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
 -- |
--- @since 1.0.6
--- 'paramNominalTypeV2' aims to replace 'paramNominalType'
+--
+-- * used by:
+--
+--       * 'StmtFuncContent'
+--       * 'StmtMethodContent'
+--       * 'ExpLambdaContent'
+--
+-- * note:
+--
+--       * `self` param in python methods has 'paramSerialIdx' = 0
+--       * `self` param in python methods is /ignored/ when assigning the serial index to /other/ params
+--       * see the example code below
+--
+-- ==== __Example:__
+--
+-- * params enumeration for python methods
+--
+-- @
+-- class Person:
+--     # paramSerialIdx = 1 -----------------------+
+--     # paramSerialIdx = 0 ------------+          |
+--     # paramSerialIdx = 0 ------+     |          |
+--     #                          |     |          |
+--     def some_arbitrary_method(self, name: str, age: int) -> None:
+--         pass
+-- @
 data Param
    = Param
      {
          paramName :: Token.ParamName,
-         paramNominalType :: Token.NominalTy, -- ^ ( will be deprecated soon )
-         paramNominalTypeV2 :: Maybe Var, -- ^ ( use this instead )
-         paramSerialIdx :: Word -- ^ ( /zero/-based )
+         paramNominalType :: Maybe Var,
+         paramSerialIdx :: Word -- ^ ( /zero/-based, ignores `self` in python methods when enumerating /other/ params )
      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
 data DataMember
    = DataMember
      {
-         dataMemberName :: Token.MembrName,
-         dataMemberNominalType :: Token.NominalTy,
+         dataMemberName :: Token.MemberName,
+         dataMemberNominalType :: Maybe Var,
          dataMemberInitValue :: Maybe Exp
      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
@@ -130,15 +150,15 @@ data DataMembers
    = DataMembers
      {
-         actualDataMembers :: Map Token.MembrName DataMember
+         actualDataMembers :: Map Token.MemberName DataMember
      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
 data StmtMethodContent
    = StmtMethodContent
      {
-         stmtMethodReturnType :: Token.NominalTy,
-         stmtMethodName :: Token.MethdName,
+         stmtMethodReturnType :: Maybe Var,
+         stmtMethodName :: Token.MethodName,
          stmtMethodParams :: [ Param ],
          stmtMethodBody :: [ Stmt ],
          stmtMethodLocation :: Location,
@@ -150,7 +170,7 @@ data Methods
    = Methods
      {
-         actualMethods :: Map Token.MethdName StmtMethodContent
+         actualMethods :: Map Token.MethodName StmtMethodContent
      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
@@ -167,7 +187,7 @@ data StmtFuncContent
    = StmtFuncContent
      {
-         stmtFuncReturnType :: Token.NominalTy,
+         stmtFuncReturnType :: Maybe Var,
          stmtFuncName :: Token.FuncName,
          stmtFuncParams :: [ Param ],
          stmtFuncBody :: [ Stmt ],
@@ -180,7 +200,7 @@    = StmtVardecContent
      {
          stmtVardecName :: Token.VarName,
-         stmtVardecNominalType :: Token.NominalTy,
+         stmtVardecNominalType :: Maybe Var,
          stmtVardecInitValue :: Maybe Exp,
          stmtVardecLocation :: Location
      }
@@ -241,9 +261,6 @@      }
      deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
--- |
--- @since 1.0.9
--- ( added for better [php support](https://www.php.net/manual/en/language.operators.assignment.php) )
 data ExpAssignContent
    = ExpAssignContent
      {
@@ -405,8 +422,3 @@    | VarField VarFieldContent
    | VarSubscript VarSubscriptContent
    deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
-
-locationVar :: Var -> Location
-locationVar (VarSimple    v) = Token.getVarNameLocation (varName v)
-locationVar (VarField     v) = varFieldLocation v
-locationVar (VarSubscript v) = varSubscriptLocation v
− src/Asts.hs
@@ -1,21 +0,0 @@-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Asts
-
-where
-
-import Data.Aeson
-import GHC.Generics
-
--- project imports
-import qualified Ast
-
-data Asts
-   = Asts
-     {
-         asts :: [ Ast.Root ]
-     }
-     deriving ( Show, Eq, Generic, ToJSON, FromJSON )
-
src/Token.hs view
@@ -48,39 +48,33 @@    deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
    
 data VarName   = VarName   Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
-data PkgName   = PkgName   Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
 data FuncName  = FuncName  Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
 data ParamName = ParamName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
 data FieldName = FieldName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
 data ClassName = ClassName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
 data SuperName = SuperName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
-data MembrName = MembrName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord, ToJSONKey, FromJSONKey )
-data MethdName = MethdName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord, ToJSONKey, FromJSONKey )
-data NominalTy = NominalTy Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord )
+data MemberName = MemberName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord, ToJSONKey, FromJSONKey )
+data MethodName = MethodName Named deriving ( Show, Eq, Generic, ToJSON, FromJSON, Ord, ToJSONKey, FromJSONKey )
 
 -- getters signatures (to quiet ghc -Wall)
 getVarNameToken   :: VarName   -> Named
-getPkgNameToken   :: PkgName   -> Named
 getFuncNameToken  :: FuncName  -> Named
 getParamNameToken :: ParamName -> Named
 getFieldNameToken :: FieldName -> Named
 getClassNameToken :: ClassName -> Named
 getSuperNameToken :: SuperName -> Named
-getMembrNameToken :: MembrName -> Named
-getMethdNameToken :: MethdName -> Named
-getNominalTyToken :: NominalTy -> Named
+getMemberNameToken :: MemberName -> Named
+getMethodNameToken :: MethodName -> Named
 
 -- getters
 getVarNameToken   (VarName   v) = v
-getPkgNameToken   (PkgName   p) = p
 getFuncNameToken  (FuncName  f) = f
 getParamNameToken (ParamName p) = p
 getFieldNameToken (FieldName f) = f
 getClassNameToken (ClassName c) = c
 getSuperNameToken (SuperName s) = s
-getMembrNameToken (MembrName m) = m
-getMethdNameToken (MethdName m) = m
-getNominalTyToken (NominalTy t) = t
+getMemberNameToken (MemberName m) = m
+getMethodNameToken (MethodName m) = m
 
 -- locations signatures
 getVarNameLocation :: VarName -> Location
@@ -88,7 +82,7 @@ getClassNameLocation :: ClassName -> Location
 getParamNameLocation :: ParamName -> Location
 getFieldNameLocation :: FieldName -> Location
-getMethodNameLocation :: MethdName -> Location
+getMethodNameLocation :: MethodName -> Location
 
 -- locations signatures
 getVarNameLocation = location . getVarNameToken
@@ -96,7 +90,7 @@ getClassNameLocation = location . getClassNameToken
 getParamNameLocation = location . getParamNameToken
 getFieldNameLocation = location . getFieldNameToken
-getMethodNameLocation = location . getMethdNameToken
+getMethodNameLocation = location . getMethodNameToken
 
 data ConstBool
    = ConstBool