-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds support for the Zig language. https://ziglang.org/
- Loading branch information
1 parent
d03d19b
commit a7cf56b
Showing
13 changed files
with
1,441 additions
and
1 deletion.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
(function (Prism) { | ||
|
||
var keyword = /\b(?:align|allowzero|and|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\b/; | ||
|
||
var IDENTIFIER = '\\b(?!' + keyword.source + ')(?!\\d)\\w+\\b'; | ||
var ALIGN = /align\s*\((?:[^()]|\([^()]*\))*\)/.source; | ||
var PREFIX_TYPE_OP = /(?:\?|\bpromise->|(?:\[[^[\]]*\]|\*(?!\*)|\*\*)(?:\s*<ALIGN>|\s*const\b|\s*volatile\b|\s*allowzero\b)*)/.source.replace(/<ALIGN>/g, ALIGN); | ||
var SUFFIX_EXPR = /(?:\bpromise\b|(?:\berror\.)?<ID>(?:\.<ID>)*(?!\s+<ID>))/.source.replace(/<ID>/g, IDENTIFIER); | ||
var TYPE = '(?!\\s)(?:!?\\s*(?:' + PREFIX_TYPE_OP + '\\s*)*' + SUFFIX_EXPR + ')+'; | ||
|
||
/* | ||
* A simplified grammar for Zig compile time type literals: | ||
* | ||
* TypeExpr = ( "!"? PREFIX_TYPE_OP* SUFFIX_EXPR )+ | ||
* | ||
* SUFFIX_EXPR = ( \b "promise" \b | ( \b "error" "." )? IDENTIFIER ( "." IDENTIFIER )* (?! \s+ IDENTIFIER ) ) | ||
* | ||
* PREFIX_TYPE_OP = "?" | ||
* | \b "promise" "->" | ||
* | ( "[" [^\[\]]* "]" | "*" | "**" ) ( ALIGN | "const" \b | "volatile" \b | "allowzero" \b )* | ||
* | ||
* ALIGN = "align" "(" ( [^()] | "(" [^()]* ")" )* ")" | ||
* | ||
* IDENTIFIER = \b (?! KEYWORD ) [a-zA-Z_] \w* \b | ||
* | ||
*/ | ||
|
||
Prism.languages.zig = { | ||
'comment': [ | ||
{ | ||
pattern: /\/{3}.*/, | ||
alias: 'doc-comment' | ||
}, | ||
/\/{2}.*/ | ||
], | ||
'string': [ | ||
{ | ||
// "string" and c"string" | ||
pattern: /(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/, | ||
lookbehind: true, | ||
greedy: true | ||
}, | ||
{ | ||
// multiline strings and c-strings | ||
pattern: /([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/, | ||
lookbehind: true, | ||
greedy: true | ||
}, | ||
{ | ||
// characters 'a', '\n', '\xFF', '\u{10FFFF}' | ||
pattern: /(^|[^\\])'(?:[^'\\\r\n]|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/, | ||
lookbehind: true, | ||
greedy: true | ||
} | ||
], | ||
'builtin': /\B@(?!\d)\w+(?=\s*\()/, | ||
'label': { | ||
pattern: /(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/, | ||
lookbehind: true | ||
}, | ||
'class-name': [ | ||
// const Foo = struct {}; | ||
/\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/, | ||
{ | ||
// const x: i32 = 9; | ||
// var x: Bar; | ||
// fn foo(x: bool, y: f32) void {} | ||
pattern: RegExp(/(:\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?[=;,)])|<TYPE>(?=\s*(?:<ALIGN>\s*)?\{)/.source.replace(/<TYPE>/g, TYPE).replace(/<ALIGN>/g, ALIGN)), | ||
lookbehind: true, | ||
inside: null // see below | ||
}, | ||
{ | ||
// extern fn foo(x: f64) f64; (optional alignment) | ||
pattern: RegExp(/(\)\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?;)/.source.replace(/<TYPE>/g, TYPE).replace(/<ALIGN>/g, ALIGN)), | ||
lookbehind: true, | ||
inside: null // see below | ||
} | ||
], | ||
'builtin-types': { | ||
pattern: /\b(?:anyerror|bool|c_u?(?:short|int|long|longlong)|c_longdouble|c_void|comptime_(?:float|int)|[iu](?:8|16|32|64|128|size)|f(?:16|32|64|128)|noreturn|type|void)\b/, | ||
alias: 'keyword' | ||
}, | ||
'keyword': keyword, | ||
'function': /\b(?!\d)\w+(?=\s*\()/, | ||
'number': /\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+\.?[a-fA-F\d]*(?:[pP][+-]?[a-fA-F\d]+)?|\d+\.?\d*(?:[eE][+-]?\d+)?)\b/, | ||
'boolean': /\b(?:false|true)\b/, | ||
'operator': /\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/, | ||
'punctuation': /[.:,;(){}[\]]/ | ||
}; | ||
|
||
Prism.languages.zig['class-name'].forEach(function (obj) { | ||
if (obj.inside === null) { | ||
obj.inside = Prism.languages.zig; | ||
} | ||
}); | ||
|
||
}(Prism)); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<h2>Full example</h2> | ||
<pre><code>const std = @import("std"); | ||
|
||
pub fn main() !void { | ||
// If this program is run without stdout attached, exit with an error. | ||
const stdout_file = try std.io.getStdOut(); | ||
// If this program encounters pipe failure when printing to stdout, exit | ||
// with an error. | ||
try stdout_file.write("Hello, world!\n"); | ||
} | ||
|
||
const warn = @import("std").debug.warn; | ||
|
||
pub fn main() void { | ||
warn("Hello, world!\n"); | ||
} | ||
|
||
const assert = @import("std").debug.assert; | ||
|
||
test "comments" { | ||
// Comments in Zig start with "//" and end at the next LF byte (end of line). | ||
// The below line is a comment, and won't be executed. | ||
|
||
//assert(false); | ||
|
||
const x = true; // another comment | ||
assert(x); | ||
} | ||
|
||
/// A structure for storing a timestamp, with nanosecond precision (this is a | ||
/// multiline doc comment). | ||
const Timestamp = struct { | ||
/// The number of seconds since the epoch (this is also a doc comment). | ||
seconds: i64, // signed so we can represent pre-1970 (not a doc comment) | ||
/// The number of nanoseconds past the second (doc comment again). | ||
nanos: u32, | ||
|
||
/// Returns a `Timestamp` struct representing the Unix epoch; that is, the | ||
/// moment of 1970 Jan 1 00:00:00 UTC (this is a doc comment too). | ||
pub fn unixEpoch() Timestamp { | ||
return Timestamp{ | ||
.seconds = 0, | ||
.nanos = 0, | ||
}; | ||
} | ||
};</code></pre> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
i8 | ||
u8 | ||
i16 | ||
u16 | ||
i32 | ||
u32 | ||
i64 | ||
u64 | ||
i128 | ||
u128 | ||
isize | ||
usize | ||
c_short | ||
c_ushort | ||
c_int | ||
c_uint | ||
c_long | ||
c_ulong | ||
c_longlong | ||
c_ulonglong | ||
c_longdouble | ||
c_void | ||
f16 | ||
f32 | ||
f64 | ||
f128 | ||
bool | ||
void | ||
noreturn | ||
type | ||
anyerror | ||
comptime_int | ||
comptime_float | ||
|
||
---------------------------------------------------- | ||
|
||
[ | ||
["builtin-types", "i8"], | ||
["builtin-types", "u8"], | ||
["builtin-types", "i16"], | ||
["builtin-types", "u16"], | ||
["builtin-types", "i32"], | ||
["builtin-types", "u32"], | ||
["builtin-types", "i64"], | ||
["builtin-types", "u64"], | ||
["builtin-types", "i128"], | ||
["builtin-types", "u128"], | ||
["builtin-types", "isize"], | ||
["builtin-types", "usize"], | ||
["builtin-types", "c_short"], | ||
["builtin-types", "c_ushort"], | ||
["builtin-types", "c_int"], | ||
["builtin-types", "c_uint"], | ||
["builtin-types", "c_long"], | ||
["builtin-types", "c_ulong"], | ||
["builtin-types", "c_longlong"], | ||
["builtin-types", "c_ulonglong"], | ||
["builtin-types", "c_longdouble"], | ||
["builtin-types", "c_void"], | ||
["builtin-types", "f16"], | ||
["builtin-types", "f32"], | ||
["builtin-types", "f64"], | ||
["builtin-types", "f128"], | ||
["builtin-types", "bool"], | ||
["builtin-types", "void"], | ||
["builtin-types", "noreturn"], | ||
["builtin-types", "type"], | ||
["builtin-types", "anyerror"], | ||
["builtin-types", "comptime_int"], | ||
["builtin-types", "comptime_float"] | ||
] | ||
|
||
---------------------------------------------------- | ||
|
||
Checks for builtin types. |
Oops, something went wrong.