summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp2
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.cpp4
-rw-r--r--src/plugins/cppeditor/cppchecksymbols.cpp6
-rw-r--r--src/plugins/cppeditor/semantichighlighter.cpp6
-rw-r--r--src/plugins/cppeditor/semantichighlighter.h3
-rw-r--r--src/plugins/texteditor/texteditorconstants.cpp1
-rw-r--r--src/plugins/texteditor/texteditorconstants.h1
-rw-r--r--src/plugins/texteditor/texteditorsettings.cpp4
-rw-r--r--src/plugins/texteditor/textstyles.h10
-rw-r--r--tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp33
10 files changed, 50 insertions, 20 deletions
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 0c6b16e2bc..73dfe21a8d 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -2463,6 +2463,8 @@ static void semanticHighlighter(QFutureInterface<HighlightingResult> &future,
}
if (token.modifiers.contains("declaration"))
styles.mixinStyles.push_back(C_DECLARATION);
+ if (token.modifiers.contains("static"))
+ styles.mixinStyles.push_back(C_STATIC_MEMBER);
if (isOutputParameter(token))
styles.mixinStyles.push_back(C_OUTPUT_ARGUMENT);
qCDebug(clangdLogHighlight) << "adding highlighting result"
diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp
index 82e64fad78..29f3a980eb 100644
--- a/src/plugins/clangcodemodel/test/clangdtests.cpp
+++ b/src/plugins/clangcodemodel/test/clangdtests.cpp
@@ -1099,9 +1099,9 @@ void ClangdTestHighlighting::test_data()
QTest::newRow("local variable captured by lambda") << 442 << 24 << 442 << 27
<< QList<int>{C_LOCAL} << 0;
QTest::newRow("static protected member") << 693 << 16 << 693 << 30
- << QList<int>{C_FIELD, C_DECLARATION} << 0;
+ << QList<int>{C_FIELD, C_DECLARATION, C_STATIC_MEMBER} << 0;
QTest::newRow("static private member") << 696 << 16 << 696 << 28
- << QList<int>{C_FIELD, C_DECLARATION} << 0;
+ << QList<int>{C_FIELD, C_DECLARATION, C_STATIC_MEMBER} << 0;
QTest::newRow("alias template declaration (opening angle bracket)") << 700 << 10 << 700 << 11
<< QList<int>{C_PUNCTUATION} << int(CppEditor::SemanticHighlighter::AngleBracketOpen);
QTest::newRow("alias template declaration (closing angle bracket)") << 700 << 16 << 700 << 17
diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp
index ab1baf8d38..68dffa6c80 100644
--- a/src/plugins/cppeditor/cppchecksymbols.cpp
+++ b/src/plugins/cppeditor/cppchecksymbols.cpp
@@ -1305,7 +1305,8 @@ bool CheckSymbols::maybeAddField(const QList<LookupItem> &candidates, NameAST *a
getTokenStartPosition(startToken, &line, &column);
const unsigned length = tok.utf16chars();
- const Result use(line, column, length, SemanticHighlighter::FieldUse);
+ const Result use(line, column, length, c->isStatic()
+ ? SemanticHighlighter::StaticFieldUse : SemanticHighlighter::FieldUse);
addUse(use);
return true;
@@ -1359,12 +1360,15 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST
continue; // TODO: add diagnostic messages and color call-operators calls too?
const bool isVirtual = funTy->isVirtual();
+ const bool isStaticMember = funTy->isStatic() && funTy->enclosingClass();
Kind matchingKind;
if (functionKind == FunctionDeclaration) {
matchingKind = isVirtual ? SemanticHighlighter::VirtualFunctionDeclarationUse
+ : isStaticMember ? SemanticHighlighter::StaticMethodDeclarationUse
: SemanticHighlighter::FunctionDeclarationUse;
} else {
matchingKind = isVirtual ? SemanticHighlighter::VirtualMethodUse
+ : isStaticMember ? SemanticHighlighter::StaticMethodUse
: SemanticHighlighter::FunctionUse;
}
if (argumentCount < funTy->minimumArgumentCount()) {
diff --git a/src/plugins/cppeditor/semantichighlighter.cpp b/src/plugins/cppeditor/semantichighlighter.cpp
index 6a02566981..7c92044b2f 100644
--- a/src/plugins/cppeditor/semantichighlighter.cpp
+++ b/src/plugins/cppeditor/semantichighlighter.cpp
@@ -328,6 +328,12 @@ void SemanticHighlighter::updateFormatMapFromFontSettings()
m_formatMap[VirtualFunctionDeclarationUse] =
fs.toTextCharFormat(TextStyles::mixinStyle(C_VIRTUAL_METHOD, C_DECLARATION));
m_formatMap[PseudoKeywordUse] = fs.toTextCharFormat(C_KEYWORD);
+ m_formatMap[StaticFieldUse]
+ = fs.toTextCharFormat(TextStyles::mixinStyle(C_FIELD, C_STATIC_MEMBER));
+ m_formatMap[StaticMethodUse]
+ = fs.toTextCharFormat(TextStyles::mixinStyle(C_FUNCTION, C_STATIC_MEMBER));
+ m_formatMap[StaticMethodDeclarationUse] = fs.toTextCharFormat(
+ TextStyles::mixinStyle(C_FUNCTION, {C_DECLARATION, C_STATIC_MEMBER}));
}
} // namespace CppEditor
diff --git a/src/plugins/cppeditor/semantichighlighter.h b/src/plugins/cppeditor/semantichighlighter.h
index 1acbabcff9..edec88ed7a 100644
--- a/src/plugins/cppeditor/semantichighlighter.h
+++ b/src/plugins/cppeditor/semantichighlighter.h
@@ -58,6 +58,9 @@ public:
PseudoKeywordUse,
FunctionDeclarationUse,
VirtualFunctionDeclarationUse,
+ StaticFieldUse,
+ StaticMethodUse,
+ StaticMethodDeclarationUse,
AngleBracketOpen,
AngleBracketClose,
DoubleAngleBracketClose,
diff --git a/src/plugins/texteditor/texteditorconstants.cpp b/src/plugins/texteditor/texteditorconstants.cpp
index 6063b1c5e8..b7ed780287 100644
--- a/src/plugins/texteditor/texteditorconstants.cpp
+++ b/src/plugins/texteditor/texteditorconstants.cpp
@@ -114,6 +114,7 @@ const char *nameForStyle(TextStyle style)
case C_DECLARATION: return "Declaration";
case C_FUNCTION_DEFINITION: return "FunctionDefinition";
case C_OUTPUT_ARGUMENT: return "OutputArgument";
+ case C_STATIC_MEMBER: return "StaticMember";
case C_LAST_STYLE_SENTINEL: return "LastStyleSentinel";
}
diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h
index c3f65a54c9..a1ae0ec540 100644
--- a/src/plugins/texteditor/texteditorconstants.h
+++ b/src/plugins/texteditor/texteditorconstants.h
@@ -114,6 +114,7 @@ enum TextStyle : quint8 {
C_DECLARATION,
C_FUNCTION_DEFINITION,
C_OUTPUT_ARGUMENT,
+ C_STATIC_MEMBER,
C_LAST_STYLE_SENTINEL
};
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index aad1ac7a62..b2a77953df 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -361,6 +361,10 @@ FormatDescriptions TextEditorSettingsPrivate::initialFormats()
tr("Writable arguments of a function call."),
outputArgumentFormat,
FormatDescription::ShowAllControls);
+ formatDescr.emplace_back(C_STATIC_MEMBER,
+ tr("Static Member"),
+ tr("Names of static fields or member functions."),
+ FormatDescription::ShowAllControls);
return formatDescr;
}
diff --git a/src/plugins/texteditor/textstyles.h b/src/plugins/texteditor/textstyles.h
index a2151527e5..bf6d04eb99 100644
--- a/src/plugins/texteditor/textstyles.h
+++ b/src/plugins/texteditor/textstyles.h
@@ -36,14 +36,20 @@ struct TextStyles {
TextStyle mainStyle;
MixinTextStyles mixinStyles;
- static TextStyles mixinStyle(TextStyle main, TextStyle mixin)
+ static TextStyles mixinStyle(TextStyle main, const QList<TextStyle> &mixins)
{
TextStyles res;
res.mainStyle = main;
res.mixinStyles.initializeElements();
- res.mixinStyles.push_back(mixin);
+ for (TextStyle mixin : mixins)
+ res.mixinStyles.push_back(mixin);
return res;
}
+
+ static TextStyles mixinStyle(TextStyle main, TextStyle mixin)
+ {
+ return mixinStyle(main, QList<TextStyle>{mixin});
+ }
};
} // namespace TextEditor
diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
index ae1eefa8d5..0f7bd8b136 100644
--- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
+++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
@@ -72,6 +72,9 @@ static QString useKindToString(UseKind useKind)
CASE_STR(FunctionUse);
CASE_STR(FunctionDeclarationUse);
CASE_STR(PseudoKeywordUse);
+ CASE_STR(StaticFieldUse);
+ CASE_STR(StaticMethodUse);
+ CASE_STR(StaticMethodDeclarationUse);
default:
QTest::qFail("Unknown UseKind", __FILE__, __LINE__);
return QLatin1String("Unknown UseKind");
@@ -361,21 +364,21 @@ void tst_CheckSymbols::test_checksymbols_data()
"}\n")
<< (UseList()
<< Use(1, 8, 5, Highlighting::TypeUse)
- << Use(3, 16, 3, Highlighting::FieldUse)
+ << Use(3, 16, 3, Highlighting::StaticFieldUse)
<< Use(4, 12, 5, Highlighting::TypeUse)
<< Use(6, 9, 5, Highlighting::TypeUse)
<< Use(6, 16, 5, Highlighting::FieldUse)
<< Use(7, 14, 3, Highlighting::FunctionDeclarationUse)
<< Use(11, 5, 5, Highlighting::TypeUse)
- << Use(11, 12, 3, Highlighting::FieldUse)
+ << Use(11, 12, 3, Highlighting::FieldUse) // FIXME: Should be StaticField
<< Use(13, 6, 5, Highlighting::TypeUse)
<< Use(13, 13, 5, Highlighting::TypeUse)
<< Use(13, 20, 3, Highlighting::FunctionDeclarationUse)
- << Use(15, 5, 3, Highlighting::FieldUse)
+ << Use(15, 5, 3, Highlighting::StaticFieldUse)
<< Use(16, 5, 5, Highlighting::TypeUse)
- << Use(16, 12, 3, Highlighting::FieldUse)
+ << Use(16, 12, 3, Highlighting::FieldUse) // FIXME: Should be StaticField
<< Use(17, 5, 5, Highlighting::FieldUse)
- << Use(17, 12, 3, Highlighting::FieldUse));
+ << Use(17, 12, 3, Highlighting::StaticFieldUse));
QTest::newRow("VariableHasTheSameNameAsEnumUse")
<< _("struct Foo\n"
@@ -443,11 +446,11 @@ void tst_CheckSymbols::test_checksymbols_data()
"}\n")
<< (UseList()
<< Use(1, 8, 3, Highlighting::TypeUse)
- << Use(3, 16, 3, Highlighting::FunctionDeclarationUse)
+ << Use(3, 16, 3, Highlighting::StaticMethodDeclarationUse)
<< Use(6, 6, 3, Highlighting::FunctionDeclarationUse)
<< Use(8, 9, 3, Highlighting::LocalUse)
<< Use(8, 15, 3, Highlighting::TypeUse)
- << Use(8, 20, 3, Highlighting::FunctionUse));
+ << Use(8, 20, 3, Highlighting::StaticMethodUse));
QTest::newRow("8902_staticFunctionHighlightingAsMember_functionArgument")
<< _("struct Foo\n"
@@ -461,11 +464,11 @@ void tst_CheckSymbols::test_checksymbols_data()
"}\n")
<< (UseList()
<< Use(1, 8, 3, Highlighting::TypeUse)
- << Use(3, 16, 3, Highlighting::FunctionDeclarationUse)
+ << Use(3, 16, 3, Highlighting::StaticMethodDeclarationUse)
<< Use(6, 6, 3, Highlighting::FunctionDeclarationUse)
<< Use(6, 14, 3, Highlighting::LocalUse)
<< Use(8, 5, 3, Highlighting::TypeUse)
- << Use(8, 10, 3, Highlighting::FunctionUse));
+ << Use(8, 10, 3, Highlighting::StaticMethodUse));
QTest::newRow("8902_staticFunctionHighlightingAsMember_templateParameter")
<< _("struct Foo\n"
@@ -480,11 +483,11 @@ void tst_CheckSymbols::test_checksymbols_data()
"}\n")
<< (UseList()
<< Use(1, 8, 3, Highlighting::TypeUse)
- << Use(3, 16, 3, Highlighting::FunctionDeclarationUse)
+ << Use(3, 16, 3, Highlighting::StaticMethodDeclarationUse)
<< Use(6, 17, 3, Highlighting::TypeUse)
<< Use(7, 6, 3, Highlighting::FunctionDeclarationUse)
<< Use(9, 5, 3, Highlighting::TypeUse)
- << Use(9, 10, 3, Highlighting::FunctionUse));
+ << Use(9, 10, 3, Highlighting::StaticMethodUse));
QTest::newRow("staticFunctionHighlightingAsMember_struct")
<< _("struct Foo\n"
@@ -499,11 +502,11 @@ void tst_CheckSymbols::test_checksymbols_data()
"}\n")
<< (UseList()
<< Use(1, 8, 3, Highlighting::TypeUse)
- << Use(3, 16, 3, Highlighting::FunctionDeclarationUse)
+ << Use(3, 16, 3, Highlighting::StaticMethodDeclarationUse)
<< Use(6, 8, 3, Highlighting::TypeUse)
<< Use(7, 6, 3, Highlighting::FunctionDeclarationUse)
<< Use(9, 5, 3, Highlighting::TypeUse)
- << Use(9, 10, 3, Highlighting::FunctionUse));
+ << Use(9, 10, 3, Highlighting::StaticMethodUse));
QTest::newRow("QTCREATORBUG8890_danglingPointer")
<< _("template<class T> class QList {\n"
@@ -569,13 +572,13 @@ void tst_CheckSymbols::test_checksymbols_data()
<< Use(1, 17, 1, Highlighting::TypeUse)
<< Use(2, 7, 9, Highlighting::TypeUse)
<< Use(5, 12, 1, Highlighting::TypeUse)
- << Use(5, 15, 8, Highlighting::FunctionDeclarationUse)
+ << Use(5, 15, 8, Highlighting::StaticMethodDeclarationUse)
<< Use(8, 6, 3, Highlighting::FunctionDeclarationUse)
<< Use(10, 6, 3, Highlighting::FunctionDeclarationUse);
for (int i = 0; i < 250; ++i) {
excessiveUses
<< Use(12 + i, 5, 9, Highlighting::TypeUse)
- << Use(12 + i, 28, 8, Highlighting::FunctionUse);
+ << Use(12 + i, 28, 8, Highlighting::StaticMethodUse);
}
QTest::newRow("QTCREATORBUG8974_danglingPointer")
<< excessive