1# 2# Automated Testing Framework (atf) 3# 4# Copyright (c) 2007 The NetBSD Foundation, Inc. 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 15# 16# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28# 29 30function warn(msg) { 31 print FILENAME "[" FNR "]: " msg > "/dev/stderr" 32 error = 1 33} 34 35BEGIN { 36 skip = 0 37 error = 0 38 emacs_modeline = 0 39 vim_modeline = 0 40} 41 42/NO_CHECK_STYLE_BEGIN/ { 43 skip = 1 44 next 45} 46 47/NO_CHECK_STYLE_END/ { 48 skip = 0 49 next 50} 51 52/NO_CHECK_STYLE/ { 53 next 54} 55 56{ 57 if (skip) 58 next 59} 60 61/vim: syntax=sh/ { 62 vim_modeline = 1 63} 64 65/^[ \t]*#/ { 66 next 67} 68 69/[$ \t]+_[a-zA-Z0-9]+=/ { 70 warn("Variable should not start with an underline") 71} 72 73/[^\\]\$[^0-9!'"$?@#*{}(|\/,]+/ { 74 warn("Missing braces around variable name") 75} 76 77/=(""|'')/ { 78 warn("Assignment to the empty string does not need quotes"); 79} 80 81/basename[ \t]+/ { 82 warn("Use parameter expansion instead of basename"); 83} 84 85/if[ \t]+(test|![ \t]+test)/ { 86 warn("Use [ instead of test"); 87} 88 89/[ \t]+(test|\[).*==/ { 90 warn("test(1)'s == operator is not portable"); 91} 92 93/if.*;[ \t]*fi$/ { 94 warn("Avoid using a single-line if conditional"); 95} 96 97END { 98 if (skip) 99 warn("Missing NO_CHECK_STYLE_END"); 100 if (! vim_modeline) 101 warn("Missing mode lines"); 102 if (error) 103 exit 1 104} 105 106# vim: syntax=awk:expandtab:shiftwidth=4:softtabstop=4 107