# 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
# ===============================================================

# yaml-language-server: $schema=../ffigen.schema.json

name: Clang
description: Holds bindings to LibClang.
output: '../lib/src/header_parser/clang_bindings/clang_bindings.dart'
compiler-opts:
  - '-Ithird_party/libclang/include'
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
  as-int:
    include:
      - .*

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

functions:
  include:
    - clang_createIndex
    - clang_disposeIndex
    - clang_getNumDiagnostics
    - clang_getDiagnostic
    - clang_getDiagnosticSeverity
    - 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_isConstQualifiedType
    - clang_isFunctionTypeVariadic
    - clang_Cursor_getStorageClass
    - clang_getCursorResultType
    - clang_getEnumConstantDeclValue
    - clang_getEnumDeclIntegerType
    - 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_getCursorAvailability
    - clang_getCursorPlatformAvailability
    - clang_disposeCXPlatformAvailability
    - clang_Cursor_isNull
    - clang_Cursor_hasAttrs
    - clang_Type_getObjCObjectBaseType
    - clang_Cursor_getObjCPropertyAttributes
    - clang_Cursor_getObjCPropertyGetterName
    - clang_Cursor_getObjCPropertySetterName
    - clang_Cursor_isObjCOptional
    - clang_Type_getNullability
    - clang_Type_getModifiedType
    - clang_Location_isInSystemHeader
    - clang_getClangVersion
