{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} -- | Functions for manipulating indexes. -- -- An index is a container that holds a set of translation units. Generally -- you'll create an index using 'withNew' and then use that index with functions -- from "Clang.TranslationUnit" to create and work with translation units. -- -- This module is intended to be imported qualified. module Clang.Index ( -- * Creating an index withNew -- * Index options , getGlobalOptions , setGlobalOptions , FFI.GlobalIndexOptions(..) , FFI.threadBackgroundPriorityForAll ) where import Control.Applicative import Control.Monad.IO.Class import Clang.Internal.BitFlags import qualified Clang.Internal.FFI as FFI import Clang.Internal.Monad -- | Creates an index. withNew :: ClangBase m => Bool -- ^ Whether to exclude declarations coming from pre-compiled headers. -> Bool -- ^ Whether to automatically display diagnostic messages. -> (forall s. FFI.Index s -> ClangT s m a) -- ^ The function which will use the index. -> m a withNew i1 i2 f = runClangT (FFI.createIndex i1 i2 >>= f) -- | Retrieves the global options for this index. getGlobalOptions :: ClangBase m => FFI.Index s' -> ClangT s m [FFI.GlobalIndexOptions] getGlobalOptions i = unFlags <$> liftIO (FFI.cXIndex_getGlobalOptions i) -- | Sets the global options for this index. setGlobalOptions :: ClangBase m => FFI.Index s' -> [FFI.GlobalIndexOptions] -> ClangT s m () setGlobalOptions i opts = liftIO $ FFI.cXIndex_setGlobalOptions i (orFlags opts)