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 › std/ › zig/ › Ast.zig › tokenLocation
tokenLocation
Ast.tokenLocation
pub fn tokenLocation (self : Ast , start_offset : ByteOffset , token_index : TokenIndex ) Location
File
Code
pub fn tokenLocation (self : Ast , start_offset : ByteOffset , token_index : TokenIndex ) Location {
var loc = Location {
.line = 0 ,
.column = 0 ,
.line_start = start_offset ,
.line_end = self .source .len ,
};
const token_start = self .tokenStart (token_index );
while (std .mem .findScalarPos (u8 , self .source , loc .line_start , '\n' )) |i | {
if (i >= token_start ) {
break ;
}
loc .line += 1 ;
loc .line_start = i + 1 ;
}
const offset = loc .line_start ;
for (self .source [offset ..], 0 ..) |c , i | {
if (i + offset == token_start ) {
loc .line_end = i + offset ;
while (loc .line_end < self .source .len and self .source [loc .line_end ] != '\n' ) {
loc .line_end += 1 ;
}
return loc ;
}
if (c == '\n' ) {
loc .line += 1 ;
loc .column = 0 ;
loc .line_start = i + 1 ;
} else {
loc .column += 1 ;
}
}
return loc ;
}