check-code: detect "% inside _()" when there are leading whitespaces
Before this patch, "contrib/check-code.py" can't detect "% inside _()"
correctly, when there are leading whitespaces before the format
string, like below:
_(
"format string %s" % v)
This patch adds regexp pattern "[ \t\n]*" before the pattern matching
against the format string.
"[\s\n]" can't be used in this purpose, because "\s" is automatically
replaced with "[ \t]" by "_preparepats()" and "\s" in "[]" causes
nested "[]" unexpectedly.
--- a/contrib/check-code.py Wed Apr 16 03:05:00 2014 +0900
+++ b/contrib/check-code.py Wed Apr 16 03:05:00 2014 +0900
@@ -207,8 +207,8 @@
(r'\s<>\s', '<> operator is not available in Python 3+, use !='),
(r'^\s*\t', "don't use tabs"),
(r'\S;\s*\n', "semicolon"),
- (r'[^_]_\((?:"[^"]+"[ \t\n+]*)+%', "don't use % inside _()"),
- (r"[^_]_\((?:'[^']+'[ \t\n+]*)+%", "don't use % inside _()"),
+ (r'[^_]_\([ \t\n]*(?:"[^"]+"[ \t\n+]*)+%', "don't use % inside _()"),
+ (r"[^_]_\([ \t\n]*(?:'[^']+'[ \t\n+]*)+%", "don't use % inside _()"),
(r'(\w|\)),\w', "missing whitespace after ,"),
(r'(\w|\))[+/*\-<>]\w', "missing whitespace in expression"),
(r'^\s+(\w|\.)+=\w[^,()\n]*$', "missing whitespace in assignment"),
--- a/tests/test-check-code.t Wed Apr 16 03:05:00 2014 +0900
+++ b/tests/test-check-code.t Wed Apr 16 03:05:00 2014 +0900
@@ -255,3 +255,32 @@
warning: add two newlines after '.. note::'
[1]
+ $ cat > ./map-inside-gettext.py <<EOF
+ > print _("map inside gettext %s" % v)
+ >
+ > print _("concatenating " " by " " space %s" % v)
+ > print _("concatenating " + " by " + " '+' %s" % v)
+ >
+ > print _("maping operation in different line %s"
+ > % v)
+ >
+ > print _(
+ > "leading spaces inside of '(' %s" % v)
+ > EOF
+ $ "$check_code" ./map-inside-gettext.py
+ ./map-inside-gettext.py:1:
+ > print _("map inside gettext %s" % v)
+ don't use % inside _()
+ ./map-inside-gettext.py:3:
+ > print _("concatenating " " by " " space %s" % v)
+ don't use % inside _()
+ ./map-inside-gettext.py:4:
+ > print _("concatenating " + " by " + " '+' %s" % v)
+ don't use % inside _()
+ ./map-inside-gettext.py:6:
+ > print _("maping operation in different line %s"
+ don't use % inside _()
+ ./map-inside-gettext.py:9:
+ > print _(
+ don't use % inside _()
+ [1]