logic: Fixed SearchMatch sorting not updated after rescoring
* also ignore template section in SearchMatch sorting
This commit is contained in:
@@ -1346,7 +1346,11 @@ void GraphController::layoutToGrid(DummyNode* node) const
|
|||||||
if (lastAccessNode)
|
if (lastAccessNode)
|
||||||
{
|
{
|
||||||
lastAccessNode->size.y = lastAccessNode->size.y + incY;
|
lastAccessNode->size.y = lastAccessNode->size.y + incY;
|
||||||
expandToggleNode->position.x = expandToggleNode->position.x + incX;
|
|
||||||
|
if (expandToggleNode)
|
||||||
|
{
|
||||||
|
expandToggleNode->position.x = expandToggleNode->position.x + incX;
|
||||||
|
}
|
||||||
|
|
||||||
node->size.x = width;
|
node->size.x = width;
|
||||||
node->size.y = height;
|
node->size.y = height;
|
||||||
|
|||||||
@@ -512,16 +512,14 @@ std::vector<SearchMatch> PersistentStorage::getAutocompletionMatches(const std::
|
|||||||
size_t maxBestScoredResultsLength = 100;
|
size_t maxBestScoredResultsLength = 100;
|
||||||
|
|
||||||
// create SearchMatches
|
// create SearchMatches
|
||||||
|
std::vector<SearchMatch> matches;
|
||||||
|
utility::append(matches, getAutocompletionSymbolMatches(query, maxResultsCount));
|
||||||
|
utility::append(matches, getAutocompletionFileMatches(query, 20));
|
||||||
|
utility::append(matches, getAutocompletionCommandMatches(query));
|
||||||
|
|
||||||
std::set<SearchMatch> matchesSet;
|
std::set<SearchMatch> matchesSet;
|
||||||
utility::append(matchesSet, getAutocompletionSymbolMatches(query, maxResultsCount));
|
for (SearchMatch& match : matches)
|
||||||
utility::append(matchesSet, getAutocompletionFileMatches(query, 20));
|
|
||||||
utility::append(matchesSet, getAutocompletionCommandMatches(query));
|
|
||||||
|
|
||||||
std::vector<SearchMatch> matches = utility::toVector(matchesSet);
|
|
||||||
|
|
||||||
for (auto it = matches.begin(); it != matches.end(); it++)
|
|
||||||
{
|
{
|
||||||
SearchMatch& match = *it;
|
|
||||||
// rescore match
|
// rescore match
|
||||||
if (!match.subtext.empty() && match.indices.size())
|
if (!match.subtext.empty() && match.indices.size())
|
||||||
{
|
{
|
||||||
@@ -531,8 +529,12 @@ std::vector<SearchMatch> PersistentStorage::getAutocompletionMatches(const std::
|
|||||||
match.score = newResult.score;
|
match.score = newResult.score;
|
||||||
match.indices = newResult.indices;
|
match.indices = newResult.indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
matchesSet.insert(match);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
matches = utility::toVector(matchesSet);
|
||||||
|
|
||||||
if (matches.size() > maxResultsCount)
|
if (matches.size() > maxResultsCount)
|
||||||
{
|
{
|
||||||
matches.resize(maxResultsCount);
|
matches.resize(maxResultsCount);
|
||||||
@@ -541,7 +543,7 @@ std::vector<SearchMatch> PersistentStorage::getAutocompletionMatches(const std::
|
|||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<SearchMatch> PersistentStorage::getAutocompletionSymbolMatches(const std::string& query, size_t maxResultsCount) const
|
std::vector<SearchMatch> PersistentStorage::getAutocompletionSymbolMatches(const std::string& query, size_t maxResultsCount) const
|
||||||
{
|
{
|
||||||
// search in indices
|
// search in indices
|
||||||
std::vector<SearchResult> results = m_symbolIndex.search(query, maxResultsCount, maxResultsCount);
|
std::vector<SearchResult> results = m_symbolIndex.search(query, maxResultsCount, maxResultsCount);
|
||||||
@@ -569,7 +571,7 @@ std::set<SearchMatch> PersistentStorage::getAutocompletionSymbolMatches(const st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create SearchMatches
|
// create SearchMatches
|
||||||
std::set<SearchMatch> matches;
|
std::vector<SearchMatch> matches;
|
||||||
for (const SearchResult& result : results)
|
for (const SearchResult& result : results)
|
||||||
{
|
{
|
||||||
SearchMatch match;
|
SearchMatch match;
|
||||||
@@ -614,18 +616,18 @@ std::set<SearchMatch> PersistentStorage::getAutocompletionSymbolMatches(const st
|
|||||||
match.typeName = "non-indexed " + match.typeName;
|
match.typeName = "non-indexed " + match.typeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
matches.insert(match);
|
matches.push_back(match);
|
||||||
}
|
}
|
||||||
|
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<SearchMatch> PersistentStorage::getAutocompletionFileMatches(const std::string& query, size_t maxResultsCount) const
|
std::vector<SearchMatch> PersistentStorage::getAutocompletionFileMatches(const std::string& query, size_t maxResultsCount) const
|
||||||
{
|
{
|
||||||
std::vector<SearchResult> results = m_fileIndex.search(query, maxResultsCount);
|
std::vector<SearchResult> results = m_fileIndex.search(query, maxResultsCount);
|
||||||
|
|
||||||
// create SearchMatches
|
// create SearchMatches
|
||||||
std::set<SearchMatch> matches;
|
std::vector<SearchMatch> matches;
|
||||||
for (const SearchResult& result : results)
|
for (const SearchResult& result : results)
|
||||||
{
|
{
|
||||||
SearchMatch match;
|
SearchMatch match;
|
||||||
@@ -646,19 +648,19 @@ std::set<SearchMatch> PersistentStorage::getAutocompletionFileMatches(const std:
|
|||||||
|
|
||||||
match.searchType = SearchMatch::SEARCH_TOKEN;
|
match.searchType = SearchMatch::SEARCH_TOKEN;
|
||||||
|
|
||||||
matches.insert(match);
|
matches.push_back(match);
|
||||||
}
|
}
|
||||||
|
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<SearchMatch> PersistentStorage::getAutocompletionCommandMatches(const std::string& query) const
|
std::vector<SearchMatch> PersistentStorage::getAutocompletionCommandMatches(const std::string& query) const
|
||||||
{
|
{
|
||||||
// search in indices
|
// search in indices
|
||||||
std::vector<SearchResult> results = m_commandIndex.search(query, 0);
|
std::vector<SearchResult> results = m_commandIndex.search(query, 0);
|
||||||
|
|
||||||
// create SearchMatches
|
// create SearchMatches
|
||||||
std::set<SearchMatch> matches;
|
std::vector<SearchMatch> matches;
|
||||||
for (const SearchResult& result : results)
|
for (const SearchResult& result : results)
|
||||||
{
|
{
|
||||||
SearchMatch match;
|
SearchMatch match;
|
||||||
@@ -671,7 +673,7 @@ std::set<SearchMatch> PersistentStorage::getAutocompletionCommandMatches(const s
|
|||||||
match.searchType = SearchMatch::SEARCH_COMMAND;
|
match.searchType = SearchMatch::SEARCH_COMMAND;
|
||||||
match.typeName = "command";
|
match.typeName = "command";
|
||||||
|
|
||||||
matches.insert(match);
|
matches.push_back(match);
|
||||||
}
|
}
|
||||||
|
|
||||||
return matches;
|
return matches;
|
||||||
|
|||||||
@@ -87,9 +87,9 @@ public:
|
|||||||
virtual std::shared_ptr<TokenLocationCollection> getFullTextSearchLocations(
|
virtual std::shared_ptr<TokenLocationCollection> getFullTextSearchLocations(
|
||||||
const std::string& searchTerm, bool caseSensitive) const;
|
const std::string& searchTerm, bool caseSensitive) const;
|
||||||
virtual std::vector<SearchMatch> getAutocompletionMatches(const std::string& query) const;
|
virtual std::vector<SearchMatch> getAutocompletionMatches(const std::string& query) const;
|
||||||
std::set<SearchMatch> getAutocompletionSymbolMatches(const std::string& query, size_t maxResultsCount) const;
|
std::vector<SearchMatch> getAutocompletionSymbolMatches(const std::string& query, size_t maxResultsCount) const;
|
||||||
std::set<SearchMatch> getAutocompletionFileMatches(const std::string& query, size_t maxResultsCount) const;
|
std::vector<SearchMatch> getAutocompletionFileMatches(const std::string& query, size_t maxResultsCount) const;
|
||||||
std::set<SearchMatch> getAutocompletionCommandMatches(const std::string& query) const;
|
std::vector<SearchMatch> getAutocompletionCommandMatches(const std::string& query) const;
|
||||||
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& elementIds) const;
|
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& elementIds) const;
|
||||||
|
|
||||||
virtual std::shared_ptr<Graph> getGraphForAll() const;
|
virtual std::shared_ptr<Graph> getGraphForAll() const;
|
||||||
|
|||||||
@@ -125,8 +125,19 @@ bool SearchMatch::operator<(const SearchMatch& other) const
|
|||||||
otherStr = &other.name;
|
otherStr = &other.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t size = getTextSizeForSorting(str);
|
||||||
|
size_t otherSize = other.getTextSizeForSorting(otherStr);
|
||||||
|
|
||||||
// text size
|
// text size
|
||||||
if (str->size() < otherStr->size())
|
if (size < otherSize)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (size > otherSize)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (str->size() < otherStr->size())
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -159,6 +170,18 @@ bool SearchMatch::operator<(const SearchMatch& other) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t SearchMatch::getTextSizeForSorting(const std::string* str) const
|
||||||
|
{
|
||||||
|
// check if templated symbol and only use size up to template stuff
|
||||||
|
size_t pos = str->find('<');
|
||||||
|
if (pos != std::string::npos)
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str->size();
|
||||||
|
}
|
||||||
|
|
||||||
bool SearchMatch::isValid() const
|
bool SearchMatch::isValid() const
|
||||||
{
|
{
|
||||||
return searchType != SEARCH_NONE;
|
return searchType != SEARCH_NONE;
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ struct SearchMatch
|
|||||||
|
|
||||||
bool operator<(const SearchMatch& other) const;
|
bool operator<(const SearchMatch& other) const;
|
||||||
|
|
||||||
|
size_t getTextSizeForSorting(const std::string* str) const;
|
||||||
|
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
|
|
||||||
void print(std::ostream& ostream) const;
|
void print(std::ostream& ostream) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user