diff options
author | Marco Bubke <marco.bubke@qt.io> | 2017-07-03 12:35:58 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2017-07-20 13:32:39 +0000 |
commit | a31eae4d0ad1ffd5a06cd5beff9e16473f929615 (patch) | |
tree | fa0ed3976b9c6822fe24a05346f980a5bd8f3026 /src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp | |
parent | 8c4127ebacd0508f12db79689ef976a814729d91 (diff) |
Clang: Add clang query pane
We now support highlighting for an example text and for the query.
Change-Id: I88c415ff871cf3e4c2d4fc83d60a8555bf0ce08a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp')
-rw-r--r-- | src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp | 94 |
1 files changed, 75 insertions, 19 deletions
diff --git a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp index e22bc7e2ad6..2289746db34 100644 --- a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp +++ b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp @@ -30,20 +30,23 @@ #include "searchinterface.h" #include <refactoringserverinterface.h> -#include <requestsourcerangesanddiagnosticsforquerymessage.h> +#include <clangrefactoringservermessages.h> #include <cpptools/clangcompileroptionsbuilder.h> +#include <QPointer> + namespace ClangRefactoring { ClangQueryProjectsFindFilter::ClangQueryProjectsFindFilter( ClangBackEnd::RefactoringServerInterface &server, SearchInterface &searchInterface, RefactoringClient &refactoringClient) - : server(server), - searchInterface(searchInterface), - refactoringClient(refactoringClient) + : m_server(server), + m_searchInterface(searchInterface), + m_refactoringClient(refactoringClient) { + temporaryFile.open(); } QString ClangQueryProjectsFindFilter::id() const @@ -61,19 +64,57 @@ bool ClangQueryProjectsFindFilter::isEnabled() const return true; } -void ClangQueryProjectsFindFilter::findAll(const QString &queryText, Core::FindFlags) +namespace { +Utils::SmallString toNative(const QString &path) { - searchHandle = searchInterface.startNewSearch(tr("Clang Query"), queryText); + Utils::SmallString nativePath = path; + +#ifdef Q_OS_WIN + nativePath.replace('/', '\\'); +#endif + + return nativePath; +} +} - searchHandle->setRefactoringServer(&server); +void ClangQueryProjectsFindFilter::requestSourceRangesAndDiagnostics(const QString &queryText, + const QString &exampleContent) +{ + const QString filePath = temporaryFile.fileName(); - refactoringClient.setSearchHandle(searchHandle.get()); + ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage message(queryText, + {ClangBackEnd::FilePath(filePath), + exampleContent, + {"cc", toNative(filePath)}}); + + m_server.requestSourceRangesAndDiagnosticsForQueryMessage(std::move(message)); +} + +SearchHandle *ClangQueryProjectsFindFilter::find(const QString &queryText) +{ + m_searchHandle = m_searchInterface.startNewSearch(tr("Clang Query"), queryText); + + m_searchHandle->setRefactoringServer(&m_server); + + m_refactoringClient.setSearchHandle(m_searchHandle.get()); auto message = createMessage(queryText); - refactoringClient.setExpectedResultCount(uint(message.sources().size())); + m_refactoringClient.setExpectedResultCount(uint(message.sources().size())); + + m_server.requestSourceRangesForQueryMessage(std::move(message)); - server.requestSourceRangesAndDiagnosticsForQueryMessage(std::move(message)); + return m_searchHandle.get(); +} + +void ClangQueryProjectsFindFilter::findAll(const QString &, Core::FindFlags) +{ + find(queryText()); +} + +bool ClangQueryProjectsFindFilter::showSearchTermInput() const +{ + return false; } Core::FindFlags ClangQueryProjectsFindFilter::supportedFindFlags() const @@ -83,28 +124,28 @@ Core::FindFlags ClangQueryProjectsFindFilter::supportedFindFlags() const void ClangQueryProjectsFindFilter::setProjectParts(const std::vector<CppTools::ProjectPart::Ptr> &projectParts) { - this->projectParts = projectParts; + this->m_projectParts = projectParts; } bool ClangQueryProjectsFindFilter::isUsable() const { - return server.isUsable(); + return m_server.isUsable(); } void ClangQueryProjectsFindFilter::setUsable(bool isUsable) { - server.setUsable(isUsable); + m_server.setUsable(isUsable); } SearchHandle *ClangQueryProjectsFindFilter::searchHandleForTestOnly() const { - return searchHandle.get(); + return m_searchHandle.get(); } void ClangQueryProjectsFindFilter::setUnsavedContent( std::vector<ClangBackEnd::V2::FileContainer> &&unsavedContent) { - this->unsavedContent = std::move(unsavedContent); + this->m_unsavedContent = std::move(unsavedContent); } Utils::SmallStringVector ClangQueryProjectsFindFilter::compilerArguments(CppTools::ProjectPart *projectPart, @@ -141,6 +182,11 @@ Utils::SmallStringVector ClangQueryProjectsFindFilter::compilerArguments(CppTool return Utils::SmallStringVector(builder.options()); } +QWidget *ClangQueryProjectsFindFilter::widget() const +{ + return nullptr; +} + namespace { Utils::SmallStringVector createCommandLine(CppTools::ProjectPart *projectPart, @@ -205,12 +251,22 @@ createSources(const std::vector<CppTools::ProjectPart::Ptr> &projectParts, } -ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage ClangQueryProjectsFindFilter::createMessage(const QString &queryText) const +ClangBackEnd::RequestSourceRangesForQueryMessage ClangQueryProjectsFindFilter::createMessage(const QString &queryText) const { - return ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage( + return ClangBackEnd::RequestSourceRangesForQueryMessage( Utils::SmallString(queryText), - createSources(projectParts, unsavedContent), - Utils::clone(unsavedContent)); + createSources(m_projectParts, m_unsavedContent), + Utils::clone(m_unsavedContent)); +} + +QString ClangQueryProjectsFindFilter::queryText() const +{ + return QString(); +} + +RefactoringClient &ClangQueryProjectsFindFilter::refactoringClient() +{ + return m_refactoringClient; } |