aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorJosh Triplett <josh@joshtriplett.org>2012-03-23 18:02:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-23 19:58:37 -0400
commitca56dc098caf93b5437cd6c4ee49f02aa18f84d6 (patch)
tree0bc689836c48cf91fcc5ca37db7753b5fa7d9fa3 /scripts
parent6712d85852b348d07301c7480f7eb3312d329143 (diff)
checkpatch: check for quoted strings broken across lines
checkpatch already makes an exception to the 80-column rule for quoted strings, and Documentation/CodingStyle recommends not splitting quoted strings across lines, because it breaks the ability to grep for the string. Rather than just permitting this, actively warn about quoted strings split across lines. Test case: void context(void) { struct { unsigned magic; const char *strdata; } foo[] = { { 42, "these strings" "do not produce warnings" }, { 256, "though perhaps" "they should" }, }; pr_err("this string" " should produce a warning\n"); pr_err("this multi-line string\n" "should not produce a warning\n"); asm ("this asm\n\t" "should not produce a warning"); } Results of checkpatch on that test case: WARNING: quoted string split across lines + " should produce a warning\n"); total: 0 errors, 1 warnings, 15 lines checked Signed-off-by: Josh Triplett <josh@joshtriplett.org> Acked-by: Joe Perches <joe@perches.com> Cc: Andy Whitcroft <apw@canonical.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/checkpatch.pl15
1 files changed, 15 insertions, 0 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 7a2f54a0bd35..de639eeeed50 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1772,6 +1772,21 @@ sub process {
1772 "line over 80 characters\n" . $herecurr); 1772 "line over 80 characters\n" . $herecurr);
1773 } 1773 }
1774 1774
1775# Check for user-visible strings broken across lines, which breaks the ability
1776# to grep for the string. Limited to strings used as parameters (those
1777# following an open parenthesis), which almost completely eliminates false
1778# positives, as well as warning only once per parameter rather than once per
1779# line of the string. Make an exception when the previous string ends in a
1780# newline (multiple lines in one string constant) or \n\t (common in inline
1781# assembly to indent the instruction on the following line).
1782 if ($line =~ /^\+\s*"/ &&
1783 $prevline =~ /"\s*$/ &&
1784 $prevline =~ /\(/ &&
1785 $prevrawline !~ /\\n(?:\\t)*"\s*$/) {
1786 WARN("SPLIT_STRING",
1787 "quoted string split across lines\n" . $hereprev);
1788 }
1789
1775# check for spaces before a quoted newline 1790# check for spaces before a quoted newline
1776 if ($rawline =~ /^.*\".*\s\\n/) { 1791 if ($rawline =~ /^.*\".*\s\\n/) {
1777 WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE", 1792 WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",