Add ODIN_TEST_GO_TO_ERROR to print test fail locations in a manner friendly to go-to error in editors

This commit is contained in:
Jeroen van Rijn
2025-11-01 16:11:43 +01:00
parent f005136592
commit 6ea7bdbbe5
2 changed files with 29 additions and 2 deletions

View File

@@ -83,7 +83,31 @@ format_log_text :: proc(level: runtime.Logger_Level, text: string, options: runt
log.do_level_header(options, &buf, level)
log.do_time_header(options, &buf, at_time)
log.do_location_header(options, &buf, location)
when GO_TO_ERROR {
do_go_to_error_friendly_location(options, &buf, location)
} else {
log.do_location_header(options, &buf, location)
}
return fmt.aprintf("%s%s", strings.to_string(buf), text, allocator = allocator)
}
do_go_to_error_friendly_location :: proc(opts: log.Options, buf: ^strings.Builder, location := #caller_location) {
if log.Location_Header_Opts & opts == nil {
return
}
fmt.sbprint(buf, "\n")
file := location.file_path
fmt.sbprint(buf, file)
fmt.sbprint(buf, "(")
fmt.sbprint(buf, location.line)
fmt.sbprint(buf, ":")
fmt.sbprint(buf, location.column)
fmt.sbprint(buf, ")")
if .Procedure in opts {
fmt.sbprintf(buf, ":%s()", location.procedure)
}
fmt.sbprint(buf, " ")
}

View File

@@ -63,6 +63,9 @@ LOG_STATE_CHANGES : bool : #config(ODIN_TEST_LOG_STATE_CHANGES, false)
USING_SHORT_LOGS : bool : #config(ODIN_TEST_SHORT_LOGS, false)
// Output a report of the tests to the given path.
JSON_REPORT : string : #config(ODIN_TEST_JSON_REPORT, "")
// Print the full file path for failed test cases on a new line
// in a way that's friendly to regex capture for an editor's "go to error".
GO_TO_ERROR : bool : #config(ODIN_TEST_GO_TO_ERROR, false)
get_log_level :: #force_inline proc() -> runtime.Logger_Level {
when LOG_LEVEL == "debug" { return .Debug } else