SilverSearcherPlugin: add possibility to set additional search options

Change-Id: Ia6dd11e4c7b68dba16e42fd80d1ac9878fafc220
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Przemyslaw Gorszkowski
2018-10-28 20:54:40 +01:00
parent d0756657f4
commit 0d43ce1373
2 changed files with 41 additions and 10 deletions

View File

@@ -35,9 +35,11 @@
#include "silversearcheroutputparser.h" #include "silversearcheroutputparser.h"
#include <QProcess>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QLineEdit>
#include <QProcess>
#include <QSettings>
using namespace Core; using namespace Core;
using namespace TextEditor; using namespace TextEditor;
@@ -50,6 +52,14 @@ using FutureInterfaceType = QFutureInterface<FileSearchResultList>;
const QString metacharacters = "+()^$.{}[]|\\"; const QString metacharacters = "+()^$.{}[]|\\";
const QString SearchOptionsString = "SearchOptionsString";
class SilverSearcherSearchOptions
{
public:
QString searchOptions;
};
QString convertWildcardToRegex(const QString &wildcard) QString convertWildcardToRegex(const QString &wildcard)
{ {
QString regex; QString regex;
@@ -112,6 +122,11 @@ void runSilverSeacher(FutureInterfaceType &fi, FileFindParameters parameters)
arguments << "-G" << nameFiltersAsRegex; arguments << "-G" << nameFiltersAsRegex;
SilverSearcherSearchOptions params = parameters.searchEngineParameters
.value<SilverSearcherSearchOptions>();
if (!params.searchOptions.isEmpty())
arguments << params.searchOptions.split(' ');
const FileName path = FileName::fromUserInput(FileUtils::normalizePathName(directory)); const FileName path = FileName::fromUserInput(FileUtils::normalizePathName(directory));
arguments << "--" << parameters.text << path.toString(); arguments << "--" << parameters.text << path.toString();
@@ -121,9 +136,10 @@ void runSilverSeacher(FutureInterfaceType &fi, FileFindParameters parameters)
typedef QList<FileSearchResult> FileSearchResultList; typedef QList<FileSearchResult> FileSearchResultList;
QRegularExpression regexp; QRegularExpression regexp;
if (parameters.flags & FindRegularExpression) { if (parameters.flags & FindRegularExpression) {
const QRegularExpression::PatternOptions patternOptions = const QRegularExpression::PatternOptions patternOptions
(parameters.flags & FindCaseSensitively) = (parameters.flags & FindCaseSensitively)
? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption; ? QRegularExpression::NoPatternOption
: QRegularExpression::CaseInsensitiveOption;
regexp.setPattern(parameters.text); regexp.setPattern(parameters.text);
regexp.setPatternOptions(patternOptions); regexp.setPatternOptions(patternOptions);
} }
@@ -138,14 +154,22 @@ void runSilverSeacher(FutureInterfaceType &fi, FileFindParameters parameters)
} // namespace } // namespace
Q_DECLARE_METATYPE(SilverSearcherSearchOptions)
namespace SilverSearcher { namespace SilverSearcher {
FindInFilesSilverSearcher::FindInFilesSilverSearcher(QObject *parent) FindInFilesSilverSearcher::FindInFilesSilverSearcher(QObject *parent)
: SearchEngine(parent), : SearchEngine(parent)
m_path("ag"), , m_path("ag")
m_toolName("SilverSearcher") , m_toolName("SilverSearcher")
{ {
m_widget = new QWidget; m_widget = new QWidget;
auto layout = new QHBoxLayout(m_widget);
layout->setMargin(0);
m_searchOptionsLineEdit = new QLineEdit;
m_searchOptionsLineEdit->setPlaceholderText(tr("Search Options (optional)"));
layout->addWidget(m_searchOptionsLineEdit);
FindInFiles *findInFiles = FindInFiles::instance(); FindInFiles *findInFiles = FindInFiles::instance();
QTC_ASSERT(findInFiles, return); QTC_ASSERT(findInFiles, return);
findInFiles->addSearchEngine(this); findInFiles->addSearchEngine(this);
@@ -166,7 +190,9 @@ FindInFilesSilverSearcher::~FindInFilesSilverSearcher()
QVariant FindInFilesSilverSearcher::parameters() const QVariant FindInFilesSilverSearcher::parameters() const
{ {
return QVariant(); SilverSearcherSearchOptions silverSearcherSearchOptions;
silverSearcherSearchOptions.searchOptions = m_searchOptionsLineEdit->text();
return qVariantFromValue(silverSearcherSearchOptions);
} }
QString FindInFilesSilverSearcher::title() const QString FindInFilesSilverSearcher::title() const
@@ -184,8 +210,9 @@ QWidget *FindInFilesSilverSearcher::widget() const
return m_widget; return m_widget;
} }
void FindInFilesSilverSearcher::writeSettings(QSettings * /*settings*/) const void FindInFilesSilverSearcher::writeSettings(QSettings *settings) const
{ {
settings->setValue(SearchOptionsString, m_searchOptionsLineEdit->text());
} }
QFuture<FileSearchResultList> FindInFilesSilverSearcher::executeSearch( QFuture<FileSearchResultList> FindInFilesSilverSearcher::executeSearch(
@@ -200,8 +227,9 @@ IEditor *FindInFilesSilverSearcher::openEditor(const SearchResultItem & /*item*/
return nullptr; return nullptr;
} }
void FindInFilesSilverSearcher::readSettings(QSettings * /*settings*/) void FindInFilesSilverSearcher::readSettings(QSettings *settings)
{ {
m_searchOptionsLineEdit->setText(settings->value(SearchOptionsString).toString());
} }
} // namespace SilverSearcher } // namespace SilverSearcher

View File

@@ -32,6 +32,8 @@
#include <QPointer> #include <QPointer>
class QLineEdit;
namespace SilverSearcher { namespace SilverSearcher {
class FindInFilesSilverSearcher : public TextEditor::SearchEngine class FindInFilesSilverSearcher : public TextEditor::SearchEngine
@@ -59,6 +61,7 @@ private:
Utils::FileName m_directorySetting; Utils::FileName m_directorySetting;
QPointer<QWidget> m_widget; QPointer<QWidget> m_widget;
QPointer<QLineEdit> m_searchOptionsLineEdit;
QString m_path; QString m_path;
QString m_toolName; QString m_toolName;
}; };