On Thu, Nov 12, 2015 at 1:28 AM, Allan McRae <[email protected]> wrote:
>> This does not catch bad variables in the package() arrays.
Thank you for the feedback, Allan! I forgot that variables can be redefined in
the package() function and could be defined to bad types at that time. How
about we use my original patch but add a call to lint_variable right after
package (or similar) is called? (Also I should fix it to use tabs as
indentation.) The downside is that someone might build a giant package and
then later find out that it fails linting at the very last step, but I think
they could use "pacman --repackage" if they want to save time, and I think they
would also forgive you for not catching errors in code that has not executed
yet.
If that sounds good to you, I will work on a new patch that does that.
> + if grep -q -e "^[[:space:]]*$i=[^(]" -e
> "^[[:space:]]*$i+=[^(]" "$BUILDSCRIPT"; then
Your patch violate's pacman's 80-character line length convention, and it got
wrapped by your mail client. I tested your new patch, and it does fix the bugs
I was complaining about in my original message, but there are still false
positives and false negatives.
False positives:
make \
arch=${_arch}
False negative:
eval lic""ense=bad
Of course, these are contrived cases that I made up. But if we had a way to
download all of Arch Linux's PKGBUILDs we might find some real issues. Since
bash is a complex language, I think that attempting to do static analysis of it
with a few regular expressions will always have problems.
--David