forked from qt-creator/qt-creator
ClangCodeModel: Fix highlighting problem with template types
With clangd, we mis-detected variables of template types as output parameters in certain contexts. Change-Id: I906abd489f987351793f4ef676e4af59cdfdbf97 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -252,6 +252,16 @@ public:
|
|||||||
QString theType = type();
|
QString theType = type();
|
||||||
if (theType.endsWith("const"))
|
if (theType.endsWith("const"))
|
||||||
theType.chop(5);
|
theType.chop(5);
|
||||||
|
|
||||||
|
// We don't care about the "inner" type of templates.
|
||||||
|
const int openAngleBracketPos = theType.indexOf('<');
|
||||||
|
if (openAngleBracketPos != -1) {
|
||||||
|
const int closingAngleBracketPos = theType.lastIndexOf('>');
|
||||||
|
if (closingAngleBracketPos > openAngleBracketPos) {
|
||||||
|
theType = theType.left(openAngleBracketPos)
|
||||||
|
+ theType.mid(closingAngleBracketPos + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
const int xrefCount = theType.count("&&");
|
const int xrefCount = theType.count("&&");
|
||||||
const int refCount = theType.count('&') - 2 * xrefCount;
|
const int refCount = theType.count('&') - 2 * xrefCount;
|
||||||
const int ptrRefCount = theType.count('*') + refCount;
|
const int ptrRefCount = theType.count('*') + refCount;
|
||||||
|
@@ -1249,6 +1249,7 @@ void ClangdTestHighlighting::test_data()
|
|||||||
QTest::newRow("const argument to unnamed lambda") << 830 << 16 << 830 << 19
|
QTest::newRow("const argument to unnamed lambda") << 830 << 16 << 830 << 19
|
||||||
<< QList<int>{C_LOCAL} << 0;
|
<< QList<int>{C_LOCAL} << 0;
|
||||||
QTest::newRow("simple assignment") << 835 << 5 << 835 << 6 << QList<int>{C_LOCAL} << 0;
|
QTest::newRow("simple assignment") << 835 << 5 << 835 << 6 << QList<int>{C_LOCAL} << 0;
|
||||||
|
QTest::newRow("simple return") << 841 << 12 << 841 << 15 << QList<int>{C_LOCAL} << 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangdTestHighlighting::test()
|
void ClangdTestHighlighting::test()
|
||||||
|
@@ -834,3 +834,9 @@ void assignmentTest() {
|
|||||||
struct S {} s;
|
struct S {} s;
|
||||||
s = {};
|
s = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using FooPtrVector = std::vector<Foo *>;
|
||||||
|
FooPtrVector returnTest() {
|
||||||
|
FooPtrVector foo;
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user