allocator-first-param
Style
What This Rule Does
Checks that functions taking allocators as parameters have the allocator as the first parameter. This conforms to common Zig conventions.
Rule Details
This rule looks for functions take an Allocator
parameter and reports a
violation if
- it is not the first parameter, or
- there is a
self
parameter, and the allocator does not immediately follow it.
Parameters are considered to be an allocator if
- the are named
allocator
,alloc
,gpa
, orarena
, or one of those with leading/trailing underscores, - their type ends with
Allocator
Parameters are considered to be a self
parameter if
- they are named
self
,this
, or one of those with leading/trailing underscores. - their type is
@This()
,*@This()
, etc. - their type is a Capitalized and the function is within the definition of a similarly named container (e.g. a struct).
Examples
Examples of incorrect code for this rule:
fn foo(x: u32, allocator: Allocator) !*u32 {
const heap_x = try allocator.create(u32);
heap_x.* = x;
return heap_x;
}
Examples of correct code for this rule:
fn foo(allocator: Allocator, x: u32) !*u32 {
const heap_x = try allocator.create(u32);
heap_x.* = x;
return heap_x;
}
const Foo = struct {
list: std.ArrayListUnmanaged(u32) = .{},
// when writing methods, `self` must be the first parameter
pub fn expandCapacity(self: *Foo, allocator: Allocator, new_len: usize) !void {
try self.list.ensureTotalCapacity(allocator, new_len);
}
};
Configuration
This rule accepts the following options:
- ignore: array