DiagnosticSet TranslationUnit::diagnostics() const
{
    reparseTranslationUnitIfFilesAreChanged();

    d->hasNewDiagnostics = false;

    return DiagnosticSet(clang_getDiagnosticSetFromTU(cxTranslationUnit()));
}
HighlightingInformations TranslationUnit::highlightingInformationsInRange(const SourceRange &range) const
{
    CXToken *cxTokens = 0;
    uint cxTokensCount = 0;
    auto translationUnit = cxTranslationUnit();

    clang_tokenize(translationUnit, range, &cxTokens, &cxTokensCount);

    return HighlightingInformations(translationUnit, cxTokens, cxTokensCount);
}
DiagnosticSet TranslationUnit::diagnostics() const
{
    d->hasNewDiagnostics = false;

    return DiagnosticSet(clang_getDiagnosticSetFromTU(cxTranslationUnit()));
}
void TranslationUnit::reparse() const
{
    cxTranslationUnit();

    reparseTranslationUnit();
}
SkippedSourceRanges TranslationUnit::skippedSourceRanges() const
{
    return SkippedSourceRanges(cxTranslationUnit(), d->filePath.constData());
}
Cursor TranslationUnit::cursor() const
{
    return clang_getTranslationUnitCursor(cxTranslationUnit());
}
Cursor TranslationUnit::cursorAt(const Utf8String &filePath, uint line, uint column) const
{
    return clang_getCursor(cxTranslationUnit(), sourceLocationAt(filePath, line, column));
}
Cursor TranslationUnit::cursorAt(uint line, uint column) const
{
    return clang_getCursor(cxTranslationUnit(), sourceLocationAt(line, column));
}
SourceLocation TranslationUnit::sourceLocationAt(const Utf8String &filePath, uint line, uint column) const
{
    return SourceLocation(cxTranslationUnit(), filePath, line, column);
}
SourceLocation TranslationUnit::sourceLocationAt(uint line, uint column) const
{
    return SourceLocation(cxTranslationUnit(), filePath(), line, column);
}