On Sat, Mar 25, 2023 at 04:18:54AM -0400, Eric Sunshine wrote: > > 1. Say that the internal linter still has value, and tweak the > > suppression so it only turns off the extra per-script run of > > chainlint.pl, and not the internal one (which is cheap-ish to run). > > This is appealing since the internal linter is nearly zero-cost, > though doing this would not fully address the "recipe for confusion" > since the two linters would still not be in agreement. This approach > does have the benefit that it gives at least _some_ protection (minus > caveats mentioned below) on platforms where it may be common to > disable chainlint.pl due to slowness, such as Windows. I think it's OK if they're not in agreement, as long as both are run. Then the set of problems you need to fix is the union of their outputs. That's conservative, but everybody gets the same answer. The bigger confusion to me is when "make test" and "./t1234-foo.sh" do not agree in their output, which is what happened here. Some people say "everything is good" and some say "no, it is broken", depending on how they ran it. > > 2. Say that the internal linter does not have value, and we should > > rely on chainlint.pl. In which case we might as well ditch the > > internal one completely. > > The value of the internal linter is fairly limited in that it only > checks top-level &&-chain; it doesn't check inside subprocesses, > blocks, or any compound statement (case/esac, if/fi, while/done, > etc.). Right, the chainlint.pl one is much more thorough. I just wondered if there were any cases we were worried about it missing, that the internal one catches. We found one in this thread, but as discussed, it is not a problem (presumably chainlint.pl catches a "real" case where an earlier line is hidden by the "&", but I wouldn't mind seeing it complain here as a matter of style/future-proofing). > I retained the internal linter in place "just in case" (i.e. in the > event the script missed something legitimate), but I don't feel > strongly about it. Certainly the output from chainlint.pl is much nicer, too. :) I think I'd be comfortable dropping the internal one at this point in terms of quality. The bigger question to me is whether there are setups where it isn't run (you mentioned Windows, but I'd have thought the single-process invocation made things nice and fast there). -Peff