summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2022-04-05 12:57:17 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2022-04-05 12:58:39 +0000
commitb8144e0c51259994ea88bd1302776fced19a4755 (patch)
tree1c897e4fe3f700731be61871deda3bdcad4bf964
parent00df4c66754db2082d92ccf5c594a7b072fa46e6 (diff)
downloadqt-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.cpp1
-rw-r--r--src/libs/cplusplus/Overview.h1
-rw-r--r--src/libs/cplusplus/TypePrettyPrinter.cpp22
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp2
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp7
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;