# HG changeset patch # User FUJIWARA Katsunori # Date 2016-05-31 12:02:30 # Node ID 438caf19416048b88773f9e0554e04326d1048de # Parent 5eda83fb09fc7e197aea86fcdceca195e7f7fbe9 check-code: make repquote distinguish more characters for exact detection This patch makes repquote() distinguish more characters below, as a preparation for exact detection in subsequent patch. - "%" as "%" - "\\" as "b"(ackslash) - "*" as "A"(sterisk) - "+" as "P"(lus) - "-" as "M"(inus) Characters other than "%" don't use itself as replacement, because they are treated as special ones in regexp. diff --git a/contrib/check-code.py b/contrib/check-code.py --- a/contrib/check-code.py +++ b/contrib/check-code.py @@ -53,7 +53,8 @@ def compilere(pat, multiline=False): def repquote(m): # check "rules depending on implementation of repquote()" in each # patterns (especially pypats), before changing this function - fixedmap = {' ': ' ', '\n': '\n', '.': 'p', ':': 'q'} + fixedmap = {' ': ' ', '\n': '\n', '.': 'p', ':': 'q', + '%': '%', '\\': 'b', '*': 'A', '+': 'P', '-': 'M'} def encodechr(i): if i > 255: return 'u' @@ -326,7 +327,8 @@ pypats = [ (r'\.next\(\)', "don't use .next(), use next(...)"), # rules depending on implementation of repquote() - (r' x+[xpqo][\'"]\n\s+[\'"]x', 'string join across lines with no space'), + (r' x+[xpqo%APM][\'"]\n\s+[\'"]x', + 'string join across lines with no space'), (r'ui\.(status|progress|write|note|warn)\([\'\"]x', "missing _() in ui message (use () to hide false-positives)"), ], diff --git a/tests/test-contrib-check-code.t b/tests/test-contrib-check-code.t --- a/tests/test-contrib-check-code.t +++ b/tests/test-contrib-check-code.t @@ -256,6 +256,10 @@ web templates > 'bar foo.' > 'bar foo:' > 'bar foo@' + > 'bar foo%' + > 'bar foo*' + > 'bar foo+' + > 'bar foo-' > 'bar') > EOF $ "$check_code" stringjoin.py @@ -271,4 +275,16 @@ web templates stringjoin.py:4: > 'bar foo@' string join across lines with no space + stringjoin.py:5: + > 'bar foo%' + string join across lines with no space + stringjoin.py:6: + > 'bar foo*' + string join across lines with no space + stringjoin.py:7: + > 'bar foo+' + string join across lines with no space + stringjoin.py:8: + > 'bar foo-' + string join across lines with no space [1]