Project

General

Profile

Actions

Feature #21573

open

Simpler syntax errors

Added by kddnewton (Kevin Newton) about 7 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:123252]

Description

Right now both the prism and parse.y parsers add some context to syntax errors to make it easier to understand where they are coming from. This works well for humans, but is tough for tools (see https://github.com/ruby/prism/issues/3455 for some additional context). I would like to propose a feature that can be enabled via environment variable (or some other mechanism like a configure switch) that makes syntax errors output minimal information (i.e., file:line:col: message).

The diff would be fairly small for prism, below is the entirety of the change:

diff --git a/prism_compile.c b/prism_compile.c
index 578e6f240f..d14c23eb94 100644
--- a/prism_compile.c
+++ b/prism_compile.c
@@ -11018,13 +11018,15 @@ pm_parse_process_error(const pm_parse_result_t *result)
         (parser->error_list.size > 1) ? "s" : ""
     );
 
-    if (valid_utf8) {
+    if (!getenv("SIMPLE_ERRORS") && valid_utf8) {
         pm_parse_errors_format(parser, &parser->error_list, &buffer, highlight, true);
     }
     else {
         for (const pm_diagnostic_t *error = head; error != NULL; error = (const pm_diagnostic_t *) error->node.next) {
             if (error != head) pm_buffer_append_byte(&buffer, '\n');
-            pm_buffer_append_format(&buffer, "%.*s:%" PRIi32 ": %s", (int) pm_string_length(filepath), pm_string_source(filepath), (int32_t) pm_location_line_number(parser, &error->location), error->message);
+
+            pm_line_column_t location = pm_newline_list_line_column(&parser->newline_list, error->location.start, parser->start_line);
+            pm_buffer_append_format(&buffer, "%.*s:%" PRIi32 ":%" PRIu32 ": %s", (int) pm_string_length(filepath), pm_string_source(filepath), location.line, location.column, error->message);
         }
     }

No data to display

Actions

Also available in: Atom PDF

Like0