From 589fcca24694036b92cf2273ecc30b032f970c8e Mon Sep 17 00:00:00 2001 From: "Vladimir.Tupikov" Date: Wed, 10 Jun 2020 17:44:42 +0300 Subject: [PATCH 1/5] csharp generic highlighting --- src/languages/csharp.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/languages/csharp.js b/src/languages/csharp.js index a68c265d17..7c614e3733 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -91,7 +91,8 @@ export default function(hljs) { var GENERIC_MODIFIER = { begin: "<", end: ">", - keywords: "in out" + keywords: "in out", + contains: [ TITLE_MODE ] }; var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?'; var AT_IDENTIFIER = { @@ -177,13 +178,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 }, { From 4a34e827b93586a3a3912c8536e69c1c2cc721bb Mon Sep 17 00:00:00 2001 From: "Vladimir.Tupikov" Date: Thu, 11 Jun 2020 07:54:25 +0300 Subject: [PATCH 2/5] whitespace out from optional match group --- src/languages/csharp.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 7c614e3733..21fb878b2d 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -178,12 +178,12 @@ export default function(hljs) { }, { className: 'function', - begin: '(' + TYPE_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*(\\<.+\\>\\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*(\\<.+\\>\\s*)?\\(', returnBegin: true, + begin: hljs.IDENT_RE + '\\s*(\\<.+\\>)?\\s*\\(', returnBegin: true, contains: [ hljs.TITLE_MODE, GENERIC_MODIFIER From 68080379b11cbea47cad0d9921302cfd181d0f40 Mon Sep 17 00:00:00 2001 From: "Vladimir.Tupikov" Date: Thu, 11 Jun 2020 12:21:11 +0300 Subject: [PATCH 3/5] covariant and contravariant support --- src/languages/csharp.js | 7 +++++-- test/markup/csharp/generic_modifiers.expect.txt | 11 ++++++++--- test/markup/csharp/generic_modifiers.txt | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 21fb878b2d..5dba0eb8ee 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -91,8 +91,11 @@ export default function(hljs) { var GENERIC_MODIFIER = { begin: "<", end: ">", - keywords: "in out", - contains: [ TITLE_MODE ] + contains: [ + { className: "keyword", begin: "in\\s" }, + { className: "keyword", begin: "out\\s" }, + TITLE_MODE + ] }; var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?'; var AT_IDENTIFIER = { diff --git a/test/markup/csharp/generic_modifiers.expect.txt b/test/markup/csharp/generic_modifiers.expect.txt index bf6d8c3fba..5c61f2455a 100644 --- a/test/markup/csharp/generic_modifiers.expect.txt +++ b/test/markup/csharp/generic_modifiers.expect.txt @@ -1,7 +1,12 @@ -interface IObserver<in T>; +interface IObserver<in T>; {} -interface IObservable<out T>; +interface IObservable<out T>; {} -public delegate void DContravariant<in A>(A argument); +public delegate void DContravariant<in A>(A argument); + +public delegate A DCovariant<out A>(); + +void MethodWithGenericParameter<T>() + \ No newline at end of file diff --git a/test/markup/csharp/generic_modifiers.txt b/test/markup/csharp/generic_modifiers.txt index 0af70e5c53..71273e85b2 100644 --- a/test/markup/csharp/generic_modifiers.txt +++ b/test/markup/csharp/generic_modifiers.txt @@ -5,3 +5,7 @@ interface IObservable; {} public delegate void DContravariant(A argument); + +public delegate A DCovariant(); + +void MethodWithGenericParameter() From 5febb39fdb47429171f1d7ef49e836b0f0fde555 Mon Sep 17 00:00:00 2001 From: "Vladimir.Tupikov" Date: Thu, 11 Jun 2020 12:30:09 +0300 Subject: [PATCH 4/5] update test --- test/markup/csharp/titles.expect.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/markup/csharp/titles.expect.txt b/test/markup/csharp/titles.expect.txt index be471a6db1..46fa652d17 100644 --- a/test/markup/csharp/titles.expect.txt +++ b/test/markup/csharp/titles.expect.txt @@ -16,6 +16,6 @@ } } - public class TesterA<R, S> where R : class where S : IComparable + public class TesterA<R, S> where R : class where S : IComparable {} } From 68a7c9fa9aa9a1b90612cdce279055beae0d43b9 Mon Sep 17 00:00:00 2001 From: "Vladimir.Tupikov" Date: Thu, 11 Jun 2020 23:22:01 +0300 Subject: [PATCH 5/5] modify to keywords --- src/languages/csharp.js | 3 +-- test/markup/csharp/generic_modifiers.expect.txt | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 5dba0eb8ee..8c20e37db9 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -92,8 +92,7 @@ export default function(hljs) { begin: "<", end: ">", contains: [ - { className: "keyword", begin: "in\\s" }, - { className: "keyword", begin: "out\\s" }, + { beginKeywords: "in out"}, TITLE_MODE ] }; diff --git a/test/markup/csharp/generic_modifiers.expect.txt b/test/markup/csharp/generic_modifiers.expect.txt index 5c61f2455a..6e0a0ef4dc 100644 --- a/test/markup/csharp/generic_modifiers.expect.txt +++ b/test/markup/csharp/generic_modifiers.expect.txt @@ -1,12 +1,12 @@ -interface IObserver<in T>; +interface IObserver<in T>; {} -interface IObservable<out T>; +interface IObservable<out T>; {} -public delegate void DContravariant<in A>(A argument); +public delegate void DContravariant<in A>(A argument); -public delegate A DCovariant<out A>(); +public delegate A DCovariant<out A>(); void MethodWithGenericParameter<T>() \ No newline at end of file