diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2023-07-10 12:58:26 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2023-08-08 07:33:41 +0000 |
commit | f93836b25d57fed5888b1376e1e1b2d084fcb98d (patch) | |
tree | 764d7dfd66a13aa5cf758da24619f4b17e032788 /src/libs/3rdparty/cplusplus | |
parent | d201899a0a8de506af3db9d576e10e848df3ebdf (diff) |
CppEditor: Add quickfix for converting comments from C++ to C style
... and vice versa.
Fixes: QTCREATORBUG-27501
Change-Id: I8584cc1e86718b3fe0f0ead2a3436495303ca3c8
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/libs/3rdparty/cplusplus')
-rw-r--r-- | src/libs/3rdparty/cplusplus/TranslationUnit.cpp | 73 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/TranslationUnit.h | 11 |
2 files changed, 76 insertions, 8 deletions
diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp index d5c7a5fc9b..848f61285c 100644 --- a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp +++ b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp @@ -105,6 +105,35 @@ int TranslationUnit::commentCount() const const Token &TranslationUnit::commentAt(int index) const { return _comments->at(index); } +std::vector<Token> TranslationUnit::allTokens() const +{ + std::vector<Token> all; + int tokIndex = 0; + int commentIndex = 0; + while (true) { + if (tokIndex == tokenCount()) { + for (int i = commentIndex; i < commentCount(); ++i) + all.push_back(commentAt(i)); + break; + } + if (commentIndex == commentCount()) { + for (int i = tokIndex; i < tokenCount(); ++i) + all.push_back(tokenAt(i)); + break; + } + const Token &tok = tokenAt(tokIndex); + const Token &comment = commentAt(commentIndex); + if (tok.utf16charsBegin() < comment.utf16charsBegin()) { + all.push_back(tok); + ++tokIndex; + } else { + all.push_back(comment); + ++commentIndex; + } + } + return all; +} + const Identifier *TranslationUnit::identifier(int index) const { return tokenAt(index).identifier; } @@ -381,27 +410,55 @@ int TranslationUnit::findColumnNumber(int utf16CharOffset, int lineNumber) const int TranslationUnit::getTokenPositionInDocument(int index, const QTextDocument *doc) const { - int line, column; - getTokenPosition(index, &line, &column); - return Utils::Text::positionInText(doc, line, column); + return getTokenPositionInDocument(_tokens->at(index), doc); } int TranslationUnit::getTokenEndPositionInDocument(int index, const QTextDocument *doc) const { - int line, column; - getTokenEndPosition(index, &line, &column); - return Utils::Text::positionInText(doc, line, column); + return getTokenEndPositionInDocument(_tokens->at(index), doc); } void TranslationUnit::getTokenPosition(int index, int *line, int *column, const StringLiteral **fileName) const -{ return getPosition(tokenAt(index).utf16charsBegin(), line, column, fileName); } +{ + return getTokenPosition(_tokens->at(index), line, column, fileName); +} void TranslationUnit::getTokenEndPosition(int index, int *line, int *column, const StringLiteral **fileName) const -{ return getPosition(tokenAt(index).utf16charsEnd(), line, column, fileName); } +{ + return getTokenEndPosition(_tokens->at(index), line, column, fileName); +} + +void TranslationUnit::getTokenPosition(const Token &token, int *line, int *column, + const StringLiteral **fileName) const +{ + return getPosition(token.utf16charsBegin(), line, column, fileName); +} + +void TranslationUnit::getTokenEndPosition(const Token &token, int *line, + int *column, const StringLiteral **fileName) const +{ + return getPosition(token.utf16charsEnd(), line, column, fileName); +} + +int TranslationUnit::getTokenPositionInDocument(const Token token, + const QTextDocument *doc) const +{ + int line, column; + getTokenPosition(token, &line, &column); + return Utils::Text::positionInText(doc, line, column); +} + +int TranslationUnit::getTokenEndPositionInDocument(const Token &token, + const QTextDocument *doc) const +{ + int line, column; + getTokenEndPosition(token, &line, &column); + return Utils::Text::positionInText(doc, line, column); +} void TranslationUnit::getPosition(int utf16charOffset, int *line, diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.h b/src/libs/3rdparty/cplusplus/TranslationUnit.h index 9ae01755fb..40f79d0091 100644 --- a/src/libs/3rdparty/cplusplus/TranslationUnit.h +++ b/src/libs/3rdparty/cplusplus/TranslationUnit.h @@ -65,6 +65,9 @@ public: int commentCount() const; const Token &commentAt(int index) const; + // Including comments. + std::vector<Token> allTokens() const; + int matchingBrace(int index) const; const Identifier *identifier(int index) const; const Literal *literal(int index) const; @@ -120,9 +123,17 @@ public: int *line, int *column = nullptr, const StringLiteral **fileName = nullptr) const; + int getTokenPositionInDocument(int index, const QTextDocument *doc) const; int getTokenEndPositionInDocument(int index, const QTextDocument *doc) const; + void getTokenPosition(const Token &token, int *line, int *column = nullptr, + const StringLiteral **fileName = nullptr) const; + void getTokenEndPosition(const Token &token, int *line, int *column = nullptr, + const StringLiteral **fileName = nullptr) const; + int getTokenPositionInDocument(const Token token, const QTextDocument *doc) const; + int getTokenEndPositionInDocument(const Token &token, const QTextDocument *doc) const; + void pushLineOffset(int offset); void pushPreprocessorLine(int utf16charOffset, int line, |