|
@@ -96,6 +96,8 @@ namespace format {
|
|
|
TYPE(TrailingReturnArrow) \
|
|
|
TYPE(TrailingUnaryOperator) \
|
|
|
TYPE(UnaryOperator) \
|
|
|
+ TYPE(CSharpStringLiteral) \
|
|
|
+ TYPE(CSharpNullCoalescing) \
|
|
|
TYPE(Unknown)
|
|
|
|
|
|
enum TokenType {
|
|
@@ -723,7 +725,36 @@ struct AdditionalKeywords {
|
|
|
kw_slots = &IdentTable.get("slots");
|
|
|
kw_qslots = &IdentTable.get("Q_SLOTS");
|
|
|
|
|
|
- // Keep this at the end of the constructor to make sure everything here is
|
|
|
+ // C# keywords
|
|
|
+ kw_dollar = &IdentTable.get("dollar");
|
|
|
+ kw_base = &IdentTable.get("base");
|
|
|
+ kw_byte = &IdentTable.get("byte");
|
|
|
+ kw_checked = &IdentTable.get("checked");
|
|
|
+ kw_decimal = &IdentTable.get("decimal");
|
|
|
+ kw_delegate = &IdentTable.get("delegate");
|
|
|
+ kw_event = &IdentTable.get("event");
|
|
|
+ kw_fixed = &IdentTable.get("fixed");
|
|
|
+ kw_foreach = &IdentTable.get("foreach");
|
|
|
+ kw_implicit = &IdentTable.get("implicit");
|
|
|
+ kw_internal = &IdentTable.get("internal");
|
|
|
+ kw_lock = &IdentTable.get("lock");
|
|
|
+ kw_null = &IdentTable.get("null");
|
|
|
+ kw_object = &IdentTable.get("object");
|
|
|
+ kw_out = &IdentTable.get("out");
|
|
|
+ kw_params = &IdentTable.get("params");
|
|
|
+ kw_ref = &IdentTable.get("ref");
|
|
|
+ kw_string = &IdentTable.get("string");
|
|
|
+ kw_stackalloc = &IdentTable.get("stackalloc");
|
|
|
+ kw_sbyte = &IdentTable.get("sbyte");
|
|
|
+ kw_sealed = &IdentTable.get("sealed");
|
|
|
+ kw_uint = &IdentTable.get("uint");
|
|
|
+ kw_ulong = &IdentTable.get("ulong");
|
|
|
+ kw_unchecked = &IdentTable.get("unchecked");
|
|
|
+ kw_unsafe = &IdentTable.get("unsafe");
|
|
|
+ kw_ushort = &IdentTable.get("ushort");
|
|
|
+
|
|
|
+ // Keep this at the end of the constructor to make sure everything here
|
|
|
+ // is
|
|
|
// already initialized.
|
|
|
JsExtraKeywords = std::unordered_set<IdentifierInfo *>(
|
|
|
{kw_as, kw_async, kw_await, kw_declare, kw_finally, kw_from,
|
|
@@ -731,6 +762,19 @@ struct AdditionalKeywords {
|
|
|
kw_set, kw_type, kw_typeof, kw_var, kw_yield,
|
|
|
// Keywords from the Java section.
|
|
|
kw_abstract, kw_extends, kw_implements, kw_instanceof, kw_interface});
|
|
|
+
|
|
|
+ CSharpExtraKeywords = std::unordered_set<IdentifierInfo *>(
|
|
|
+ {kw_base, kw_byte, kw_checked, kw_decimal, kw_delegate, kw_event,
|
|
|
+ kw_fixed, kw_foreach, kw_implicit, kw_in, kw_interface, kw_internal,
|
|
|
+ kw_is, kw_lock, kw_null, kw_object, kw_out, kw_override, kw_params,
|
|
|
+ kw_readonly, kw_ref, kw_string, kw_stackalloc, kw_sbyte, kw_sealed,
|
|
|
+ kw_uint, kw_ulong, kw_unchecked, kw_unsafe, kw_ushort,
|
|
|
+ // Keywords from the JavaScript section.
|
|
|
+ kw_as, kw_async, kw_await, kw_declare, kw_finally, kw_from,
|
|
|
+ kw_function, kw_get, kw_import, kw_is, kw_let, kw_module, kw_readonly,
|
|
|
+ kw_set, kw_type, kw_typeof, kw_var, kw_yield,
|
|
|
+ // Keywords from the Java section.
|
|
|
+ kw_abstract, kw_extends, kw_implements, kw_instanceof, kw_interface});
|
|
|
}
|
|
|
|
|
|
// Context sensitive keywords.
|
|
@@ -796,6 +840,37 @@ struct AdditionalKeywords {
|
|
|
IdentifierInfo *kw_slots;
|
|
|
IdentifierInfo *kw_qslots;
|
|
|
|
|
|
+ // C# keywords
|
|
|
+ IdentifierInfo *kw_dollar;
|
|
|
+ IdentifierInfo *kw_base;
|
|
|
+ IdentifierInfo *kw_byte;
|
|
|
+ IdentifierInfo *kw_checked;
|
|
|
+ IdentifierInfo *kw_decimal;
|
|
|
+ IdentifierInfo *kw_delegate;
|
|
|
+ IdentifierInfo *kw_event;
|
|
|
+ IdentifierInfo *kw_fixed;
|
|
|
+ IdentifierInfo *kw_foreach;
|
|
|
+ IdentifierInfo *kw_implicit;
|
|
|
+ IdentifierInfo *kw_internal;
|
|
|
+
|
|
|
+ IdentifierInfo *kw_lock;
|
|
|
+ IdentifierInfo *kw_null;
|
|
|
+ IdentifierInfo *kw_object;
|
|
|
+ IdentifierInfo *kw_out;
|
|
|
+
|
|
|
+ IdentifierInfo *kw_params;
|
|
|
+
|
|
|
+ IdentifierInfo *kw_ref;
|
|
|
+ IdentifierInfo *kw_string;
|
|
|
+ IdentifierInfo *kw_stackalloc;
|
|
|
+ IdentifierInfo *kw_sbyte;
|
|
|
+ IdentifierInfo *kw_sealed;
|
|
|
+ IdentifierInfo *kw_uint;
|
|
|
+ IdentifierInfo *kw_ulong;
|
|
|
+ IdentifierInfo *kw_unchecked;
|
|
|
+ IdentifierInfo *kw_unsafe;
|
|
|
+ IdentifierInfo *kw_ushort;
|
|
|
+
|
|
|
/// Returns \c true if \p Tok is a true JavaScript identifier, returns
|
|
|
/// \c false if it is a keyword or a pseudo keyword.
|
|
|
bool IsJavaScriptIdentifier(const FormatToken &Tok) const {
|
|
@@ -804,9 +879,68 @@ struct AdditionalKeywords {
|
|
|
JsExtraKeywords.end();
|
|
|
}
|
|
|
|
|
|
+ /// Returns \c true if \p Tok is a C# keyword, returns
|
|
|
+ /// \c false if it is a anything else.
|
|
|
+ bool isCSharpKeyword(const FormatToken &Tok) const {
|
|
|
+ switch (Tok.Tok.getKind()) {
|
|
|
+ case tok::kw_bool:
|
|
|
+ case tok::kw_break:
|
|
|
+ case tok::kw_case:
|
|
|
+ case tok::kw_catch:
|
|
|
+ case tok::kw_char:
|
|
|
+ case tok::kw_class:
|
|
|
+ case tok::kw_const:
|
|
|
+ case tok::kw_continue:
|
|
|
+ case tok::kw_default:
|
|
|
+ case tok::kw_do:
|
|
|
+ case tok::kw_double:
|
|
|
+ case tok::kw_else:
|
|
|
+ case tok::kw_enum:
|
|
|
+ case tok::kw_explicit:
|
|
|
+ case tok::kw_extern:
|
|
|
+ case tok::kw_false:
|
|
|
+ case tok::kw_float:
|
|
|
+ case tok::kw_for:
|
|
|
+ case tok::kw_goto:
|
|
|
+ case tok::kw_if:
|
|
|
+ case tok::kw_int:
|
|
|
+ case tok::kw_long:
|
|
|
+ case tok::kw_namespace:
|
|
|
+ case tok::kw_new:
|
|
|
+ case tok::kw_operator:
|
|
|
+ case tok::kw_private:
|
|
|
+ case tok::kw_protected:
|
|
|
+ case tok::kw_public:
|
|
|
+ case tok::kw_return:
|
|
|
+ case tok::kw_short:
|
|
|
+ case tok::kw_sizeof:
|
|
|
+ case tok::kw_static:
|
|
|
+ case tok::kw_struct:
|
|
|
+ case tok::kw_switch:
|
|
|
+ case tok::kw_this:
|
|
|
+ case tok::kw_throw:
|
|
|
+ case tok::kw_true:
|
|
|
+ case tok::kw_try:
|
|
|
+ case tok::kw_typeof:
|
|
|
+ case tok::kw_using:
|
|
|
+ case tok::kw_virtual:
|
|
|
+ case tok::kw_void:
|
|
|
+ case tok::kw_volatile:
|
|
|
+ case tok::kw_while:
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return Tok.is(tok::identifier) &&
|
|
|
+ CSharpExtraKeywords.find(Tok.Tok.getIdentifierInfo()) ==
|
|
|
+ CSharpExtraKeywords.end();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private:
|
|
|
/// The JavaScript keywords beyond the C++ keyword set.
|
|
|
std::unordered_set<IdentifierInfo *> JsExtraKeywords;
|
|
|
+
|
|
|
+ /// The C# keywords beyond the C++ keyword set
|
|
|
+ std::unordered_set<IdentifierInfo *> CSharpExtraKeywords;
|
|
|
};
|
|
|
|
|
|
} // namespace format
|