diff options
author | Marco Bubke <marco.bubke@qt.io> | 2017-11-23 14:30:09 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2018-01-17 12:22:30 +0000 |
commit | e0ea602f6cd3c3289722cd6b22ca2ba02eefc846 (patch) | |
tree | 6040ac23abfb9454cd877fdd653e90b23f000f2a /src | |
parent | 7666db896d093e450c18f6a6f12d7fa289fb789b (diff) | |
download | qt-creator-e0ea602f6cd3c3289722cd6b22ca2ba02eefc846.tar.gz |
Clang: Use LineColumn instead of explicit integers for line and column
With OptionalLineColumn we don't need any bool return parameter any more.
Change-Id: I6f57f221c1bfdf08a92a87a7d71ea0eecf83dbcf
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/utils/linecolumn.h | 13 | ||||
-rw-r--r-- | src/libs/utils/textutils.cpp | 12 | ||||
-rw-r--r-- | src/libs/utils/textutils.h | 3 | ||||
-rw-r--r-- | src/plugins/clangrefactoring/refactoringengine.cpp | 17 |
4 files changed, 35 insertions, 10 deletions
diff --git a/src/libs/utils/linecolumn.h b/src/libs/utils/linecolumn.h index d63775c8e7..20da4c7f06 100644 --- a/src/libs/utils/linecolumn.h +++ b/src/libs/utils/linecolumn.h @@ -25,6 +25,10 @@ #pragma once +#include "optional.h" + +namespace Utils { + class LineColumn { public: @@ -34,11 +38,10 @@ public: column(column) {} - bool isValid() const - { - return line >= 0 && column >= 0; - } - int line = -1; int column = -1; }; + +using OptionalLineColumn = optional<LineColumn>; + +} // namespace Utils diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp index 65b7093c5a..c42f84166f 100644 --- a/src/libs/utils/textutils.cpp +++ b/src/libs/utils/textutils.cpp @@ -46,6 +46,18 @@ bool convertPosition(const QTextDocument *document, int pos, int *line, int *col } } +Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos) +{ + Utils::OptionalLineColumn optional; + + QTextBlock block = document->findBlock(pos); + + if (block.isValid()) + optional.emplace(block.blockNumber() + 1, pos - block.position()); + + return optional; +} + QString textAt(QTextCursor tc, int pos, int length) { if (pos < 0) diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h index 9e81884271..f0143165eb 100644 --- a/src/libs/utils/textutils.h +++ b/src/libs/utils/textutils.h @@ -25,6 +25,7 @@ #pragma once +#include "linecolumn.h" #include "utils_global.h" #include <QString> @@ -39,6 +40,8 @@ namespace Text { QTCREATOR_UTILS_EXPORT bool convertPosition(const QTextDocument *document, int pos, int *line, int *column); +QTCREATOR_UTILS_EXPORT +Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos); QTCREATOR_UTILS_EXPORT QString textAt(QTextCursor tc, int pos, int length); diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp index 75f79a7a2b..7c69cfc9d1 100644 --- a/src/plugins/clangrefactoring/refactoringengine.cpp +++ b/src/plugins/clangrefactoring/refactoringengine.cpp @@ -94,13 +94,20 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data, CppTools::Usages RefactoringEngine::locationsAt(const CppTools::CursorInEditor &data) const { - int line = 0, column = 0; + CppTools::Usages usages; + QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor()); - Utils::Text::convertPosition(cursor.document(), cursor.position(), &line, &column); + Utils::OptionalLineColumn lineColumn = Utils::Text::convertPosition(cursor.document(), + cursor.position()); + + if (lineColumn) { + const QByteArray filePath = data.filePath().toString().toUtf8(); + const ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(ClangBackEnd::FilePathView(filePath)); + + usages = m_symbolQuery.sourceUsagesAt(filePathId, lineColumn->line, lineColumn->column + 1); + } - const QByteArray filePath = data.filePath().toString().toUtf8(); - const ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(ClangBackEnd::FilePathView(filePath)); - return m_symbolQuery.sourceUsagesAt(filePathId, line, column + 1); + return usages; } void RefactoringEngine::globalRename(const CppTools::CursorInEditor &data, |