Functions: Format Strings
The Hack typechecker can also check that format strings are being used correctly.
// Correct.
Str\format("First: %d, second: %s", 1, "foo");
// Typechecker error: Too few arguments for format string.
Str\format("First: %d, second: %s", 1);
This requires that the format string argument is a string literal.
$s = "Number is: %d";
// Typechecker error: Only string literals are allowed here.
Str\format($s, 1);
Defining Functions with Format Strings
You can define your own functions with format string arguments too.
function takes_format_string(
\HH\FormatString<\PlainSprintf> $format,
mixed ...$args
): void {}
function use_it(): void {
takes_format_string("First: %d, second: %s", 1, "foo");
}
HH\FormatString<PlainSprintf>
will check that you've used the right
number of arguments. HH\FormatString<Str\SprintfFormat>
will also
check that arguments match the type in the format string.