# Libclang
[![Build Status](https://travis-ci.org/azawawi/p6-libclang.svg?branch=master)](https://travis-ci.org/azawawi/p6-libclang) [![Build status](https://ci.appveyor.com/api/projects/status/github/azawawi/p6-libclang?svg=true)](https://ci.appveyor.com/project/azawawi/p6-libclang/branch/master)
Perl 6 bindings for [`libclang`](https://clang.llvm.org/doxygen/group__CINDEX.html)
**Note: This is currently experimental and API may change. Please DO NOT use in
a production environment.**
## Example
```perl6
use v6;
use Libclang;
my $index = Libclang::Index.new;
LEAVE $index.destroy if $index.defined;
my $file-name = $*SPEC.catfile($*PROGRAM.IO.parent, "header.hpp");
my $translation-unit = Libclang::TranslationUnit.new($index, $file-name);
LEAVE $translation-unit.destroy if $translation-unit.defined;
my $cursor = $translation-unit.cursor;
LEAVE $cursor.destroy if $cursor.defined;
$cursor.visit-children(sub ($cursor, $parent) {
printf("Cursor '%15s' of kind '%s'\n", $cursor.spelling,
$cursor.kind-spelling);
return child-visit-recurse;
});
```
## Dependencies
Please follow the instructions below based on your platform to install `libclang` development libraries / headers:
|Platform|Installation command|
|-|-|
|Debian|`apt-get install libclang-dev`|
|macOS|`brew update;`
`brew install llvm --with-clang`|
|Windows|Install [mingw-w64-install.exe](https://sourceforge.net/projects/mingw-w64/files).
Install [Clang for Windows 64-bit](http://releases.llvm.org/download.html).|
## Installation
- Install this module using [zef](https://github.com/ugexe/zef):
```
$ zef install Libclang
```
## Testing
- To run tests:
```
$ AUTHOR_TESTING=1 zef test --verbose .
```
- To run all tests including author tests (Please make sure
[Test::Meta](https://github.com/jonathanstowe/Test-META) is installed):
```
$ zef install Test::META
$ AUTHOR_TESTING=1 prove -e "perl6 -Ilib"
```
## See Also
- https://gist.githubusercontent.com/raphaelmor/3150866/raw/4f722b922ae19c9d6c328d79d5a5ca8cb018fb77/clanglib.c
- https://shaharmike.com/cpp/libclang/
- http://bastian.rieck.ru/blog/posts/2015/baby_steps_libclang_ast/
## Author
Ahmad M. Zawawi, [azawawi](https://github.com/azawawi/) on #perl6.
## License
[MIT License](LICENSE)