# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# Config file for generating the libclang bindings used by this package.

# ===================== GENERATING BINDINGS =====================
#    cd to project's root, and run -
#    dart run ffigen --config tool/libclang_config.yaml
# ===============================================================

name: Clang
description: Holds bindings to LibClang.
output: '../lib/src/header_parser/clang_bindings/clang_bindings.dart'
compiler-opts:
  - '-Ithird_party/libclang/include'
  - '-Wno-nullability-completeness'
headers:
  entry-points:
    - '../third_party/libclang/include/clang-c/Index.h'
  include-directives:
    - '**wrapper.c'
    - '**Index.h'
    - '**CXString.h'

preamble: |
  // Part of the LLVM Project, under the Apache License v2.0 with LLVM
  // Exceptions.
  // See https://llvm.org/LICENSE.txt for license information.
  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

  // ignore_for_file: camel_case_types, non_constant_identifier_names

enums:
  include:
    - CXChildVisitResult
    - CXCursorKind
    - CXTypeKind
    - CXDiagnosticDisplayOptions
    - CXTranslationUnit_Flags
    - CXEvalResultKind
    - CXObjCPropertyAttrKind
    - CXTypeNullabilityKind
    - CXTypeLayoutError

structs:
  include:
    - CXCursor
    - CXType
    - CXSourceLocation
    - CXString
    - CXTranslationUnitImpl
    - CXUnsavedFile
    - CXSourceRange

functions:
  include:
    - clang_createIndex
    - clang_disposeIndex
    - clang_getNumDiagnostics
    - clang_getDiagnostic
    - clang_disposeDiagnostic
    - clang_parseTranslationUnit
    - clang_disposeTranslationUnit
    - clang_EvalResult_getKind
    - clang_EvalResult_getAsInt
    - clang_EvalResult_getAsLongLong
    - clang_EvalResult_getAsDouble
    - clang_EvalResult_getAsStr
    - clang_EvalResult_dispose
    - clang_getCString
    - clang_disposeString
    - clang_getCursorKind
    - clang_getCursorKindSpelling
    - clang_getCursorType
    - clang_getTypeSpelling
    - clang_getTypeKindSpelling
    - clang_getResultType
    - clang_getTypedefName
    - clang_getPointeeType
    - clang_getCanonicalType
    - clang_Type_getNamedType
    - clang_Type_getAlignOf
    - clang_getTypeDeclaration
    - clang_getTypedefDeclUnderlyingType
    - clang_getCursorSpelling
    - clang_getTranslationUnitCursor
    - clang_formatDiagnostic
    - clang_visitChildren
    - clang_Cursor_getNumArguments
    - clang_Cursor_getArgument
    - clang_getNumArgTypes
    - clang_getArgType
    - clang_getCursorResultType
    - clang_getEnumConstantDeclValue
    - clang_equalRanges
    - clang_Cursor_getCommentRange
    - clang_Cursor_getRawCommentText
    - clang_Cursor_getBriefCommentText
    - clang_getCursorLocation
    - clang_getFileLocation
    - clang_getFileName
    - clang_getNumElements
    - clang_getArrayElementType
    - clang_Cursor_isMacroFunctionLike
    - clang_Cursor_isMacroBuiltin
    - clang_Cursor_Evaluate
    - clang_Cursor_isAnonymous
    - clang_Cursor_isAnonymousRecordDecl
    - clang_getCursorUSR
    - clang_getFieldDeclBitWidth
    - clang_Cursor_isFunctionInlined
    - clang_getCursorDefinition
    - clang_Cursor_isNull
    - clang_Cursor_hasAttrs
    - clang_Type_getObjCObjectBaseType
    - clang_Cursor_getObjCPropertyAttributes
    - clang_Cursor_getObjCPropertyGetterName
    - clang_Cursor_getObjCPropertySetterName
    - clang_Type_getNullability
    - clang_Location_isInSystemHeader
    - clang_getClangVersion
