diff --git a/CHANGES.md b/CHANGES.md
index 3bb58c9569..56cb4da5e0 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -16,6 +16,7 @@ Core Changes:
Language Improvements:
+- (csharp) add support for `@identifier` style identifiers (#2414) [Josh Goebel][]
- fix(elixir) Support function names with a slash (#2406) [Josh Goebel][]
- fix(javascript) comma is allowed in a "value container" (#2403) [Josh Goebel][]
- enh(apache) add `deny` and `allow` keywords [Josh Goebel][]
diff --git a/src/languages/csharp.js b/src/languages/csharp.js
index b7ad270edd..8294552c85 100644
--- a/src/languages/csharp.js
+++ b/src/languages/csharp.js
@@ -93,6 +93,12 @@ export default function(hljs) {
keywords: "in out"
};
var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?';
+ var AT_IDENTIFIER = {
+ // prevents expressions like `@class` from incorrect flagging
+ // `class` as a keyword
+ begin: "@" + hljs.IDENT_RE,
+ relevance: 0
+ };
return {
name: 'C#',
@@ -195,7 +201,8 @@ export default function(hljs) {
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE
]
- }
+ },
+ AT_IDENTIFIER
]
};
}
diff --git a/test/markup/csharp/identifiers.expect.txt b/test/markup/csharp/identifiers.expect.txt
new file mode 100644
index 0000000000..566b865c4d
--- /dev/null
+++ b/test/markup/csharp/identifiers.expect.txt
@@ -0,0 +1,3 @@
+var @class = new MyClass();
+doSomething(@var, @foo);
+var a;
diff --git a/test/markup/csharp/identifiers.txt b/test/markup/csharp/identifiers.txt
new file mode 100644
index 0000000000..3e7040f291
--- /dev/null
+++ b/test/markup/csharp/identifiers.txt
@@ -0,0 +1,4 @@
+var @class = new MyClass();
+doSomething(@var, @foo);
+var a;
+