Skip to content

Commit

Permalink
enh(csharp) Add all v9 keywords, and other missing keywords (#2679)
Browse files Browse the repository at this point in the history
* Added C# 9 keywords, and other missing keywords. 

- Improved organization, and added built-ins
  • Loading branch information
IEvangelist committed Sep 10, 2020
1 parent da7d149 commit d7b1ede
Show file tree
Hide file tree
Showing 11 changed files with 154 additions and 29 deletions.
1 change: 1 addition & 0 deletions AUTHORS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -288,3 +288,4 @@ Contributors:
- Alexandre Grison <a.grison@gmail.com>
- Jim Mason <jmason@ibinx.com>
- lioshi <lioshi@lioshi.com>
- David Pine <david.pine.7@gmail.com>
10 changes: 9 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## Version 10.3.0 (next up)

Language Improvements:

- Add all C# 9 keywords, and other missing keywords (#2679) [David Pine][]

[David Pine]: https://github.com/IEvangelist

## Version 10.2.0

Parser Engine:
Expand Down Expand Up @@ -1397,7 +1405,7 @@ New languages:
- *Protocol Buffers* by [Dan Tao][]
- *Nix* by [Domen Kožar][]
- *x86asm* by [innocenat][]
- *Capn Proto* and *Thrift* by [Oleg Efimov][]
- *Cap'n Proto* and *Thrift* by [Oleg Efimov][]
- *Monkey* by [Arthur Bikmullin][]
- *TypeScript* by [Panu Horsmalahti][]
- *Nimrod* by [Flaviu Tamas][]
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"syntax"
],
"homepage": "https://highlightjs.org/",
"version": "10.2.0",
"version": "10.2.1",
"author": {
"name": "Ivan Sagalaev",
"email": "maniac@softwaremaniacs.org"
Expand Down
140 changes: 126 additions & 14 deletions src/languages/csharp.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,139 @@
/*
Language: C#
Author: Jason Diamond <jason@diamond.name>
Contributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>
Contributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>
Website: https://docs.microsoft.com/en-us/dotnet/csharp/
Category: common
*/

/** @type LanguageFn */
export default function(hljs) {
var BUILT_IN_KEYWORDS = [
'bool',
'byte',
'char',
'decimal',
'delegate',
'double',
'dynamic',
'enum',
'float',
'int',
'long',
'nint',
'nuint',
'object',
'sbyte',
'short',
'string',
'ulong',
'unit',
'ushort'
];
var LITERAL_KEYWORDS = [
'default',
'false',
'null',
'true'
];
var NORMAL_KEYWORDS = [
'abstract',
'as',
'base',
'break',
'case',
'class',
'const',
'continue',
'do',
'else',
'event',
'explicit',
'extern',
'finally',
'fixed',
'for',
'foreach',
'goto',
'if',
'implicit',
'in',
'interface',
'internal',
'is',
'lock',
'namespace',
'new',
'operator',
'out',
'override',
'params',
'private',
'protected',
'public',
'readonly',
'record',
'ref',
'return',
'sealed',
'sizeof',
'stackalloc',
'static',
'struct',
'switch',
'this',
'throw',
'try',
'typeof',
'unchecked',
'unsafe',
'using',
'virtual',
'void',
'volatile',
'while'
];
var CONTEXTUAL_KEYWORDS = [
'add',
'alias',
'and',
'ascending',
'async',
'await',
'by',
'descending',
'equals',
'from',
'get',
'global',
'group',
'init',
'into',
'join',
'let',
'nameof',
'not',
'notnull',
'on',
'or',
'orderby',
'partial',
'remove',
'select',
'set',
'unmanaged',
'value',
'var',
'when',
'where',
'with',
'yield'
];

var KEYWORDS = {
keyword:
// Normal keywords.
'abstract as base bool break byte case catch char checked const continue decimal ' +
'default delegate do double enum event explicit extern finally fixed float ' +
'for foreach goto if implicit in init int interface internal is lock long ' +
'object operator out override params private protected public readonly ref sbyte ' +
'sealed short sizeof stackalloc static string struct switch this try typeof ' +
'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',
literal:
'null false true'
keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS).join(' '),
built_in: BUILT_IN_KEYWORDS.join(' '),
literal: LITERAL_KEYWORDS.join(' ')
};
var TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, {begin: '[a-zA-Z](\\.?\\w)*'});
var NUMBERS = {
Expand Down
8 changes: 4 additions & 4 deletions test/markup/csharp/floats.expect.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<span class="hljs-keyword">float</span> test = <span class="hljs-number">1.0f</span>;
<span class="hljs-keyword">float</span> test2 = <span class="hljs-number">1.f</span>;
<span class="hljs-keyword">float</span> test3 = <span class="hljs-number">1.0</span>;
<span class="hljs-keyword">float</span> test4 = <span class="hljs-number">1</span>;
<span class="hljs-built_in">float</span> test = <span class="hljs-number">1.0f</span>;
<span class="hljs-built_in">float</span> test2 = <span class="hljs-number">1.f</span>;
<span class="hljs-built_in">float</span> test3 = <span class="hljs-number">1.0</span>;
<span class="hljs-built_in">float</span> test4 = <span class="hljs-number">1</span>;
4 changes: 2 additions & 2 deletions test/markup/csharp/functions.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">ExampleFunctionDeclaration2</span>(<span class="hljs-params"></span>)</span>
;

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> <span class="hljs-title">ExampleExpressionBodiedFunction1</span>(<span class="hljs-params"></span>)</span> =&gt; <span class="hljs-string">&quot;dummy&quot;</span>;
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-built_in">string</span> <span class="hljs-title">ExampleExpressionBodiedFunction1</span>(<span class="hljs-params"></span>)</span> =&gt; <span class="hljs-string">&quot;dummy&quot;</span>;

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> <span class="hljs-title">ExampleExpressionBodiedFunction2</span>(<span class="hljs-params"></span>)</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-built_in">string</span> <span class="hljs-title">ExampleExpressionBodiedFunction2</span>(<span class="hljs-params"></span>)</span>
=&gt; <span class="hljs-string">&quot;dummy&quot;</span>;
4 changes: 2 additions & 2 deletions test/markup/csharp/generic_modifiers.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<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-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-built_in">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">public</span> <span class="hljs-built_in">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: 3 additions & 1 deletion test/markup/csharp/records.expect.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<span class="hljs-keyword">public</span> <span class="hljs-keyword">record</span> <span class="hljs-title">MyRecord</span>
{
<span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> SomeMember { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; }
<span class="hljs-keyword">public</span> <span class="hljs-built_in">string</span> SomeMember { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">init</span>; }
}

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">record</span> <span class="hljs-title">Person</span>(<span class="hljs-params"><span class="hljs-built_in">string</span> FirstName, <span class="hljs-built_in">string</span>? MiddleName, <span class="hljs-built_in">string</span> LastName</span>)</span>;
4 changes: 3 additions & 1 deletion test/markup/csharp/records.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
public record MyRecord
{
public string SomeMember { get; set; }
public string SomeMember { get; init; }
}

public record Person(string FirstName, string? MiddleName, string LastName);
4 changes: 2 additions & 2 deletions test/markup/csharp/titles.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
{
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Greet</span> : <span class="hljs-title">Base</span>, <span class="hljs-title">Other</span>, <span class="hljs-title">IInterface.test.path</span> <span class="hljs-comment">// class</span>
{
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Greet</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> who</span>) <span class="hljs-comment">// function</span></span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Greet</span>(<span class="hljs-params"><span class="hljs-built_in">string</span> who</span>) <span class="hljs-comment">// function</span></span>
{
Who = who;
}

<span class="hljs-function"><span class="hljs-keyword">int</span>[] <span class="hljs-title">f</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> val = <span class="hljs-number">0</span></span>)</span>
<span class="hljs-function"><span class="hljs-built_in">int</span>[] <span class="hljs-title">f</span>(<span class="hljs-params"><span class="hljs-built_in">int</span> val = <span class="hljs-number">0</span></span>)</span>
{
<span class="hljs-keyword">new</span> Type();
<span class="hljs-keyword">return</span> getType();
Expand Down

0 comments on commit d7b1ede

Please sign in to comment.