{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}

-- | The contents of this module originate from module
--  [HSE.Util](https://github.com/ndmitchell/hlint/blob/master/src/HSE/Util.hs)
--  in Neil Mitchell's HLint.
module Language.Haskell.Exts.Util.Internal where

import           Language.Haskell.Exts
import           Prelude

---------------------------------------------------------------------
-- ACCESSOR/TESTER

-- is* :: Exp l -> Bool
-- is* :: Decl s -> Bool
isApp :: Exp l -> Bool
isApp App{} = True; isApp _ = False
isAnyApp :: Exp l -> Bool
isAnyApp x = isApp x || isInfixApp x
isInfixApp :: Exp l -> Bool
isInfixApp InfixApp{} = True; isInfixApp _ = False

isDot :: QOp s -> Bool
isDot (QVarOp _ (UnQual _ (Symbol _ "."))) = True
isDot _                                    = False
isSection :: Exp l -> Bool
isSection LeftSection{}  = True
isSection RightSection{} = True
isSection _              = False

isDotApp :: Exp s -> Bool
isDotApp (InfixApp _ _ dot _) | isDot dot = True
isDotApp _                    = False