forked from qt-creator/qt-creator
QmlJS: improve support for enum declarations
Add indentation and little highlighting for enums. It just highlights the 'enum' keyword and the name of the enum, not its values. Task-number: QTCREATORBUG-19226 Change-Id: I36e46a27b0e32c4aecc8e91875c3d22df1814d93 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -177,6 +177,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
case Property: enter(property_start); break;
|
case Property: enter(property_start); break;
|
||||||
case Function: enter(function_start); break;
|
case Function: enter(function_start); break;
|
||||||
case Signal: enter(signal_start); break;
|
case Signal: enter(signal_start); break;
|
||||||
|
case Enum: enter(enum_start); break;
|
||||||
case On:
|
case On:
|
||||||
case As:
|
case As:
|
||||||
case List:
|
case List:
|
||||||
@@ -215,6 +216,11 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
default: leave(true); continue;
|
default: leave(true); continue;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case enum_start:
|
||||||
|
switch (kind) {
|
||||||
|
case LeftBrace: enter(objectliteral_open); break;
|
||||||
|
} break;
|
||||||
|
|
||||||
case signal_start:
|
case signal_start:
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case Colon: enter(binding_assignment); break; // oops, was a binding
|
case Colon: enter(binding_assignment); break; // oops, was a binding
|
||||||
@@ -931,6 +937,8 @@ CodeFormatter::TokenKind CodeFormatter::extendedTokenKind(const QmlJS::Token &to
|
|||||||
return On;
|
return On;
|
||||||
if (text == QLatin1String("list"))
|
if (text == QLatin1String("list"))
|
||||||
return List;
|
return List;
|
||||||
|
if (text == QLatin1String("enum"))
|
||||||
|
return Enum;
|
||||||
} else if (kind == Keyword) {
|
} else if (kind == Keyword) {
|
||||||
const char char1 = text.at(0).toLatin1();
|
const char char1 = text.at(0).toLatin1();
|
||||||
const char char2 = text.at(1).toLatin1();
|
const char char2 = text.at(1).toLatin1();
|
||||||
|
@@ -109,6 +109,8 @@ public: // must be public to make Q_GADGET introspection work
|
|||||||
property_name, // after the type
|
property_name, // after the type
|
||||||
property_maybe_initializer, // after the identifier
|
property_maybe_initializer, // after the identifier
|
||||||
|
|
||||||
|
enum_start, // after 'enum'
|
||||||
|
|
||||||
signal_start, // after 'signal'
|
signal_start, // after 'signal'
|
||||||
signal_maybe_arglist, // after identifier
|
signal_maybe_arglist, // after identifier
|
||||||
signal_arglist_open, // after '('
|
signal_arglist_open, // after '('
|
||||||
@@ -197,6 +199,7 @@ protected:
|
|||||||
Comma,
|
Comma,
|
||||||
Dot,
|
Dot,
|
||||||
Delimiter,
|
Delimiter,
|
||||||
|
RegExp,
|
||||||
|
|
||||||
EndOfExistingTokenKinds,
|
EndOfExistingTokenKinds,
|
||||||
|
|
||||||
@@ -209,6 +212,7 @@ protected:
|
|||||||
Delete,
|
Delete,
|
||||||
Do,
|
Do,
|
||||||
Else,
|
Else,
|
||||||
|
Enum,
|
||||||
Finally,
|
Finally,
|
||||||
For,
|
For,
|
||||||
Function,
|
Function,
|
||||||
|
@@ -131,13 +131,28 @@ void QmlJSHighlighter::highlightBlock(const QString &text)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (text.midRef(token.offset, token.length) == QLatin1String("enum")) {
|
||||||
|
setFormat(token.offset, token.length, formatForCategory(C_KEYWORD));
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else if (index > 0 && maybeQmlBuiltinType(spell)) {
|
} else if (index > 0 && maybeQmlBuiltinType(spell)) {
|
||||||
const Token &previousToken = tokens.at(index - 1);
|
const Token &previousToken = tokens.at(index - 1);
|
||||||
if (previousToken.is(Token::Identifier) && text.at(previousToken.offset) == QLatin1Char('p')
|
if (previousToken.is(Token::Identifier)
|
||||||
&& text.midRef(previousToken.offset, previousToken.length) == QLatin1String("property")) {
|
&& text.at(previousToken.offset) == QLatin1Char('p')
|
||||||
|
&& text.midRef(previousToken.offset, previousToken.length)
|
||||||
|
== QLatin1String("property")) {
|
||||||
setFormat(token.offset, token.length, formatForCategory(C_KEYWORD));
|
setFormat(token.offset, token.length, formatForCategory(C_KEYWORD));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (index == 1) {
|
||||||
|
const Token &previousToken = tokens.at(0);
|
||||||
|
if (previousToken.is(Token::Identifier)
|
||||||
|
&& text.at(previousToken.offset) == QLatin1Char('e')
|
||||||
|
&& text.midRef(previousToken.offset, previousToken.length)
|
||||||
|
== QLatin1String("enum")) {
|
||||||
|
setFormat(token.offset, token.length, formatForCategory(C_ENUMERATION));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@@ -206,6 +221,8 @@ bool QmlJSHighlighter::maybeQmlKeyword(const QStringRef &text) const
|
|||||||
return true;
|
return true;
|
||||||
else if (ch == QLatin1Char('o') && text == QLatin1String("on"))
|
else if (ch == QLatin1Char('o') && text == QLatin1String("on"))
|
||||||
return true;
|
return true;
|
||||||
|
else if (ch == QLatin1Char('e') && text == QLatin1String("enum"))
|
||||||
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user