Skip to content

Commit

Permalink
enh(csharp) highlight generics in more cases (#2599)
Browse files Browse the repository at this point in the history
  • Loading branch information
TupikovVladimir authored Jun 11, 2020
1 parent b4046ce commit 014343e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 8 deletions.
14 changes: 10 additions & 4 deletions src/languages/csharp.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,10 @@ export default function(hljs) {
var GENERIC_MODIFIER = {
begin: "<",
end: ">",
keywords: "in out"
contains: [
{ beginKeywords: "in out"},
TITLE_MODE
]
};
var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?';
var AT_IDENTIFIER = {
Expand Down Expand Up @@ -177,13 +180,16 @@ export default function(hljs) {
},
{
className: 'function',
begin: '(' + TYPE_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
begin: '(' + TYPE_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*(\\<.+\\>)?\\s*\\(', returnBegin: true,
end: /\s*[{;=]/, excludeEnd: true,
keywords: KEYWORDS,
contains: [
{
begin: hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
contains: [hljs.TITLE_MODE],
begin: hljs.IDENT_RE + '\\s*(\\<.+\\>)?\\s*\\(', returnBegin: true,
contains: [
hljs.TITLE_MODE,
GENERIC_MODIFIER
],
relevance: 0
},
{
Expand Down
11 changes: 8 additions & 3 deletions test/markup/csharp/generic_modifiers.expect.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
<span class="hljs-keyword">interface</span> <span class="hljs-title">IObserver</span>&lt;<span class="hljs-keyword">in</span> T&gt;;
<span class="hljs-keyword">interface</span> <span class="hljs-title">IObserver</span>&lt;<span class="hljs-keyword">in</span> <span class="hljs-title">T</span>&gt;;
{}

<span class="hljs-keyword">interface</span> <span class="hljs-title">IObservable</span>&lt;<span class="hljs-keyword">out</span> T&gt;;
<span class="hljs-keyword">interface</span> <span class="hljs-title">IObservable</span>&lt;<span class="hljs-keyword">out</span> <span class="hljs-title">T</span>&gt;;
{}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">delegate</span> <span class="hljs-keyword">void</span> DContravariant&lt;<span class="hljs-keyword">in</span> A&gt;(A argument);
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">delegate</span> <span class="hljs-keyword">void</span> <span class="hljs-title">DContravariant</span>&lt;<span class="hljs-keyword">in</span> <span class="hljs-title">A</span>&gt;(<span class="hljs-params">A argument</span>)</span>;

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">delegate</span> A <span class="hljs-title">DCovariant</span>&lt;<span class="hljs-keyword">out</span> <span class="hljs-title">A</span>&gt;(<span class="hljs-params"></span>)</span>;

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">MethodWithGenericParameter</span>&lt;<span class="hljs-title">T</span>&gt;(<span class="hljs-params"></span>)
</span>
4 changes: 4 additions & 0 deletions test/markup/csharp/generic_modifiers.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@ interface IObservable<out T>;
{}

public delegate void DContravariant<in A>(A argument);

public delegate A DCovariant<out A>();

void MethodWithGenericParameter<T>()
2 changes: 1 addition & 1 deletion test/markup/csharp/titles.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@
}
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">TesterA</span>&lt;R, S&gt; <span class="hljs-keyword">where</span> <span class="hljs-title">R</span> : <span class="hljs-keyword">class</span> <span class="hljs-keyword">where</span> <span class="hljs-title">S</span> : <span class="hljs-title">IComparable</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">TesterA</span>&lt;<span class="hljs-title">R</span>, <span class="hljs-title">S</span>&gt; <span class="hljs-keyword">where</span> <span class="hljs-title">R</span> : <span class="hljs-keyword">class</span> <span class="hljs-keyword">where</span> <span class="hljs-title">S</span> : <span class="hljs-title">IComparable</span>
{}
}

0 comments on commit 014343e

Please sign in to comment.