module Clang.Cursor
( isNullCursor
, nullCursor
, getHash
, getKind
, getLinkage
, getAvailability
, getLanguage
, getTranslationUnit
, getSemanticParent
, getLexicalParent
, getOverriddenCursors
, getIncludedFile
, getLocation
, getSpellingLocation
, getExtent
, getType
, getResultType
, getDeclObjCTypeEncoding
, getSpelling
, getSpellingNameRange
, getDisplayName
, getReferenced
, getDefinition
, getCanonicalCursor
, getObjCSelectorIndex
, getReceiverType
, getObjCPropertyAttributes
, getObjCDeclQualifiers
, isObjCOptional
, isVariadic
, getTemplateKind
, getTemplateForSpecialization
, getReferenceNameRange
, getTypeDeclaration
, getNumArguments
, getArgument
, getUSR
, getIBOutletCollectionType
, isDefinition
, isDeclaration
, isReference
, isExpression
, isStatement
, isAttribute
, isInvalid
, isTranslationUnit
, isPreprocessing
, isUnexposed
, isBitField
, isVirtualBase
, isPureVirtualCppMethod
, isStaticCppMethod
, isVirtualCppMethod
, isDynamicCall
, getCommentRange
, getRawCommentText
, getBriefCommentText
, getParsedComment
, getModule
, getCXXAccessSpecifier
, getOverloadedDecls
, createSet
, setContains
, setInsert
, getCursorKindSpelling
, getCursorPlatformAvailability
, getCompletionString
) where
import Control.Monad.IO.Class
import GHC.Word
import Clang.Internal.BitFlags
import Clang.Internal.Comment
import qualified Clang.Internal.FFI as FFI
import Clang.Internal.Monad
isNullCursor :: FFI.Cursor s -> Bool
isNullCursor = FFI.cursor_isNull
nullCursor :: ClangBase m => ClangT s m (FFI.Cursor s)
nullCursor = FFI.getNullCursor
getHash :: ClangBase m => FFI.Cursor s' -> ClangT s m GHC.Word.Word32
getHash c = liftIO $ FFI.hashCursor c
getKind :: FFI.Cursor s -> FFI.CursorKind
getKind = FFI.getCursorKind
getLinkage :: ClangBase m => FFI.Cursor s' -> ClangT s m FFI.LinkageKind
getLinkage c = liftIO $ FFI.getCursorLinkage c
getAvailability :: ClangBase m => FFI.Cursor s' -> ClangT s m FFI.AvailabilityKind
getAvailability c = liftIO $ FFI.getCursorAvailability c
getLanguage :: ClangBase m => FFI.Cursor s' -> ClangT s m FFI.LanguageKind
getLanguage c = liftIO $ FFI.getCursorLanguage c
getTranslationUnit :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.TranslationUnit s)
getTranslationUnit = FFI.cursor_getTranslationUnit
getSemanticParent :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getSemanticParent c = liftIO $ FFI.getCursorSemanticParent mkProxy c
getLexicalParent :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getLexicalParent c = liftIO $ FFI.getCursorLexicalParent mkProxy c
getOverriddenCursors :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.CursorList s)
getOverriddenCursors = FFI.getOverriddenCursors
getIncludedFile :: ClangBase m => FFI.Cursor s' -> ClangT s m (Maybe (FFI.File s))
getIncludedFile c = liftIO $ FFI.getIncludedFile mkProxy c
getLocation :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.SourceLocation s)
getLocation c = liftIO $ FFI.getCursorLocation mkProxy c
getSpellingLocation :: ClangBase m => FFI.Cursor s'
-> ClangT s m (Maybe (FFI.File s), Int, Int, Int)
getSpellingLocation l = liftIO $ FFI.getCursorSpellingLocation mkProxy l
getExtent :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.SourceRange s)
getExtent c = liftIO $ FFI.getCursorExtent mkProxy c
getType :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Type s)
getType c = liftIO $ FFI.getCursorType mkProxy c
getResultType :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Type s)
getResultType c = liftIO $ FFI.getCursorResultType mkProxy c
getDeclObjCTypeEncoding :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getDeclObjCTypeEncoding = FFI.getDeclObjCTypeEncoding
getSpelling :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getSpelling = FFI.getCursorSpelling
getSpellingNameRange :: ClangBase m => FFI.Cursor s' -> Int -> ClangT s m (FFI.SourceRange s)
getSpellingNameRange c idx = liftIO $ FFI.cursor_getSpellingNameRange mkProxy c idx
getDisplayName :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getDisplayName = FFI.getCursorDisplayName
getReferenced :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getReferenced c = liftIO $ FFI.getCursorReferenced mkProxy c
getDefinition :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getDefinition c = liftIO $ FFI.getCursorDefinition mkProxy c
getCanonicalCursor :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getCanonicalCursor c = liftIO $ FFI.getCanonicalCursor mkProxy c
getObjCSelectorIndex :: ClangBase m => FFI.Cursor s' -> ClangT s m Int
getObjCSelectorIndex c = liftIO $ FFI.cursor_getObjCSelectorIndex c
getReceiverType :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Type s)
getReceiverType c = liftIO $ FFI.cursor_getReceiverType mkProxy c
getObjCPropertyAttributes :: ClangBase m => FFI.Cursor s'
-> ClangT s m [FFI.ObjCPropertyAttrKind]
getObjCPropertyAttributes c = unFlags <$> liftIO (FFI.cursor_getObjCPropertyAttributes c)
getObjCDeclQualifiers :: ClangBase m => FFI.Cursor s' -> ClangT s m [FFI.ObjCDeclQualifierKind]
getObjCDeclQualifiers c = unFlags <$> liftIO (FFI.cursor_getObjCDeclQualifiers c)
isObjCOptional :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isObjCOptional c = liftIO $ FFI.cursor_isObjCOptional c
isVariadic :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isVariadic c = liftIO $ FFI.cursor_isVariadic c
getTemplateKind :: ClangBase m => FFI.Cursor s' -> ClangT s m FFI.CursorKind
getTemplateKind c = liftIO $ FFI.getTemplateCursorKind c
getTemplateForSpecialization :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Cursor s)
getTemplateForSpecialization c = liftIO $ FFI.getSpecializedCursorTemplate mkProxy c
getReferenceNameRange :: ClangBase m => FFI.Cursor s' -> [FFI.NameRefFlags] -> Int
-> ClangT s m (FFI.SourceRange s)
getReferenceNameRange c fs p = liftIO $ FFI.getCursorReferenceNameRange mkProxy c (orFlags fs) p
getTypeDeclaration :: ClangBase m => FFI.Type s' -> ClangT s m (FFI.Cursor s)
getTypeDeclaration t = liftIO $ FFI.getTypeDeclaration mkProxy t
getNumArguments :: ClangBase m => FFI.Cursor s' -> ClangT s m Int
getNumArguments c = liftIO $ FFI.cursor_getNumArguments c
getArgument :: ClangBase m => FFI.Cursor s' -> Int -> ClangT s m (FFI.Cursor s)
getArgument c i = liftIO $ FFI.cursor_getArgument mkProxy c i
getUSR :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getUSR = FFI.getCursorUSR
getIBOutletCollectionType :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Type s)
getIBOutletCollectionType c = liftIO $ FFI.getIBOutletCollectionType mkProxy c
isDefinition :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isDefinition c = liftIO $ FFI.isCursorDefinition c
isDeclaration :: FFI.CursorKind -> Bool
isDeclaration = FFI.isDeclaration
isReference :: FFI.CursorKind -> Bool
isReference = FFI.isReference
isExpression :: FFI.CursorKind -> Bool
isExpression = FFI.isExpression
isStatement :: FFI.CursorKind -> Bool
isStatement = FFI.isStatement
isAttribute :: FFI.CursorKind -> Bool
isAttribute = FFI.isAttribute
isInvalid :: FFI.CursorKind -> Bool
isInvalid = FFI.isInvalid
isTranslationUnit :: FFI.CursorKind -> Bool
isTranslationUnit = FFI.isTranslationUnit
isPreprocessing :: FFI.CursorKind -> Bool
isPreprocessing = FFI.isPreprocessing
isUnexposed :: FFI.CursorKind -> Bool
isUnexposed = FFI.isUnexposed
isBitField :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isBitField c = liftIO $ FFI.isBitField c
isVirtualBase :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isVirtualBase c = liftIO $ FFI.isVirtualBase c
isPureVirtualCppMethod :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isPureVirtualCppMethod c = liftIO $ FFI.cXXMethod_isPureVirtual c
isStaticCppMethod :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isStaticCppMethod c = liftIO $ FFI.cXXMethod_isStatic c
isVirtualCppMethod :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isVirtualCppMethod c = liftIO $ FFI.cXXMethod_isVirtual c
isDynamicCall :: ClangBase m => FFI.Cursor s' -> ClangT s m Bool
isDynamicCall c = liftIO $ FFI.cursor_isDynamicCall c
getCommentRange :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.SourceRange s)
getCommentRange c = liftIO $ FFI.cursor_getCommentRange mkProxy c
getRawCommentText :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getRawCommentText = FFI.cursor_getRawCommentText
getBriefCommentText :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.ClangString s)
getBriefCommentText = FFI.cursor_getBriefCommentText
getParsedComment :: ClangBase m => FFI.Cursor s' -> ClangT s m (Maybe (ParsedComment s))
getParsedComment c = do
comment <- liftIO $ FFI.cursor_getParsedComment mkProxy c
parseComment comment
getModule :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.Module s)
getModule c = liftIO $ FFI.cursor_getModule mkProxy c
getCXXAccessSpecifier :: ClangBase m => FFI.Cursor s' -> ClangT s m FFI.CXXAccessSpecifier
getCXXAccessSpecifier c = liftIO $ FFI.getCXXAccessSpecifier c
getOverloadedDecls :: ClangBase m => FFI.Cursor s' -> ClangT s m [FFI.Cursor s]
getOverloadedDecls c = liftIO $ do
numDecls <- FFI.getNumOverloadedDecls c
mapM (FFI.getOverloadedDecl mkProxy c) [0..(numDecls 1)]
createSet :: ClangBase m => ClangT s m (FFI.CursorSet s)
createSet = FFI.createCXCursorSet
setContains :: ClangBase m => FFI.CursorSet s' -> FFI.Cursor s'' -> ClangT s m Bool
setContains s c = liftIO $ FFI.cXCursorSet_contains s c
setInsert :: ClangBase m => FFI.CursorSet s' -> FFI.Cursor s'' -> ClangT s m Bool
setInsert s c = liftIO $ FFI.cXCursorSet_insert s c
getCursorKindSpelling :: ClangBase m => FFI.CursorKind -> ClangT s m (FFI.ClangString s)
getCursorKindSpelling = FFI.getCursorKindSpelling
getCursorPlatformAvailability :: ClangBase m => FFI.Cursor s'
-> ClangT s m (FFI.PlatformAvailabilityInfo s)
getCursorPlatformAvailability = FFI.getCursorPlatformAvailability
getCompletionString :: ClangBase m => FFI.Cursor s' -> ClangT s m (FFI.CompletionString s)
getCompletionString = FFI.getCursorCompletionString