# HG changeset patch # User FUJIWARA Katsunori # Date 1397585100 -32400 # Node ID e8ef59b351c3824c718a3b912c3f14a59587ae72 # Parent a45ed365904a2b260c0a63aa3b7e93752fe69761 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. diff -r a45ed365904a -r e8ef59b351c3 contrib/check-code.py --- 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"), diff -r a45ed365904a -r e8ef59b351c3 tests/test-check-code.t --- 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 < 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]