TextEditor: Implement highlighting of function definitions

This allows users to style function names at their definitions.

Once set, the XML-style token "FunctionDefinition" will
highlight all function definitions: the style option is a
mixin to Function and Virtual Function.

TEST=Default themes and locally hacked themes that lack Function,
FunctionDefinition, Declaration-styling look as they did before
this patch.

Requires Clang.

Task-number: QTCREATORBUG-16625
Change-Id: I49d8e401211bdf28ff74699feac16fe98f6d64ce
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Hugo Holgersson
2016-07-17 00:29:33 +02:00
parent e050622f55
commit bf3c67e0d0
12 changed files with 85 additions and 14 deletions

View File

@@ -84,6 +84,10 @@ bool HighlightingMark::hasMainType(HighlightingType type) const
return m_types.mainHighlightingType == type;
}
unsigned HighlightingMark::mixinSize() const {
return m_types.mixinHighlightingTypes.size();
}
bool HighlightingMark::hasMixinType(HighlightingType type) const
{
auto found = std::find(m_types.mixinHighlightingTypes.begin(),
@@ -93,6 +97,12 @@ bool HighlightingMark::hasMixinType(HighlightingType type) const
return found != m_types.mixinHighlightingTypes.end();
}
bool HighlightingMark::hasMixinTypeAt(uint position, HighlightingType type) const
{
return m_types.mixinHighlightingTypes.size() > position &&
m_types.mixinHighlightingTypes.at(position) == type;
}
bool HighlightingMark::hasOnlyType(HighlightingType type) const
{
return m_types.mixinHighlightingTypes.size() == 0 && hasMainType(type);
@@ -191,17 +201,22 @@ void HighlightingMark::fieldKind(const Cursor &)
m_types.mixinHighlightingTypes.push_back(HighlightingType::OutputArgument);
}
bool HighlightingMark::isDefinition() const
{
return m_originalCursor.isDefinition();
}
bool HighlightingMark::isVirtualMethodDeclarationOrDefinition(const Cursor &cursor) const
{
return cursor.isVirtualMethod()
&& (m_originalCursor.isDeclaration() || m_originalCursor.isDefinition());
}
namespace {
bool isNotFinalFunction(const Cursor &cursor)
{
return !cursor.hasFinalFunctionAttribute();
}
}
bool HighlightingMark::isRealDynamicCall(const Cursor &cursor) const
{
@@ -285,6 +300,9 @@ void HighlightingMark::functionKind(const Cursor &cursor, Recursion recursion)
m_types.mixinHighlightingTypes.push_back(HighlightingType::OutputArgument);
addExtraTypeIfFirstPass(HighlightingType::Declaration, recursion);
if (isDefinition())
addExtraTypeIfFirstPass(HighlightingType::FunctionDefinition, recursion);
}
void HighlightingMark::identifierKind(const Cursor &cursor, Recursion recursion)