diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2022-04-05 12:57:17 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2022-04-05 12:58:39 +0000 |
commit | b8144e0c51259994ea88bd1302776fced19a4755 (patch) | |
tree | 1c897e4fe3f700731be61871deda3bdcad4bf964 | |
parent | 00df4c66754db2082d92ccf5c594a7b072fa46e6 (diff) | |
download | qt-creator-b8144e0c51259994ea88bd1302776fced19a4755.tar.gz |
CppEditor: Use trailing return type when moving function definition
... if the original definition also used a trailing return type.
Task-number: QTCREATORBUG-27132
Change-Id: Iaeeeac08601f1d931aabe12be9f89ca0240d97a2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
-rw-r--r-- | src/libs/cplusplus/Overview.cpp | 1 | ||||
-rw-r--r-- | src/libs/cplusplus/Overview.h | 1 | ||||
-rw-r--r-- | src/libs/cplusplus/TypePrettyPrinter.cpp | 22 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfix_test.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.cpp | 7 |
5 files changed, 27 insertions, 6 deletions
diff --git a/src/libs/cplusplus/Overview.cpp b/src/libs/cplusplus/Overview.cpp index 7303791b06..02288d94cd 100644 --- a/src/libs/cplusplus/Overview.cpp +++ b/src/libs/cplusplus/Overview.cpp @@ -86,6 +86,7 @@ Overview::Overview() showTemplateParameters(false), showEnclosingTemplate(false), includeWhiteSpaceInOperatorName(true), + trailingReturnType(false), markedArgument(0), markedArgumentBegin(0), markedArgumentEnd(0) diff --git a/src/libs/cplusplus/Overview.h b/src/libs/cplusplus/Overview.h index 243390cd8a..d12daa581f 100644 --- a/src/libs/cplusplus/Overview.h +++ b/src/libs/cplusplus/Overview.h @@ -69,6 +69,7 @@ public: bool showTemplateParameters: 1; bool showEnclosingTemplate: 1; bool includeWhiteSpaceInOperatorName: 1; /// "operator =()" vs "operator=()" + bool trailingReturnType: 1; int markedArgument; int markedArgumentBegin; diff --git a/src/libs/cplusplus/TypePrettyPrinter.cpp b/src/libs/cplusplus/TypePrettyPrinter.cpp index d766a3f03b..b184e2a1e1 100644 --- a/src/libs/cplusplus/TypePrettyPrinter.cpp +++ b/src/libs/cplusplus/TypePrettyPrinter.cpp @@ -435,11 +435,17 @@ void TypePrettyPrinter::visit(Function *type) retAndArgOverview.showTemplateParameters = true; if (_overview->showReturnTypes) { - const QString returnType = retAndArgOverview.prettyType(type->returnType()); - if (!returnType.isEmpty()) { - if (!endsWithPtrOrRef(returnType) || !(_overview->starBindFlags & Overview::BindToIdentifier)) - _text.prepend(QLatin1Char(' ')); - _text.prepend(returnType); + if (_overview->trailingReturnType) { + _text.prepend("auto "); + } else { + const QString returnType = retAndArgOverview.prettyType(type->returnType()); + if (!returnType.isEmpty()) { + if (!endsWithPtrOrRef(returnType) + || !(_overview->starBindFlags & Overview::BindToIdentifier)) { + _text.prepend(QLatin1Char(' ')); + } + _text.prepend(returnType); + } } } @@ -529,6 +535,12 @@ void TypePrettyPrinter::visit(Function *type) _text += QLatin1String(spec->chars()); } } + + if (_overview->showReturnTypes && _overview->trailingReturnType) { + const QString returnType = retAndArgOverview.prettyType(type->returnType()); + if (!returnType.isEmpty()) + _text.append(" -> ").append(returnType); + } } void TypePrettyPrinter::appendSpace() diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 93845b51c8..c0ee38d6e2 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -6137,7 +6137,7 @@ struct Derived : public Base { original = "#include \"file.h\"\n"; expected = R"DELIM(#include "file.h" -void Derived::func() const &&noexcept {} +auto Derived::func() const &&noexcept -> void {} )DELIM"; testDocuments << CppTestDocument::create("file.cpp", original, expected); diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 7afc867297..6ed9736f3e 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -6234,6 +6234,13 @@ QString definitionSignature(const CppQuickFixInterface *assist, oo.showArgumentNames = true; oo.showEnclosingTemplate = true; oo.showTemplateParameters = true; + oo.trailingReturnType = functionDefinitionAST->declarator + && functionDefinitionAST->declarator->postfix_declarator_list + && functionDefinitionAST->declarator->postfix_declarator_list->value + && functionDefinitionAST->declarator->postfix_declarator_list + ->value->asFunctionDeclarator() + && functionDefinitionAST->declarator->postfix_declarator_list + ->value->asFunctionDeclarator()->trailing_return_type; const Name *name = func->name(); if (name && nameIncludesOperatorName(name)) { CoreDeclaratorAST *coreDeclarator = functionDefinitionAST->declarator->core_declarator; |