Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enh(csharp) Add all v9 keywords, and other missing keywords #2679

Merged
merged 5 commits into from
Sep 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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