git/t/chainlint/nested-loop-detect-failure.expect
Eric Sunshine e44f15ba3e chainlint: make error messages self-explanatory
The annotations emitted by chainlint to indicate detected problems are
overly terse, so much so that developers new to the project -- those who
should most benefit from the linting -- may find them baffling. For
instance, although the author of chainlint and seasoned Git developers
may understand that "?!AMP?!" is an abbreviation of "ampersand" and
indicates a break in the &&-chain, this may not be obvious to newcomers.

The "?!LOOP?!" case is particularly serious because that terse single
word does nothing to convey that the loop body should end with
"|| return 1" (or "|| exit 1" in a subshell) to ensure that a failing
command in the body aborts the loop immediately. Moreover, unlike
&&-chaining which is ubiquitous in Git tests, the "|| return 1" idiom is
relatively infrequent, thus may be harder for a newcomer to discover by
consulting nearby code.

Address these shortcomings by emitting human-readable messages which
both explain the problem and give a strong hint about how to correct it.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-09-10 10:01:40 -07:00

32 lines
661 B
Plaintext

2 for i in 0 1 2 3 4 5 6 7 8 9;
3 do
4 for j in 0 1 2 3 4 5 6 7 8 9;
5 do
6 echo "$i$j" >"path$i$j" ?!LINT: missing '|| return 1'?!
7 done ?!LINT: missing '|| return 1'?!
8 done &&
9
10 for i in 0 1 2 3 4 5 6 7 8 9;
11 do
12 for j in 0 1 2 3 4 5 6 7 8 9;
13 do
14 echo "$i$j" >"path$i$j" || return 1
15 done
16 done &&
17
18 for i in 0 1 2 3 4 5 6 7 8 9;
19 do
20 for j in 0 1 2 3 4 5 6 7 8 9;
21 do
22 echo "$i$j" >"path$i$j" ?!LINT: missing '|| return 1'?!
23 done || return 1
24 done &&
25
26 for i in 0 1 2 3 4 5 6 7 8 9;
27 do
28 for j in 0 1 2 3 4 5 6 7 8 9;
29 do
30 echo "$i$j" >"path$i$j" || return 1
31 done || return 1
32 done