module Language.Cimple ( module X , DefaultActions , defaultActions , removeSloc , elideGroups , getParamNameFromNode ) where import Control.Monad.State.Strict (State) import qualified Control.Monad.State.Strict as State import Data.Fix (Fix (..)) import Data.Text (Text) import Language.Cimple.Annot as X import Language.Cimple.Ast as X import Language.Cimple.DescribeAst as X import Language.Cimple.Flatten as X import Language.Cimple.Lexer as X import Language.Cimple.MapAst as X import Language.Cimple.Parser as X import Language.Cimple.Parser.Error.Pretty as X import Language.Cimple.Tokens as X type DefaultActions a = X.IdentityActions (State a) Text defaultActions :: DefaultActions state defaultActions :: DefaultActions state defaultActions = DefaultActions state forall (f :: * -> *) text. Applicative f => AstActions f text text X.identityActions removeSloc :: Node (Lexeme Text) -> Node (Lexeme Text) removeSloc :: Node (Lexeme Text) -> Node (Lexeme Text) removeSloc = (State () (Node (Lexeme Text)) -> () -> Node (Lexeme Text)) -> () -> State () (Node (Lexeme Text)) -> Node (Lexeme Text) forall a b c. (a -> b -> c) -> b -> a -> c flip State () (Node (Lexeme Text)) -> () -> Node (Lexeme Text) forall s a. State s a -> s -> a State.evalState () (State () (Node (Lexeme Text)) -> Node (Lexeme Text)) -> (Node (Lexeme Text) -> State () (Node (Lexeme Text))) -> Node (Lexeme Text) -> Node (Lexeme Text) forall b c a. (b -> c) -> (a -> b) -> a -> c . AstActions (State ()) Text Text -> Node (Lexeme Text) -> State () (Mapped Text Text (Node (Lexeme Text))) forall itext otext a (f :: * -> *). (MapAst itext otext a, Applicative f, HasCallStack) => AstActions f itext otext -> a -> f (Mapped itext otext a) mapAst AstActions (State ()) Text Text forall state. DefaultActions state defaultActions { doLexeme :: FilePath -> Lexeme Text -> State () (Lexeme Text) -> State () (Lexeme Text) doLexeme = \FilePath _ (L AlexPosn _ LexemeClass c Text t) State () (Lexeme Text) _ -> Lexeme Text -> State () (Lexeme Text) forall (f :: * -> *) a. Applicative f => a -> f a pure (Lexeme Text -> State () (Lexeme Text)) -> Lexeme Text -> State () (Lexeme Text) forall a b. (a -> b) -> a -> b $ AlexPosn -> LexemeClass -> Text -> Lexeme Text forall text. AlexPosn -> LexemeClass -> text -> Lexeme text L (Int -> Int -> Int -> AlexPosn AlexPn Int 0 Int 0 Int 0) LexemeClass c Text t } elideGroups :: Node (Lexeme Text) -> Node (Lexeme Text) elideGroups :: Node (Lexeme Text) -> Node (Lexeme Text) elideGroups = (State () (Node (Lexeme Text)) -> () -> Node (Lexeme Text)) -> () -> State () (Node (Lexeme Text)) -> Node (Lexeme Text) forall a b c. (a -> b -> c) -> b -> a -> c flip State () (Node (Lexeme Text)) -> () -> Node (Lexeme Text) forall s a. State s a -> s -> a State.evalState () (State () (Node (Lexeme Text)) -> Node (Lexeme Text)) -> (Node (Lexeme Text) -> State () (Node (Lexeme Text))) -> Node (Lexeme Text) -> Node (Lexeme Text) forall b c a. (b -> c) -> (a -> b) -> a -> c . AstActions (State ()) Text Text -> Node (Lexeme Text) -> State () (Mapped Text Text (Node (Lexeme Text))) forall itext otext a (f :: * -> *). (MapAst itext otext a, Applicative f, HasCallStack) => AstActions f itext otext -> a -> f (Mapped itext otext a) mapAst AstActions (State ()) Text Text forall state. DefaultActions state defaultActions { doNodes :: FilePath -> [Node (Lexeme Text)] -> State () [Node (Lexeme Text)] -> State () [Node (Lexeme Text)] doNodes = \FilePath _ [Node (Lexeme Text)] _ State () [Node (Lexeme Text)] m_nodes -> do [Node (Lexeme Text)] nodes <- State () [Node (Lexeme Text)] m_nodes [Node (Lexeme Text)] -> State () [Node (Lexeme Text)] forall (m :: * -> *) a. Monad m => a -> m a return ([Node (Lexeme Text)] -> State () [Node (Lexeme Text)]) -> [Node (Lexeme Text)] -> State () [Node (Lexeme Text)] forall a b. (a -> b) -> a -> b $ (Node (Lexeme Text) -> [Node (Lexeme Text)]) -> [Node (Lexeme Text)] -> [Node (Lexeme Text)] forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap Node (Lexeme Text) -> [Node (Lexeme Text)] forall lexeme. Fix (NodeF lexeme) -> [Fix (NodeF lexeme)] flatten [Node (Lexeme Text)] nodes } where flatten :: Fix (NodeF lexeme) -> [Fix (NodeF lexeme)] flatten (Fix (Group [Fix (NodeF lexeme)] ns)) = (Fix (NodeF lexeme) -> [Fix (NodeF lexeme)]) -> [Fix (NodeF lexeme)] -> [Fix (NodeF lexeme)] forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap Fix (NodeF lexeme) -> [Fix (NodeF lexeme)] flatten [Fix (NodeF lexeme)] ns flatten Fix (NodeF lexeme) n = [Fix (NodeF lexeme) n] getParamNameFromNode :: Node (Lexeme Text) -> Maybe Text getParamNameFromNode :: Node (Lexeme Text) -> Maybe Text getParamNameFromNode (Fix (VarDecl Node (Lexeme Text) _ (L AlexPosn _ LexemeClass _ Text name) [Node (Lexeme Text)] _)) = Text -> Maybe Text forall a. a -> Maybe a Just Text name getParamNameFromNode Node (Lexeme Text) _ = Maybe Text forall a. Maybe a Nothing