From a91112764e68a4319946b72fbadcefc427b0e3a6 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Fri, 31 Jan 2020 17:00:59 -0500 Subject: [PATCH 1/4] enh(csharp) add generic modifiers --- CHANGES.md | 2 ++ src/languages/csharp.js | 10 +++++++++- test/markup/csharp/generic_modifiers.expect.txt | 7 +++++++ test/markup/csharp/generic_modifiers.txt | 7 +++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/markup/csharp/generic_modifiers.expect.txt create mode 100644 test/markup/csharp/generic_modifiers.txt diff --git a/CHANGES.md b/CHANGES.md index a5542c2ccb..70b0bcd9f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Core Changes: Language Improvements: +- enh(csharp) Add generic modifiers (in, out) (#2378) [Josh Goebel][] - (fortran) Add Fortran 2018 keywords and coarray intrinsics (#2361) [Sam Miller][] - (delphi) highlight hexadecimal, octal, and binary numbers (#2370) [Robert Riebisch]() - enh(plaintext) added `text` and `txt` as alias (#2360) [Taufik Nurrohman][] @@ -22,6 +23,7 @@ Developer Tools: - none. +[Josh Goebel]: https://github.com/yyyc514 [Sam Miller]: https://github.com/smillerc [Robert Riebisch]: https://github.com/bttrx [Taufik Nurrohman]: https://github.com/taufik-nurrohman diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 5891bfa670..68f2486d33 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -18,7 +18,9 @@ function(hljs) { 'uint ulong unchecked unsafe ushort using virtual void volatile while ' + // Contextual keywords. 'add alias ascending async await by descending dynamic equals from get global group into join ' + - 'let nameof on orderby partial remove select set value var when where yield', + 'let nameof on orderby partial remove select set value var when where yield ' + + // generic modifiers + 'in out', literal: 'null false true' }; @@ -86,6 +88,11 @@ function(hljs) { ] }; + var GENERIC_MODIFIER = { + begin: "<", + end: ">", + keywords: "in out" + }; var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?'; return { @@ -131,6 +138,7 @@ function(hljs) { beginKeywords: 'class interface', end: /[{;=]/, illegal: /[^\s:,]/, contains: [ + GENERIC_MODIFIER, hljs.TITLE_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE diff --git a/test/markup/csharp/generic_modifiers.expect.txt b/test/markup/csharp/generic_modifiers.expect.txt new file mode 100644 index 0000000000..bf6d8c3fba --- /dev/null +++ b/test/markup/csharp/generic_modifiers.expect.txt @@ -0,0 +1,7 @@ +interface IObserver<in T>; +{} + +interface IObservable<out T>; +{} + +public delegate void DContravariant<in A>(A argument); diff --git a/test/markup/csharp/generic_modifiers.txt b/test/markup/csharp/generic_modifiers.txt new file mode 100644 index 0000000000..0af70e5c53 --- /dev/null +++ b/test/markup/csharp/generic_modifiers.txt @@ -0,0 +1,7 @@ +interface IObserver; +{} + +interface IObservable; +{} + +public delegate void DContravariant(A argument); From 89e8e751cd6db93c007d96037dffa80834be8226 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Fri, 31 Jan 2020 17:23:37 -0500 Subject: [PATCH 2/4] enh(csharp) Allow reference path in class inheritance lists Closes #1947. --- CHANGES.md | 1 + src/languages/csharp.js | 5 +++-- test/markup/csharp/titles.expect.txt | 2 +- test/markup/csharp/titles.txt | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 70b0bcd9f4..e1142c1cab 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Core Changes: Language Improvements: +- enh(csharp) Allow reference path in class inheritance lists (#2378) [Josh Goebel][] - enh(csharp) Add generic modifiers (in, out) (#2378) [Josh Goebel][] - (fortran) Add Fortran 2018 keywords and coarray intrinsics (#2361) [Sam Miller][] - (delphi) highlight hexadecimal, octal, and binary numbers (#2370) [Robert Riebisch]() diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 68f2486d33..b6cedcbed5 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -24,6 +24,7 @@ function(hljs) { literal: 'null false true' }; + var TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, {begin: '[a-zA-Z](\\.?\\w)*'}); var NUMBERS = { className: 'number', variants: [ @@ -139,7 +140,7 @@ function(hljs) { illegal: /[^\s:,]/, contains: [ GENERIC_MODIFIER, - hljs.TITLE_MODE, + TITLE_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] @@ -148,7 +149,7 @@ function(hljs) { beginKeywords: 'namespace', end: /[{;=]/, illegal: /[^\s:]/, contains: [ - hljs.inherit(hljs.TITLE_MODE, {begin: '[a-zA-Z](\\.?\\w)*'}), + TITLE_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] diff --git a/test/markup/csharp/titles.expect.txt b/test/markup/csharp/titles.expect.txt index 185cb34c2e..d13f5b4836 100644 --- a/test/markup/csharp/titles.expect.txt +++ b/test/markup/csharp/titles.expect.txt @@ -1,6 +1,6 @@ namespace Foo // namespace { - public class Greet : Base, Other // class + public class Greet : Base, Other, IInterface.test.path // class { public Greet(string who) // function { diff --git a/test/markup/csharp/titles.txt b/test/markup/csharp/titles.txt index ee1d81547a..6fadb67d4c 100644 --- a/test/markup/csharp/titles.txt +++ b/test/markup/csharp/titles.txt @@ -1,6 +1,6 @@ namespace Foo // namespace { - public class Greet : Base, Other // class + public class Greet : Base, Other, IInterface.test.path // class { public Greet(string who) // function { From 8853974baf0ed990106d0dbe6d5ee2ee433cdee5 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Fri, 31 Jan 2020 18:50:07 -0500 Subject: [PATCH 3/4] enh(csharp) Support `where` keyword as class constraint --- CHANGES.md | 1 + src/languages/csharp.js | 3 ++- test/markup/csharp/titles.expect.txt | 2 ++ test/markup/csharp/titles.txt | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index e1142c1cab..849f21753a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Core Changes: Language Improvements: +- enh(csharp) Support `where` keyword as class constraint (#2378) [Josh Goebel][] - enh(csharp) Allow reference path in class inheritance lists (#2378) [Josh Goebel][] - enh(csharp) Add generic modifiers (in, out) (#2378) [Josh Goebel][] - (fortran) Add Fortran 2018 keywords and coarray intrinsics (#2361) [Sam Miller][] diff --git a/src/languages/csharp.js b/src/languages/csharp.js index b6cedcbed5..32b2d3ca4d 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -139,8 +139,9 @@ function(hljs) { beginKeywords: 'class interface', end: /[{;=]/, illegal: /[^\s:,]/, contains: [ - GENERIC_MODIFIER, + { beginKeywords: "where class" }, TITLE_MODE, + GENERIC_MODIFIER, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] diff --git a/test/markup/csharp/titles.expect.txt b/test/markup/csharp/titles.expect.txt index d13f5b4836..be471a6db1 100644 --- a/test/markup/csharp/titles.expect.txt +++ b/test/markup/csharp/titles.expect.txt @@ -16,4 +16,6 @@ } } + public class TesterA<R, S> where R : class where S : IComparable + {} } diff --git a/test/markup/csharp/titles.txt b/test/markup/csharp/titles.txt index 6fadb67d4c..802e305e55 100644 --- a/test/markup/csharp/titles.txt +++ b/test/markup/csharp/titles.txt @@ -16,4 +16,6 @@ namespace Foo // namespace } } + public class TesterA where R : class where S : IComparable + {} } From f761a3c6440cc2875cbb63553db4b86678d373a8 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Thu, 6 Feb 2020 16:27:24 -0500 Subject: [PATCH 4/4] remove in and out from main keyword list --- src/languages/csharp.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/languages/csharp.js b/src/languages/csharp.js index 32b2d3ca4d..9952fd22a1 100644 --- a/src/languages/csharp.js +++ b/src/languages/csharp.js @@ -18,9 +18,7 @@ function(hljs) { 'uint ulong unchecked unsafe ushort using virtual void volatile while ' + // Contextual keywords. 'add alias ascending async await by descending dynamic equals from get global group into join ' + - 'let nameof on orderby partial remove select set value var when where yield ' + - // generic modifiers - 'in out', + 'let nameof on orderby partial remove select set value var when where yield', literal: 'null false true' };