# 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

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_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
