mirror of
https://github.com/sharkdp/bat.git
synced 2024-11-01 04:21:01 +01:00
c76e27851c
Adds syntax support for source code for the Zig programming language. https://ziglang.org/
108 lines
2.4 KiB
Zig
Vendored
108 lines
2.4 KiB
Zig
Vendored
//! this is a top level doc, starts with "//!"
|
|
|
|
const std = @import("std");
|
|
|
|
pub fn main() anyerror!void {
|
|
const stdout = std.io.getStdOut().writer();
|
|
try stdout.print("Hello, {}!\n", .{"world"});
|
|
}
|
|
|
|
const expect = std.testing.expect;
|
|
|
|
test "comments" {
|
|
// comments start with "//" until newline
|
|
// foo bar baz
|
|
const x = true; // another comment
|
|
expect(x);
|
|
}
|
|
|
|
/// a doc comment starts with "///"
|
|
/// multiple lines are merged together
|
|
const Timestamp = struct {
|
|
/// number of seconds since epoch
|
|
seconds: i64,
|
|
|
|
/// number of nanoseconds past the second
|
|
nano: u32,
|
|
|
|
const Self = @This();
|
|
|
|
pub fn unixEpoch() Self {
|
|
return Self{
|
|
.seconds = 0,
|
|
.nanos = 0,
|
|
};
|
|
}
|
|
};
|
|
|
|
const my_val = switch (std.Target.current.os.tag) {
|
|
.linux => "Linux",
|
|
else => "not Linux",
|
|
};
|
|
|
|
const Book = enum {
|
|
paperback,
|
|
hardcover,
|
|
ebook,
|
|
pdf,
|
|
};
|
|
|
|
const TokenType = union(enum) {
|
|
int: isize,
|
|
float: f64,
|
|
string: []const u8,
|
|
};
|
|
|
|
const array_lit: [4]u8 = .{ 11, 22, 33, 44 };
|
|
const sentinal_lit = [_:0]u8{ 1, 2, 3, 4 };
|
|
|
|
test "address of syntax" {
|
|
// Get the address of a variable:
|
|
const x: i32 = 1234;
|
|
const x_ptr = &x;
|
|
|
|
// Dereference a pointer:
|
|
expect(x_ptr.* == 1234);
|
|
|
|
// When you get the address of a const variable, you get a const pointer to a single item.
|
|
expect(@TypeOf(x_ptr) == *const i32);
|
|
|
|
// If you want to mutate the value, you'd need an address of a mutable variable:
|
|
var y: i32 = 5678;
|
|
const y_ptr = &y;
|
|
expect(@TypeOf(y_ptr) == *i32);
|
|
y_ptr.* += 1;
|
|
expect(y_ptr.* == 5679);
|
|
}
|
|
|
|
// integer literals
|
|
const decimal_int = 98222;
|
|
const hex_int = 0xff;
|
|
const another_hex_int = 0xFF;
|
|
const octal_int = 0o755;
|
|
const binary_int = 0b11110000;
|
|
|
|
// underscores may be placed between two digits as a visual separator
|
|
const one_billion = 1_000_000_000;
|
|
const binary_mask = 0b1_1111_1111;
|
|
const permissions = 0o7_5_5;
|
|
const big_address = 0xFF80_0000_0000_0000;
|
|
|
|
// float literals
|
|
const floating_point = 123.0E+77;
|
|
const another_float = 123.0;
|
|
const yet_another = 123.0e+77;
|
|
|
|
const hex_floating_point = 0x103.70p-5;
|
|
const another_hex_float = 0x103.70;
|
|
const yet_another_hex_float = 0x103.70P-5;
|
|
|
|
// underscores may be placed between two digits as a visual separator
|
|
const lightspeed = 299_792_458.000_000;
|
|
const nanosecond = 0.000_000_001;
|
|
const more_hex = 0x1234_5678.9ABC_CDEFp-10;
|
|
|
|
fn max(comptime T: type, a: T, b: T) T {
|
|
return if (a > b) a else b;
|
|
}
|