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 +6/−6
- src/Ast.hs +37/−25
- src/Asts.hs +0/−21
- src/Token.hs +8/−14
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