mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-22 15:45:08 +00:00
Add --clang-sanity-check.
Does a simple index test to verify expected libclang API behavior.
This commit is contained in:
parent
2a2794da23
commit
066166ba40
@ -3227,6 +3227,11 @@ int main(int argc, char** argv) {
|
||||
|
||||
bool print_help = true;
|
||||
|
||||
if (HasOption(options, "--clang-sanity-check")) {
|
||||
print_help = false;
|
||||
ClangSanityCheck();
|
||||
}
|
||||
|
||||
if (HasOption(options, "--log-stdin-stdout-to-stderr"))
|
||||
g_log_stdin_stdout_to_stderr = true;
|
||||
|
||||
@ -3272,6 +3277,9 @@ int main(int argc, char** argv) {
|
||||
Print stdin and stdout messages to stderr. This is a aid for
|
||||
developing new language clients, as it makes it easier to
|
||||
figure out how the client is interacting with cquery.
|
||||
--clang-sanity-check
|
||||
Run a simple index test. Verifies basic clang functionality.
|
||||
Needs to be executed from the cquery root checkout directory.
|
||||
|
||||
Configuration:
|
||||
When opening up a directory, cquery will look for a compile_commands.json
|
||||
|
@ -1716,3 +1716,53 @@ void IndexInit() {
|
||||
clang_enableStackTraces();
|
||||
clang_toggleCrashRecovery(1);
|
||||
}
|
||||
|
||||
void ClangSanityCheck() {
|
||||
std::vector<const char*> args = {"clang", "tests/vars/class_member.cc"};
|
||||
unsigned opts = 0;
|
||||
CXIndex index = clang_createIndex(0, 1);
|
||||
CXTranslationUnit tu;
|
||||
clang_parseTranslationUnit2FullArgv(index, nullptr, args.data(), args.size(),
|
||||
nullptr, 0, opts, &tu);
|
||||
assert(tu);
|
||||
|
||||
IndexerCallbacks callback = {0};
|
||||
callback.abortQuery = [](CXClientData client_data, void* reserved) {
|
||||
return 0;
|
||||
};
|
||||
callback.diagnostic = [](CXClientData client_data,
|
||||
CXDiagnosticSet diagnostics, void* reserved) {};
|
||||
callback.enteredMainFile = [](CXClientData client_data, CXFile mainFile,
|
||||
void* reserved) -> CXIdxClientFile {
|
||||
return nullptr;
|
||||
};
|
||||
callback.ppIncludedFile =
|
||||
[](CXClientData client_data,
|
||||
const CXIdxIncludedFileInfo* file) -> CXIdxClientFile {
|
||||
return nullptr;
|
||||
};
|
||||
callback.importedASTFile =
|
||||
[](CXClientData client_data,
|
||||
const CXIdxImportedASTFileInfo*) -> CXIdxClientASTFile {
|
||||
return nullptr;
|
||||
};
|
||||
callback.startedTranslationUnit = [](CXClientData client_data,
|
||||
void* reserved) -> CXIdxClientContainer {
|
||||
return nullptr;
|
||||
};
|
||||
callback.indexDeclaration = [](CXClientData client_data,
|
||||
const CXIdxDeclInfo* decl) {};
|
||||
callback.indexEntityReference = [](CXClientData client_data,
|
||||
const CXIdxEntityRefInfo* ref) {};
|
||||
|
||||
const unsigned kIndexOpts = 0;
|
||||
CXIndexAction index_action = clang_IndexAction_create(index);
|
||||
int index_param = 0;
|
||||
clang_toggleCrashRecovery(0);
|
||||
clang_indexTranslationUnit(index_action, &index_param, &callback,
|
||||
sizeof(IndexerCallbacks), kIndexOpts, tu);
|
||||
clang_IndexAction_dispose(index_action);
|
||||
|
||||
clang_disposeTranslationUnit(tu);
|
||||
clang_disposeIndex(index);
|
||||
}
|
||||
|
@ -555,3 +555,5 @@ std::vector<std::unique_ptr<IndexFile>> ParseWithTu(
|
||||
const std::vector<CXUnsavedFile>& file_contents);
|
||||
|
||||
void IndexInit();
|
||||
|
||||
void ClangSanityCheck();
|
||||
|
Loading…
Reference in New Issue
Block a user