Clang: Add clang query

Clang query is mechanism to use AST matcher to search for code. Think
about regular expression but in the context of AST. So you get a semantic
search tool for C++.

Change-Id: I72e882c5b53a0c52f352a3664847c4c3e4f6fc2e
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2016-11-15 15:38:12 +01:00
parent 96187594b5
commit 9c7ff5199f
99 changed files with 4603 additions and 246 deletions

View File

@@ -32,7 +32,9 @@
#include <refactoringclientproxy.h>
#include <refactoringserverproxy.h>
#include <sourcelocationsforrenamingmessage.h>
#include <sourcerangesanddiagnosticsforquerymessage.h>
#include <requestsourcelocationforrenamingmessage.h>
#include <requestsourcerangesanddiagnosticsforquerymessage.h>
#include <QBuffer>
#include <QString>
@@ -101,7 +103,7 @@ TEST_F(RefactoringClientServerInProcess, SendSourceLocationsForRenamingMessage)
TEST_F(RefactoringClientServerInProcess, SendRequestSourceLocationsForRenamingMessage)
{
RequestSourceLocationsForRenamingMessage message{{"/home/marco/dev/qt-creator/tests/unit/unittest/data", "renamevariable.cpp"},
RequestSourceLocationsForRenamingMessage message{{TESTDATA_DIR, "renamevariable.cpp"},
1,
5,
"int v;\n\nint x = v + 3;\n",
@@ -115,6 +117,35 @@ TEST_F(RefactoringClientServerInProcess, SendRequestSourceLocationsForRenamingMe
scheduleServerMessages();
}
TEST_F(RefactoringClientServerInProcess, SourceRangesAndDiagnosticsForQueryMessage)
{
ClangBackEnd::SourceRangesContainer sourceRangesContainer;
std::vector<ClangBackEnd::DynamicASTMatcherDiagnosticContainer> diagnosticContainers;
ClangBackEnd::SourceRangesAndDiagnosticsForQueryMessage message(std::move(sourceRangesContainer),
std::move(diagnosticContainers));
EXPECT_CALL(mockRefactoringClient, sourceRangesAndDiagnosticsForQueryMessage(message))
.Times(1);
clientProxy.sourceRangesAndDiagnosticsForQueryMessage(message.clone());
scheduleClientMessages();
}
TEST_F(RefactoringClientServerInProcess, RequestSourceRangesAndDiagnosticsForQueryMessage)
{
RequestSourceRangesAndDiagnosticsForQueryMessage message{"functionDecl()",
{{{TESTDATA_DIR, "query_simplefunction.cpp"},
"void f();",
{"cc", "query_simplefunction.cpp"},
1}}};
EXPECT_CALL(mockRefactoringServer, requestSourceRangesAndDiagnosticsForQueryMessage(message))
.Times(1);
serverProxy.requestSourceRangesAndDiagnosticsForQueryMessage(message.clone());
scheduleServerMessages();
}
RefactoringClientServerInProcess::RefactoringClientServerInProcess()
: serverProxy(&mockRefactoringClient, &buffer),
clientProxy(&mockRefactoringServer, &buffer)