diff options
Diffstat (limited to 'src/cli/main.c')
-rw-r--r-- | src/cli/main.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/cli/main.c b/src/cli/main.c index db42a14..cbecf50 100644 --- a/src/cli/main.c +++ b/src/cli/main.c @@ -140,15 +140,38 @@ static void print_help(FILE *stream, const char *argv0) { } static void print_handler(const char *message, size_t message_length) { - fprintf(stderr, message, message_length); + fprintf(stdout, message, message_length); +} + +void diagnostic_handler(const SandLocation *location, SandDiagnosticLevel level, const char *message, size_t message_length) { + sand_print_location(stderr, location); + switch (level) { + case SAND_DIAGNOSTIC_INFO: fprintf(stderr, ": info"); break; + case SAND_DIAGNOSTIC_WARNING: fprintf(stderr, ": warning"); break; + case SAND_DIAGNOSTIC_ERROR: fprintf(stderr, ": error"); break; + } + fprintf(stderr, ": %.*s\n", (int)message_length, message); } int main(int argc, char *argv[]) { SandConfig config = { .print_handler = print_handler, + .diagnostic_handler = diagnostic_handler, }; SandState state = sand_create_state(config); + // TEMP + SandLocation loc = { + .filename = "fake.sand", + .start_line = 0, + .start_column = 0, + .end_line = 0, + .end_column = 5, + }; + sand_print_diagnostic(&state, &loc, SAND_DIAGNOSTIC_INFO, "This is a test info message"); + sand_print_diagnostic(&state, &loc, SAND_DIAGNOSTIC_WARNING, "oh no the number is %d", 5); + sand_print_diagnostic(&state, &loc, SAND_DIAGNOSTIC_ERROR, "gaide gad error here %d", 5); + if (argc == 1) { repl(&state); } else if (argc == 2 && strcmp(argv[1], "--help") == 0) { |