Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › compiler/ › resinator/ › cli.zig › renderErrorMessage
renderErrorMessage
cli.renderErrorMessage
pub fn renderErrorMessage (t : Io .Terminal , err_details : Diagnostics .ErrorDetails , args : []const []const u8 ) !void
File
Code
pub fn renderErrorMessage (t : Io .Terminal , err_details : Diagnostics .ErrorDetails , args : []const []const u8 ) !void {
const writer = t .writer ;
try t .setColor (.dim );
try writer .writeAll ("<cli>" );
try t .setColor (.reset );
try t .setColor (.bold );
try writer .writeAll (": " );
switch (err_details .type ) {
.err => {
try t .setColor (.red );
try writer .writeAll ("error: " );
},
.warning => {
try t .setColor (.yellow );
try writer .writeAll ("warning: " );
},
.note => {
try t .setColor (.cyan );
try writer .writeAll ("note: " );
},
}
try t .setColor (.reset );
try t .setColor (.bold );
try writer .writeAll (err_details .msg .items );
try writer .writeByte ('\n' );
try t .setColor (.reset );
if (!err_details .print_args ) {
try writer .writeByte ('\n' );
return ;
}
try t .setColor (.dim );
const prefix = " ... " ;
try writer .writeAll (prefix );
try t .setColor (.reset );
const arg_with_name = args [err_details .arg_index ];
const prefix_slice = arg_with_name [0 ..err_details .arg_span .prefix_len ];
const before_name_slice = arg_with_name [err_details .arg_span .prefix_len ..err_details .arg_span .name_offset ];
var name_slice = arg_with_name [err_details .arg_span .name_offset ..];
if (err_details .arg_span .name_len > 0 ) name_slice .len = err_details .arg_span .name_len ;
const after_name_slice = arg_with_name [err_details .arg_span .name_offset + name_slice .len ..];
try writer .writeAll (prefix_slice );
if (before_name_slice .len > 0 ) {
try t .setColor (.dim );
try writer .writeAll (before_name_slice );
try t .setColor (.reset );
}
try writer .writeAll (name_slice );
if (after_name_slice .len > 0 ) {
try t .setColor (.dim );
try writer .writeAll (after_name_slice );
try t .setColor (.reset );
}
var next_arg_len : usize = 0 ;
if (err_details .arg_span .point_at_next_arg and err_details .arg_index + 1 < args .len ) {
const next_arg = args [err_details .arg_index + 1 ];
try writer .writeByte (' ' );
try writer .writeAll (next_arg );
next_arg_len = next_arg .len ;
}
const last_shown_arg_index = if (err_details .arg_span .point_at_next_arg ) err_details .arg_index + 1 else err_details .arg_index ;
if (last_shown_arg_index + 1 < args .len ) {
// as the name
if (err_details .arg_span .value_offset >= arg_with_name .len ) {
try writer .writeByte (' ' );
}
try t .setColor (.dim );
try writer .writeAll (" ..." );
try t .setColor (.reset );
}
try writer .writeByte ('\n' );
try t .setColor (.green );
try writer .splatByteAll (' ' , prefix .len );
if (err_details .arg_span .prefix_len == arg_with_name .len ) {
try writer .splatByteAll ('^' , err_details .arg_span .prefix_len );
} else {
try writer .splatByteAll ('~' , err_details .arg_span .prefix_len );
try writer .splatByteAll (' ' , err_details .arg_span .name_offset - err_details .arg_span .prefix_len );
if (!err_details .arg_span .point_at_next_arg and err_details .arg_span .value_offset == 0 ) {
try writer .writeByte ('^' );
try writer .splatByteAll ('~' , name_slice .len - 1 );
} else if (err_details .arg_span .value_offset > 0 ) {
try writer .splatByteAll ('~' , err_details .arg_span .value_offset - err_details .arg_span .name_offset );
try writer .writeByte ('^' );
if (err_details .arg_span .value_offset < arg_with_name .len ) {
try writer .splatByteAll ('~' , arg_with_name .len - err_details .arg_span .value_offset - 1 );
}
} else if (err_details .arg_span .point_at_next_arg ) {
try writer .splatByteAll ('~' , arg_with_name .len - err_details .arg_span .name_offset + 1 );
try writer .writeByte ('^' );
if (next_arg_len > 0 ) {
try writer .splatByteAll ('~' , next_arg_len - 1 );
}
}
}
try writer .writeByte ('\n' );
try t .setColor (.reset );
}