void TranslationUnitUpdater::createTranslationUnitIfNeeded() { if (!m_cxTranslationUnit) { m_cxTranslationUnit = CXTranslationUnit(); const auto args = commandLineArguments(); if (isVerboseModeEnabled()) args.print(); UnsavedFilesShallowArguments unsaved = m_in.unsavedFiles.shallowArguments(); m_parseErrorCode = clang_parseTranslationUnit2(m_cxIndex, NULL, args.data(), args.count(), unsaved.data(), unsaved.count(), defaultParseOptions(), &m_cxTranslationUnit); if (parseWasSuccessful()) { updateIncludeFilePaths(); m_out.parseTimePoint = Clock::now(); } else { qWarning() << "Parsing" << m_in.filePath << "failed:" << errorCodeToText(m_parseErrorCode); m_out.hasParseOrReparseFailed = true; } } }
ClangCodeCompleteResults CodeCompleter::completeHelper(uint line, uint column) { const Utf8String nativeFilePath = FilePath::toNativeSeparators(translationUnit.filePath()); UnsavedFilesShallowArguments unsaved = unsavedFiles.shallowArguments(); return clang_codeCompleteAt(translationUnit.cxTranslationUnit(), nativeFilePath.constData(), line, column, unsaved.data(), unsaved.count(), defaultOptions()); }
void TranslationUnitUpdater::reparse() { UnsavedFilesShallowArguments unsaved = m_in.unsavedFiles.shallowArguments(); m_reparseErrorCode = clang_reparseTranslationUnit( m_cxTranslationUnit, unsaved.count(), unsaved.data(), clang_defaultReparseOptions(m_cxTranslationUnit)); if (reparseWasSuccessful()) { updateIncludeFilePaths(); m_out.reparseTimePoint = Clock::now(); m_out.needsToBeReparsedChangeTimePoint = m_in.needsToBeReparsedChangeTimePoint; } else { qWarning() << "Reparsing" << m_in.filePath << "failed:" << m_reparseErrorCode; m_out.hasParseOrReparseFailed = true; } }