0

カスタム IDE のオートコンプリート機能を作成するために、qt で libclang を使用します。

私はこの機能を作りました:

QList<CompleterItem> CodeTool::autocompletion(QString content, QTextCursor cursor, QString filepath, QStringList options)
{
    QList<CompleterItem> lst;

    QTemporaryFile file;
    file.open();
    QTextStream stream(&file);
    stream << content;

    const char* filen = file.fileName().toStdString().c_str();

    CXIndex index = clang_createIndex(0, 0);

    const char* args[] = {"-x", "c++" };
    qDebug() << filen;

    CXTranslationUnit tu = NULL;
    CXErrorCode err = clang_parseTranslationUnit2(index, filen, args, 2, NULL, 0, CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete, &tu );
    qDebug() << filen;
    if (err != 0){
        qDebug() << err;
        return lst;
    }

    // some things ....
}

しかし、うまくいきません。出力にエラー コード = 1 が表示されます (libclang ドキュメントの Unknow Error)。また、filenparse 関数を呼び出す前後で変更されます。例:

C:/Users/Yoann/AppData/Local/Temp/plugin-test.Ns4152

C:\Dev\Qt\Qt5.5.0\Tools\mingw492_32\include\c++\4.9.2

ありがとう、

4

1 に答える 1

0

parseTranslationUnitの代わりに使用して解決しますparseTranslationUnit2

CXTranslationUnit tu = clang_parseTranslationUnit(index, file.fileName().toStdString().c_str(), args, 3, NULL, 0, CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete);
if (tu == NULL){
  return lst;
}
于 2015-09-17T17:41:05.063 に答える