LibClang-3.8.0: src/Clang/Index.hs
{-# 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)