module Tokstyle.Cimple.Analysis
    ( analyse
    , analyseGlobal
    ) where

import           Data.Text                                (Text)
import           Language.Cimple                          (Lexeme, Node (..))

import qualified Tokstyle.Cimple.Analysis.ForLoops        as ForLoops
import qualified Tokstyle.Cimple.Analysis.FuncPrototypes  as FuncPrototypes
import qualified Tokstyle.Cimple.Analysis.FuncScopes      as FuncScopes
import qualified Tokstyle.Cimple.Analysis.GlobalFuncs     as GlobalFuncs
import qualified Tokstyle.Cimple.Analysis.LoggerCalls     as LoggerCalls
import qualified Tokstyle.Cimple.Analysis.LoggerNoEscapes as LoggerNoEscapes
--import qualified Tokstyle.Cimple.Analysis.VarUnusedInScope as VarUnusedInScope

import qualified Tokstyle.Cimple.Analysis.DeclaredOnce    as DeclaredOnce
import qualified Tokstyle.Cimple.Analysis.DeclsHaveDefns  as DeclsHaveDefns
import qualified Tokstyle.Cimple.Analysis.DocComments     as DocComments


type TranslationUnit = (FilePath, [Node () (Lexeme Text)])

analyse :: TranslationUnit -> [Text]
analyse :: TranslationUnit -> [Text]
analyse TranslationUnit
tu = ((TranslationUnit -> [Text]) -> [Text])
-> [TranslationUnit -> [Text]] -> [Text]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap ((TranslationUnit -> [Text]) -> TranslationUnit -> [Text]
forall a b. (a -> b) -> a -> b
$ TranslationUnit
tu)
    [ TranslationUnit -> [Text]
ForLoops.analyse
    , TranslationUnit -> [Text]
FuncPrototypes.analyse
    , TranslationUnit -> [Text]
forall a. (FilePath, [Node a (Lexeme Text)]) -> [Text]
FuncScopes.analyse
    , TranslationUnit -> [Text]
forall a. (FilePath, [Node a (Lexeme Text)]) -> [Text]
GlobalFuncs.analyse
    , TranslationUnit -> [Text]
LoggerCalls.analyse
    , TranslationUnit -> [Text]
LoggerNoEscapes.analyse
    --, VarUnusedInScope.analyse
    ]

analyseGlobal :: [TranslationUnit] -> [Text]
analyseGlobal :: [TranslationUnit] -> [Text]
analyseGlobal [TranslationUnit]
tus = (([TranslationUnit] -> [Text]) -> [Text])
-> [[TranslationUnit] -> [Text]] -> [Text]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (([TranslationUnit] -> [Text]) -> [TranslationUnit] -> [Text]
forall a b. (a -> b) -> a -> b
$ [TranslationUnit]
tus)
    [ [TranslationUnit] -> [Text]
DeclaredOnce.analyse
    , [TranslationUnit] -> [Text]
DeclsHaveDefns.analyse
    , [TranslationUnit] -> [Text]
DocComments.analyse
    ]