git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] chainlint: make error messages self-explanatory

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 29, 2024, 15:39 UTC
Message-ID
<xmqq7cbzxrry.fsf@gitster.g>
In-Reply-To
<20240829091625.41297-2-ericsunshine@charter.net>
Eric Sunshine <ericsunshine@charter.net> writes:
Show 6 quoted lines
> "?!LOOP?!" case is particularly serious since it is likely that some
> newcomers are unaware that shell loops do not terminate automatically
> upon error, and it is more difficult for a newcomer to figure out how to
> correct the problem by examining surrounding code since `|| return 1`
> appears in test scrips relatively infrequently (compared, for instance,
> with &&-chaining).
"scrips" -> "scripts"

I'd prefer to see "some newcomes are unaware that" part rewritten and toned down, as it is not our primary business to help total newbies to learn shells, it certainly is not what the chain lint checker should bend over backwards to do.

    ... particularly serious, as it does not convey that returning
    control with "|| return 1" (or "|| exit 1" from a subshell)
    immediately after we detect an error is the canonical way we
    chose in this project to handle errors in a loop.  Because it
    happens relatively infrequently, this norm is harder to figure
    out for a new person on their own than other patterns (like
    &&-chaining).
> Address these shortcomings by emitting human-consumable messages which
> both explain the problem and give a strong hint about how to correct it.
"consumable" -> "readable".
Show 9 quoted lines
>
> Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
> ...
>  # Input arguments are pathnames of shell scripts containing test definitions,
>  # or globs referencing a collection of scripts. For each problem discovered,
>  # the pathname of the script containing the test is printed along with the test
> -# name and the test body with a `?!FOO?!` annotation at the location of each
> +# name and the test body with a `?!ERR?!` annotation at the location of each
>  # detected problem, where "FOO" is a tag such as "AMP" which indicates a broken
"FOO" -> "ERR"?
Show 26 quoted lines
> @@ -619,6 +623,15 @@ sub unwrap {
>  	return $s
>  }
>  
> +sub format_problem {
> +	local $_ = shift;
> +	/^AMP$/ && return "missing '&&'";
> +	/^LOOPRETURN$/ && return "missing '|| return 1'";
> +	/^LOOPEXIT$/ && return "missing '|| exit 1'";
> +	/^HEREDOC$/ && return 'unclosed heredoc';
> +	die("unrecognized problem type '$_'\n");
> +}
> +
>  sub check_test {
>  	my $self = shift @_;
>  	my $title = unwrap(shift @_);
> @@ -641,7 +654,8 @@ sub check_test {
>  	for (sort {$a->[1]->[2] <=> $b->[1]->[2]} @$problems) {
>  		my ($label, $token) = @$_;
>  		my $pos = $token->[2];
> -		$checked .= substr($body, $start, $pos - $start) . " ?!$label?! ";
> +		my $err = format_problem($label, $token);
> +		$checked .= substr($body, $start, $pos - $start) . " ?!ERR $err?! ";
>  		$start = $pos;
>  	}
>  	$checked .= substr($body, $start);

With the hunks omitted before the above two that let us tell between RETURN vs EXIT, the above two makes the problems much easier to read.

All the "examples" (self tests) and changes to them looked sensible.
Thanks.
Previous: Eric SunshineNext: Eric Sunshine
Message 7 of 29 in “make chainlint output more newcomer-friendly”
  1. 0/2 make chainlint output more newcomer-friendlyEric Sunshine, Aug 29, 2024
  2. 1/2 chainlint: make error messages self-explanatoryEric Sunshine, Aug 29, 2024
  3. Patrick SteinhardtAug 29, 2024
  4. Jeff KingAug 29, 2024
  5. Eric SunshineAug 29, 2024
  6. Eric SunshineAug 29, 2024
  7. Junio C HamanoAug 29, 2024
  8. Eric SunshineAug 29, 2024
  9. Junio C HamanoAug 30, 2024
  10. 2/2 chainlint: reduce annotation noise-factorEric Sunshine, Aug 29, 2024
  11. Patrick SteinhardtAug 29, 2024
  12. Jeff KingAug 29, 2024
  13. Eric SunshineAug 29, 2024
  14. Eric SunshineAug 29, 2024
  15. Junio C HamanoAug 29, 2024
  16. Eric SunshineAug 30, 2024
  17. Junio C HamanoAug 30, 2024
  18. 0/3 make chainlint output more newcomer-friendlyEric Sunshine, Sep 10, 2024
  19. 1/3 chainlint: don't be fooled by "?!...?!" in test bodyEric Sunshine, Sep 10, 2024
  20. Junio C HamanoSep 10, 2024
  21. 2/3 chainlint: make error messages self-explanatoryEric Sunshine, Sep 10, 2024
  22. Patrick SteinhardtSep 10, 2024
  23. 3/3 chainlint: reduce annotation noise-factorEric Sunshine, Sep 10, 2024
  24. Patrick SteinhardtSep 10, 2024
  25. Eric SunshineSep 10, 2024
  26. Junio C HamanoSep 10, 2024
  27. Eric SunshineSep 10, 2024
  28. Jeff KingSep 10, 2024
  29. Junio C HamanoSep 10, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.