Mercurial > hg
annotate contrib/check-code.py @ 51547:8e2a68e10f5c
stream: in v3, skip the "size" fast path if the entries as some unknown size
We are about to prefetch size during the lock less in the v3 case. So we need to
avoid trying to use that prefetched size when it is not available.
See next changeset for the motivation.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 26 Mar 2024 18:55:40 +0000 |
parents | 7a8ea1397816 |
children | 1c23faf64ad4 |
rev | line source |
---|---|
45830
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43503
diff
changeset
|
1 #!/usr/bin/env python3 |
10281 | 2 # |
3 # check-code - a style and portability checker for Mercurial | |
4 # | |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45942
diff
changeset
|
5 # Copyright 2010 Olivia Mackall <olivia@selenic.com> |
10281 | 6 # |
7 # This software may be used and distributed according to the terms of the | |
8 # GNU General Public License version 2 or any later version. | |
9 | |
20241
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
10 """style and portability checker for Mercurial |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
11 |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
12 when a rule triggers wrong, do one of the following (prefer one from top): |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
13 * do the work-around the rule suggests |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
14 * doublecheck that it is a false match |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
15 * improve the rule pattern |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
16 * add an ignore pattern to the rule (3rd arg) which matches your good line |
28700
35ad5bcdeb7e
py24: remove check-code py24 notation
timeless <timeless@mozdev.org>
parents:
28595
diff
changeset
|
17 (you can append a short comment and match this, like: #re-raises) |
20241
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
18 * change the pattern to a warning and list the exception in test-check-code-hg |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
19 * ONLY use no--check-code for skipping entire files from external sources |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
20 """ |
8071b4eddefa
check-code: explain what to do when a check-code rule mismatches
Simon Heimberg <simohe@besonet.ch>
parents:
20239
diff
changeset
|
21 |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
22 import glob |
13074
637627f31c74
check-code: check for gratuitous whitespace after Python keywords
Thomas Arendsen Hein <thomas@jtah.de>
parents:
13031
diff
changeset
|
23 import keyword |
10895
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
24 import optparse |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
25 import os |
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
26 import re |
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
27 import sys |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
28 |
29145
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
29 if sys.version_info[0] < 3: |
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
30 opentext = open |
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
31 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
32 |
29145
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
33 def opentext(f): |
39056
c52a8af4052a
contrib: have check-code look at files in latin1 instead of ascii
Augie Fackler <augie@google.com>
parents:
38784
diff
changeset
|
34 return open(f, encoding='latin1') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
35 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
36 |
19310
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
37 try: |
29143
8ed693ec5398
check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents:
29142
diff
changeset
|
38 xrange |
8ed693ec5398
check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents:
29142
diff
changeset
|
39 except NameError: |
8ed693ec5398
check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents:
29142
diff
changeset
|
40 xrange = range |
8ed693ec5398
check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents:
29142
diff
changeset
|
41 try: |
19310
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
42 import re2 |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
43 except ImportError: |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
44 re2 = None |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
45 |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
46 import testparseutil |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
47 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
48 |
19310
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
49 def compilere(pat, multiline=False): |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
50 if multiline: |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
51 pat = '(?m)' + pat |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
52 if re2: |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
53 try: |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
54 return re2.compile(pat) |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
55 except re2.error: |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
56 pass |
30ea54660d14
check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents:
19309
diff
changeset
|
57 return re.compile(pat) |
10281 | 58 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
59 |
29398
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
60 # check "rules depending on implementation of repquote()" in each |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
61 # patterns (especially pypats), before changing around repquote() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
62 _repquotefixedmap = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
63 ' ': ' ', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
64 '\n': '\n', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
65 '.': 'p', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
66 ':': 'q', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
67 '%': '%', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
68 '\\': 'b', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
69 '*': 'A', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
70 '+': 'P', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
71 '-': 'M', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
72 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
73 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
74 |
29398
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
75 def _repquoteencodechr(i): |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
76 if i > 255: |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
77 return 'u' |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
78 c = chr(i) |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
79 if c in _repquotefixedmap: |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
80 return _repquotefixedmap[c] |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
81 if c.isalpha(): |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
82 return 'x' |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
83 if c.isdigit(): |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
84 return 'n' |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
85 return 'o' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
86 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
87 |
29398
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
88 _repquotett = ''.join(_repquoteencodechr(i) for i in xrange(256)) |
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
89 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
90 |
10281 | 91 def repquote(m): |
19999
169cb9e47f8e
check-code: more replacement characters
Simon Heimberg <simohe@besonet.ch>
parents:
19998
diff
changeset
|
92 t = m.group('text') |
29398
2a54cf92c773
check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29397
diff
changeset
|
93 t = t.translate(_repquotett) |
10722
c4fb2103e734
check-code: improve quote detection regexp, add tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10720
diff
changeset
|
94 return m.group('quote') + t + m.group('quote') |
10281 | 95 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
96 |
10727
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
97 def reppython(m): |
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
98 comment = m.group('comment') |
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
99 if comment: |
18959
2f6418d8a4c9
check-code: catch trailing space in comments
Mads Kiilerich <madski@unity3d.com>
parents:
18835
diff
changeset
|
100 l = len(comment.rstrip()) |
2f6418d8a4c9
check-code: catch trailing space in comments
Mads Kiilerich <madski@unity3d.com>
parents:
18835
diff
changeset
|
101 return "#" * l + comment[l:] |
10727
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
102 return repquote(m) |
10281 | 103 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
104 |
10281 | 105 def repcomment(m): |
106 return m.group(1) + "#" * len(m.group(2)) | |
107 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
108 |
10281 | 109 def repccomment(m): |
110 t = re.sub(r"((?<=\n) )|\S", "x", m.group(2)) | |
111 return m.group(1) + t + "*/" | |
112 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
113 |
10281 | 114 def repcallspaces(m): |
115 t = re.sub(r"\n\s+", "\n", m.group(2)) | |
116 return m.group(1) + t | |
117 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
118 |
10281 | 119 def repinclude(m): |
120 return m.group(1) + "<foo>" | |
121 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
122 |
10281 | 123 def rephere(m): |
124 t = re.sub(r"\S", "x", m.group(2)) | |
125 return m.group(1) + t | |
126 | |
127 | |
128 testpats = [ | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
129 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
130 (r'\b(push|pop)d\b', "don't use 'pushd' or 'popd', use 'cd'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
131 (r'\W\$?\(\([^\)\n]*\)\)', "don't use (()) or $(()), use 'expr'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
132 (r'grep.*-q', "don't use 'grep -q', redirect to /dev/null"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
133 (r'(?<!hg )grep.* -a', "don't use 'grep -a', use in-line python"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
134 (r'sed.*-i', "don't use 'sed -i', use a temporary file"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
135 (r'\becho\b.*\\n', "don't use 'echo \\n', use printf"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
136 (r'echo -n', "don't use 'echo -n', use printf"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
137 (r'(^|\|\s*)\bwc\b[^|]*$\n(?!.*\(re\))', "filter wc output"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
138 (r'head -c', "don't use 'head -c', use 'dd'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
139 (r'tail -n', "don't use the '-n' option to tail, just use '-<num>'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
140 (r'sha1sum', "don't use sha1sum, use $TESTDIR/md5sum.py"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
141 (r'\bls\b.*-\w*R', "don't use 'ls -R', use 'find'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
142 (r'printf.*[^\\]\\([1-9]|0\d)', r"don't use 'printf \NNN', use Python"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
143 (r'printf.*[^\\]\\x', "don't use printf \\x, use Python"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
144 (r'rm -rf \*', "don't use naked rm -rf, target a directory"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
145 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
146 r'\[[^\]]+==', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
147 '[ foo == bar ] is a bashism, use [ foo = bar ] instead', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
148 ), |
50725
7e5be4a7cda7
tests: use grep -E instead of obsolescent egrep
Mads Kiilerich <mads@kiilerich.com>
parents:
49570
diff
changeset
|
149 (r'(^|\|\s*)egrep', "use grep -E for extended grep syntax"), |
50726
65f949da8469
tests: use grep -F instead of obsolescent fgrep
Mads Kiilerich <mads@kiilerich.com>
parents:
50725
diff
changeset
|
150 (r'(^|\|\s*)fgrep', "use grep -F for fixed string grepping"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
151 (r'(^|\|\s*)e?grep .*\\S', "don't use \\S in regular expression"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
152 (r'(?<!!)/bin/', "don't use explicit paths for tools"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
153 (r'#!.*/bash', "don't use bash in shebang, use sh"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
154 (r'[^\n]\Z', "no trailing newline"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
155 (r'export .*=', "don't export and assign at once"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
156 (r'^source\b', "don't use 'source', use '.'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
157 (r'touch -d', "don't use 'touch -d', use 'touch -t' instead"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
158 (r'\bls +[^|\n-]+ +-', "options to 'ls' must come before filenames"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
159 (r'[^>\n]>\s*\$HGRCPATH', "don't overwrite $HGRCPATH, append to it"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
160 (r'^stop\(\)', "don't use 'stop' as a shell function name"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
161 (r'(\[|\btest\b).*-e ', "don't use 'test -e', use 'test -f'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
162 (r'\[\[\s+[^\]]*\]\]', "don't use '[[ ]]', use '[ ]'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
163 (r'^alias\b.*=', "don't use alias, use a function"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
164 (r'if\s*!', "don't use '!' to negate exit status"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
165 (r'/dev/u?random', "don't use entropy, use /dev/zero"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
166 (r'do\s*true;\s*done', "don't use true as loop body, use sleep 0"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
167 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
168 r'sed (-e )?\'(\d+|/[^/]*/)i(?!\\\n)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
169 "put a backslash-escaped newline after sed 'i' command", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
170 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
171 (r'^diff *-\w*[uU].*$\n(^ \$ |^$)', "prefix diff -u/-U with cmp"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
172 (r'^\s+(if)? diff *-\w*[uU]', "prefix diff -u/-U with cmp"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
173 (r'[\s="`\']python\s(?!bindings)', "don't use 'python', use '$PYTHON'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
174 (r'seq ', "don't use 'seq', use $TESTDIR/seq.py"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
175 (r'\butil\.Abort\b', "directly use error.Abort"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
176 (r'\|&', "don't use |&, use 2>&1"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
177 (r'\w = +\w', "only one space after = allowed"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
178 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
179 r'\bsed\b.*[^\\]\\n', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
180 "don't use 'sed ... \\n', use a \\ and a newline", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
181 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
182 (r'env.*-u', "don't use 'env -u VAR', use 'unset VAR'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
183 (r'cp.* -r ', "don't use 'cp -r', use 'cp -R'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
184 (r'grep.* -[ABC]', "don't use grep's context flags"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
185 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
186 r'find.*-printf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
187 "don't use 'find -printf', it doesn't exist on BSD find(1)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
188 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
189 (r'\$RANDOM ', "don't use bash-only $RANDOM to generate random values"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
190 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
191 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
192 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
193 (r'^function', "don't use 'function', use old style"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
194 (r'^diff.*-\w*N', "don't use 'diff -N'"), |
47979
b84fe613de33
check-code: make it possible to ignore the PWD check in some situation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47856
diff
changeset
|
195 (r'\$PWD|\${PWD}', "don't use $PWD, use `pwd`", "no-pwd-check"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
196 (r'^([^"\'\n]|("[^"\n]*")|(\'[^\'\n]*\'))*\^', "^ must be quoted"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
197 (r'kill (`|\$\()', "don't use kill, use killdaemons.py"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
198 ], |
10281 | 199 ] |
200 | |
201 testfilters = [ | |
34060
e267d4ee4f2d
check-code: forbid using bash in shebang
Jun Wu <quark@fb.com>
parents:
33369
diff
changeset
|
202 (r"( *)(#([^!][^\n]*\S)?)", repcomment), |
10281 | 203 (r"<<(\S+)((.|\n)*?\n\1)", rephere), |
204 ] | |
205 | |
15372
695ac6aca77f
check-code: fix issues with finding patterns in unified tests, fix tests
Matt Mackall <mpm@selenic.com>
parents:
15364
diff
changeset
|
206 uprefix = r"^ \$ " |
12364
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
207 utestpats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
208 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
209 (r'^(\S.*|| [$>] \S.*)[ \t]\n', "trailing whitespace on non-output"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
210 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
211 uprefix + r'.*\|\s*sed[^|>\n]*\n', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
212 "use regex test output patterns instead of sed", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
213 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
214 (uprefix + r'(true|exit 0)', "explicit zero exit unnecessary"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
215 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
216 uprefix + r'.*\|\| echo.*(fail|error)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
217 "explicit exit code checks unnecessary", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
218 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
219 (uprefix + r'set -e', "don't use set -e"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
220 (uprefix + r'(\s|fi\b|done\b)', "use > for continued lines"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
221 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
222 uprefix + r'.*:\.\S*/', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
223 "x:.y in a path does not work on msys, rewrite " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
224 "as x://.y, or see `hg log -k msys` for alternatives", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
225 r'-\S+:\.|' '# no-msys', # -Rxxx |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
226 ), # in test-pull.t which is skipped on windows |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
227 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
228 r'^ [^$>].*27\.0\.0\.1', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
229 'use $LOCALIP not an explicit loopback address', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
230 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
231 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
232 r'^ (?![>$] ).*\$LOCALIP.*[^)]$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
233 'mark $LOCALIP output lines with (glob) to help tests in BSD jails', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
234 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
235 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
236 r'^ (cat|find): .*: \$ENOENT\$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
237 'use test -f to test for file existence', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
238 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
239 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
240 r'^ diff -[^ -]*p', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
241 "don't use (external) diff with -p for portability", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
242 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
243 (r' readlink ', 'use readlink.py instead of readlink'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
244 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
245 r'^ [-+][-+][-+] .* [-+]0000 \(glob\)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
246 "glob timezone field in diff output for portability", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
247 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
248 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
249 r'^ @@ -[0-9]+ [+][0-9]+,[0-9]+ @@', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
250 "use '@@ -N* +N,n @@ (glob)' style chunk header for portability", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
251 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
252 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
253 r'^ @@ -[0-9]+,[0-9]+ [+][0-9]+ @@', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
254 "use '@@ -N,n +N* @@ (glob)' style chunk header for portability", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
255 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
256 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
257 r'^ @@ -[0-9]+ [+][0-9]+ @@', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
258 "use '@@ -N* +N* @@ (glob)' style chunk header for portability", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
259 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
260 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
261 uprefix + r'hg( +-[^ ]+( +[^ ]+)?)* +extdiff' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
262 r'( +(-[^ po-]+|--(?!program|option)[^ ]+|[^-][^ ]*))*$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
263 "use $RUNTESTDIR/pdiff via extdiff (or -o/-p for false-positives)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
264 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
265 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
266 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
267 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
268 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
269 r'^ (?!.*\$LOCALIP)[^*?/\n]* \(glob\)$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
270 "glob match with no glob string (?, *, /, and $LOCALIP)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
271 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
272 ], |
12364
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
273 ] |
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
274 |
35315
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
275 # transform plain test rules to unified test's |
14203
b230922eb0c3
check-code: fix checking for sh style in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
14169
diff
changeset
|
276 for i in [0, 1]: |
22101
6fa40bd78bc8
check-code: allow an escape pattern to be specified for testpattern
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22100
diff
changeset
|
277 for tp in testpats[i]: |
6fa40bd78bc8
check-code: allow an escape pattern to be specified for testpattern
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22100
diff
changeset
|
278 p = tp[0] |
6fa40bd78bc8
check-code: allow an escape pattern to be specified for testpattern
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22100
diff
changeset
|
279 m = tp[1] |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43112
diff
changeset
|
280 if p.startswith('^'): |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43112
diff
changeset
|
281 p = "^ [$>] (%s)" % p[1:] |
14203
b230922eb0c3
check-code: fix checking for sh style in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
14169
diff
changeset
|
282 else: |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43112
diff
changeset
|
283 p = "^ [$>] .*(%s)" % p |
22101
6fa40bd78bc8
check-code: allow an escape pattern to be specified for testpattern
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22100
diff
changeset
|
284 utestpats[i].append((p, m) + tp[2:]) |
12364
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
285 |
35315
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
286 # don't transform the following rules: |
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
287 # " > \t" and " \t" should be allowed in unified tests |
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
288 testpats[0].append((r'^( *)\t', "don't use tabs to indent")) |
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
289 utestpats[0].append((r'^( ?)\t', "don't use tabs to indent")) |
e223c0438f89
check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
35251
diff
changeset
|
290 |
12364
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
291 utestfilters = [ |
17711
cf204e9829f4
check-code: replace heredocs in unified tests
Idan Kamara <idankk86@gmail.com>
parents:
17620
diff
changeset
|
292 (r"<<(\S+)((.|\n)*?\n > \1)", rephere), |
34060
e267d4ee4f2d
check-code: forbid using bash in shebang
Jun Wu <quark@fb.com>
parents:
33369
diff
changeset
|
293 (r"( +)(#([^!][^\n]*\S)?)", repcomment), |
12364
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
294 ] |
e128fa4615f2
check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11886
diff
changeset
|
295 |
41821
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
296 # common patterns to check *.py |
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
297 commonpypats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
298 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
299 (r'\\$', 'Use () to wrap long lines in Python, not \\'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
300 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
301 r'^\s*def\s*\w+\s*\(.*,\s*\(', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
302 "tuple parameter unpacking not available in Python 3+", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
303 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
304 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
305 r'lambda\s*\(.*,.*\)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
306 "tuple parameter unpacking not available in Python 3+", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
307 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
308 (r'(?<!def)\s+(cmp)\(', "cmp is not available in Python 3+"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
309 (r'(?<!\.)\breduce\s*\(.*', "reduce is not available in Python 3+"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
310 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
311 r'\bdict\(.*=', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
312 'dict() is different in Py2 and 3 and is slower than {}', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
313 'dict-from-generator', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
314 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
315 (r'\.has_key\b', "dict.has_key is not available in Python 3+"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
316 (r'\s<>\s', '<> operator is not available in Python 3+, use !='), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
317 (r'^\s*\t', "don't use tabs"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
318 (r'\S;\s*\n', "semicolon"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
319 (r'[^_]_\([ \t\n]*(?:"[^"]+"[ \t\n+]*)+%', "don't use % inside _()"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
320 (r"[^_]_\([ \t\n]*(?:'[^']+'[ \t\n+]*)+%", "don't use % inside _()"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
321 (r'(\w|\)),\w', "missing whitespace after ,"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
322 (r'(\w|\))[+/*\-<>]\w', "missing whitespace in expression"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
323 (r'\w\s=\s\s+\w', "gratuitous whitespace after ="), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
324 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
325 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
326 # a line ending with a colon, potentially with trailing comments |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
327 r':([ \t]*#[^\n]*)?\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
328 # one that is not a pass and not only a comment |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
329 r'(?P<indent>[ \t]+)[^#][^\n]+\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
330 # more lines at the same indent level |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
331 r'((?P=indent)[^\n]+\n)*' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
332 # a pass at the same indent level, which is bogus |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
333 r'(?P=indent)pass[ \t\n#]' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
334 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
335 'omit superfluous pass', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
336 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
337 (r'[^\n]\Z', "no trailing newline"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
338 (r'(\S[ \t]+|^[ \t]+)\n', "trailing whitespace"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
339 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
340 r'^\s*(if|while|def|class|except|try)\s[^[\n]*:\s*[^\\n]#\s]+', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
341 "linebreak after :", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
342 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
343 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
344 r'\b(%s)\(' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
345 % '|'.join(k for k in keyword.kwlist if k not in ('print', 'exec')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
346 "Python keyword is not a function", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
347 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
348 # (r'class\s[A-Z][^\(]*\((?!Exception)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
349 # "don't capitalize non-exception classes"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
350 # (r'in range\(', "use xrange"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
351 # (r'^\s*print\s+', "avoid using print in core and extensions"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
352 (r'[\x80-\xff]', "non-ASCII character literal"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
353 (r'("\')\.format\(', "str.format() has no bytes counterpart, use %"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
354 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
355 r'([\(\[][ \t]\S)|(\S[ \t][\)\]])', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
356 "gratuitous whitespace in () or []", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
357 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
358 # (r'\s\s=', "gratuitous whitespace before ="), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
359 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
360 r'[^>< ](\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\S', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
361 "missing whitespace around operator", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
362 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
363 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
364 r'[^>< ](\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\s', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
365 "missing whitespace around operator", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
366 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
367 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
368 r'\s(\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\S', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
369 "missing whitespace around operator", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
370 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
371 (r'[^^+=*/!<>&| %-](\s=|=\s)[^= ]', "wrong whitespace around ="), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
372 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
373 r'raise [^,(]+, (\([^\)]+\)|[^,\(\)]+)$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
374 "don't use old-style two-argument raise, use Exception(message)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
375 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
376 (r' is\s+(not\s+)?["\'0-9-]', "object comparison with literal"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
377 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
378 r' [=!]=\s+(True|False|None)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
379 "comparison with singleton, use 'is' or 'is not' instead", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
380 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
381 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
382 r'^\s*(while|if) [01]:', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
383 "use True/False for constant Boolean expression", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
384 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
385 (r'^\s*if False(:| +and)', 'Remove code instead of using `if False`'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
386 (r'opener\([^)]*\).read\(', "use opener.read() instead"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
387 (r'opener\([^)]*\).write\(', "use opener.write() instead"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
388 (r'(?i)descend[e]nt', "the proper spelling is descendAnt"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
389 (r'\.debug\(\_', "don't mark debug messages for translation"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
390 (r'\.strip\(\)\.split\(\)', "no need to strip before splitting"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
391 (r'^\s*except\s*:', "naked except clause", r'#.*re-raises'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
392 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
393 r'^\s*except\s([^\(,]+|\([^\)]+\))\s*,', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
394 'legacy exception syntax; use "as" instead of ","', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
395 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
396 (r'release\(.*wlock, .*lock\)', "wrong lock release order"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
397 (r'\bdef\s+__bool__\b', "__bool__ should be __nonzero__ in Python 2"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
398 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
399 r'os\.path\.join\(.*, *(""|\'\')\)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
400 "use pathutil.normasprefix(path) instead of os.path.join(path, '')", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
401 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
402 (r'\s0[0-7]+\b', 'legacy octal syntax; use "0o" prefix instead of "0"'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
403 # XXX only catch mutable arguments on the first line of the definition |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
404 (r'def.*[( ]\w+=\{\}', "don't use mutable default arguments"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
405 (r'\butil\.Abort\b', "directly use error.Abort"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
406 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
407 r'^@(\w*\.)?cachefunc', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
408 "module-level @cachefunc is risky, please avoid", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
409 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
410 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
411 r'^(from|import) mercurial\.(cext|pure|cffi)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
412 "use mercurial.policy.importmod instead", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
413 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
414 (r'\.next\(\)', "don't use .next(), use next(...)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
415 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
416 r'([a-z]*).revision\(\1\.node\(', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
417 "don't convert rev to node before passing to revision(nodeorrev)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
418 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
419 (r'platform\.system\(\)', "don't use platform.system(), use pycompat"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
420 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
421 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
422 [], |
41821
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
423 ] |
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
424 |
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
425 # patterns to check normal *.py files |
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
426 pypats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
427 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
428 # Ideally, these should be placed in "commonpypats" for |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
429 # consistency of coding rules in Mercurial source tree. |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
430 # But on the other hand, these are not so seriously required for |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
431 # python code fragments embedded in test scripts. Fixing test |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
432 # scripts for these patterns requires many changes, and has less |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
433 # profit than effort. |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
434 (r'raise Exception', "don't raise generic exceptions"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
435 (r'[\s\(](open|file)\([^)]*\)\.read\(', "use util.readfile() instead"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
436 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
437 r'[\s\(](open|file)\([^)]*\)\.write\(', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
438 "use util.writefile() instead", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
439 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
440 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
441 r'^[\s\(]*(open(er)?|file)\([^)]*\)(?!\.close\(\))', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
442 "always assign an opened file to a variable, and close it afterwards", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
443 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
444 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
445 r'[\s\(](open|file)\([^)]*\)\.(?!close\(\))', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
446 "always assign an opened file to a variable, and close it afterwards", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
447 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
448 (r':\n( )*( ){1,3}[^ ]', "must indent 4 spaces"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
449 (r'^import atexit', "don't use atexit, use ui.atexit"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
450 # rules depending on implementation of repquote() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
451 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
452 r' x+[xpqo%APM][\'"]\n\s+[\'"]x', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
453 'string join across lines with no space', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
454 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
455 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
456 r'''(?x)ui\.(status|progress|write|note|warn)\( |
29397
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
457 [ \t\n#]* |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
458 (?# any strings/comments might precede a string, which |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
459 # contains translatable message) |
43081
e65e7290041e
contrib: fix check-code to be able to detect missing _() with bytestrings
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
460 b?((['"]|\'\'\'|""")[ \npq%bAPMxno]*(['"]|\'\'\'|""")[ \t\n#]+)* |
29397
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
461 (?# sequence consisting of below might precede translatable message |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
462 # - formatting string: "% 10s", "%05d", "% -3.2f", "%*s", "%%" ... |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
463 # - escaped character: "\\", "\n", "\0" ... |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
464 # - character other than '%', 'b' as '\', and 'x' as alphabet) |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
465 (['"]|\'\'\'|""") |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
466 ((%([ n]?[PM]?([np]+|A))?x)|%%|b[bnx]|[ \nnpqAPMo])*x |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
467 (?# this regexp can't use [^...] style, |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
468 # because _preparepats forcibly adds "\n" into [^...], |
844f72885fb9
check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29330
diff
changeset
|
469 # even though this regexp wants match it against "\n")''', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
470 "missing _() in ui message (use () to hide false-positives)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
471 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
472 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
473 + commonpypats[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
474 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
475 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
476 # rules depending on implementation of repquote() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
477 (r'(^| )pp +xxxxqq[ \n][^\n]', "add two newlines after '.. note::'"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
478 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
479 + commonpypats[1], |
10281 | 480 ] |
481 | |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
482 # patterns to check *.py for embedded ones in test script |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
483 embeddedpypats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
484 [] + commonpypats[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
485 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
486 [] + commonpypats[1], |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
487 ] |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
488 |
41821
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
489 # common filters to convert *.py |
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
490 commonpyfilters = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
491 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
492 r"""(?msx)(?P<comment>\#.*?$)| |
10727
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
493 ((?P<quote>('''|\"\"\"|(?<!')'(?!')|(?<!")"(?!"))) |
62b8f15683f2
check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10723
diff
changeset
|
494 (?P<text>(([^\\]|\\.)*?)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
495 (?P=quote))""", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
496 reppython, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
497 ), |
10281 | 498 ] |
499 | |
47635
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
500 # pattern only for mercurial and extensions |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
501 core_py_pats = [ |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
502 [ |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
503 # Windows tend to get confused about capitalization of the drive letter |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
504 # |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
505 # see mercurial.windows.abspath for details |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
506 ( |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
507 r'os\.path\.abspath', |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
508 "use util.abspath instead (windows)", |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
509 r'#.*re-exports', |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
510 ), |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
511 ], |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
512 # warnings |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
513 [], |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
514 ] |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
515 |
41821
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
516 # filters to convert normal *.py files |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
517 pyfilters = [] + commonpyfilters |
41821
14e8d042993a
contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41761
diff
changeset
|
518 |
34648
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
519 # non-filter patterns |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
520 pynfpats = [ |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
521 [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
522 (r'pycompat\.osname\s*[=!]=\s*[\'"]nt[\'"]', "use pycompat.iswindows"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
523 (r'pycompat\.osname\s*[=!]=\s*[\'"]posix[\'"]', "use pycompat.isposix"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
524 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
525 r'pycompat\.sysplatform\s*[!=]=\s*[\'"]darwin[\'"]', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
526 "use pycompat.isdarwin", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
527 ), |
34648
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
528 ], |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
529 # warnings |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
530 [], |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
531 ] |
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
532 |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
533 # filters to convert *.py for embedded ones in test script |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
534 embeddedpyfilters = [] + commonpyfilters |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
535 |
31602
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
536 # extension non-filter patterns |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
537 pyextnfpats = [ |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
538 [(r'^"""\n?[A-Z]', "don't capitalize docstring title")], |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
539 # warnings |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
540 [], |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
541 ] |
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
542 |
18960
170fc0949fb6
check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents:
18959
diff
changeset
|
543 txtfilters = [] |
170fc0949fb6
check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents:
18959
diff
changeset
|
544 |
170fc0949fb6
check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents:
18959
diff
changeset
|
545 txtpats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
546 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
547 (r'\s$', 'trailing whitespace'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
548 ('.. note::[ \n][^\n]', 'add two newlines after note::'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
549 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
550 [], |
18960
170fc0949fb6
check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents:
18959
diff
changeset
|
551 ] |
170fc0949fb6
check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents:
18959
diff
changeset
|
552 |
10281 | 553 cpats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
554 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
555 (r'//', "don't use //-style comments"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
556 (r'\S\t', "don't use tabs except for indent"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
557 (r'(\S[ \t]+|^[ \t]+)\n', "trailing whitespace"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
558 (r'(while|if|do|for)\(', "use space after while/if/do/for"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
559 (r'return\(', "return is not a function"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
560 (r' ;', "no space before ;"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
561 (r'[^;] \)', "no space before )"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
562 (r'[)][{]', "space between ) and {"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
563 (r'\w+\* \w+', "use int *foo, not int* foo"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
564 (r'\W\([^\)]+\) \w+', "use (int)foo, not (int) foo"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
565 (r'\w+ (\+\+|--)', "use foo++, not foo ++"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
566 (r'\w,\w', "missing whitespace after ,"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
567 (r'^[^#]\w[+/*]\w', "missing whitespace in expression"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
568 (r'\w\s=\s\s+\w', "gratuitous whitespace after ="), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
569 (r'^#\s+\w', "use #foo, not # foo"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
570 (r'[^\n]\Z', "no trailing newline"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
571 (r'^\s*#import\b', "use only #include in standard C code"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
572 (r'strcpy\(', "don't use strcpy, use strlcpy or memcpy"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
573 (r'strcat\(', "don't use strcat"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
574 # rules depending on implementation of repquote() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
575 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
576 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
577 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
578 # rules depending on implementation of repquote() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
579 ], |
10281 | 580 ] |
581 | |
582 cfilters = [ | |
583 (r'(/\*)(((\*(?!/))|[^*])*)\*/', repccomment), | |
10722
c4fb2103e734
check-code: improve quote detection regexp, add tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10720
diff
changeset
|
584 (r'''(?P<quote>(?<!")")(?P<text>([^"]|\\")+)"(?!")''', repquote), |
10281 | 585 (r'''(#\s*include\s+<)([^>]+)>''', repinclude), |
586 (r'(\()([^)]+\))', repcallspaces), | |
587 ] | |
588 | |
14137
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
589 inutilpats = [ |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
590 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
591 (r'\bui\.', "don't use ui in util"), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
592 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
593 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
594 [], |
14137
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
595 ] |
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
596 |
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
597 inrevlogpats = [ |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
598 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
599 (r'\brepo\.', "don't use repo in revlog"), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45830
diff
changeset
|
600 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
601 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
602 [], |
14137
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
603 ] |
83a94c2fe6f4
check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents:
14136
diff
changeset
|
604 |
21487
c26464ce0781
check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents:
21222
diff
changeset
|
605 webtemplatefilters = [] |
c26464ce0781
check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents:
21222
diff
changeset
|
606 |
c26464ce0781
check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents:
21222
diff
changeset
|
607 webtemplatepats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
608 [], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
609 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
610 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
611 r'{desc(\|(?!websub|firstline)[^\|]*)+}', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
612 'follow desc keyword with either firstline or websub', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
613 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
614 ], |
21487
c26464ce0781
check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents:
21222
diff
changeset
|
615 ] |
c26464ce0781
check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents:
21222
diff
changeset
|
616 |
30246
b4c0f8d5edd2
contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30245
diff
changeset
|
617 allfilesfilters = [] |
b4c0f8d5edd2
contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30245
diff
changeset
|
618 |
b4c0f8d5edd2
contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30245
diff
changeset
|
619 allfilespats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
620 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
621 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
622 r'(http|https)://[a-zA-Z0-9./]*selenic.com/', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
623 'use mercurial-scm.org domain URL', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
624 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
625 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
626 r'mercurial@selenic\.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
627 'use mercurial-scm.org domain for mercurial ML address', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
628 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
629 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
630 r'mercurial-devel@selenic\.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
631 'use mercurial-scm.org domain for mercurial-devel ML address', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
632 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
633 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
634 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
635 [], |
30246
b4c0f8d5edd2
contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30245
diff
changeset
|
636 ] |
b4c0f8d5edd2
contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30245
diff
changeset
|
637 |
30665
01721d382c16
py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30557
diff
changeset
|
638 py3pats = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
639 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
640 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
641 r'os\.environ', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
642 "use encoding.environ instead (py3)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
643 r'#.*re-exports', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
644 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
645 (r'os\.name', "use pycompat.osname instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
646 (r'os\.getcwd', "use encoding.getcwd instead (py3)", r'#.*re-exports'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
647 (r'os\.sep', "use pycompat.ossep instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
648 (r'os\.pathsep', "use pycompat.ospathsep instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
649 (r'os\.altsep', "use pycompat.osaltsep instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
650 (r'sys\.platform', "use pycompat.sysplatform instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
651 (r'getopt\.getopt', "use pycompat.getoptb instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
652 (r'os\.getenv', "use encoding.environ.get instead"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
653 (r'os\.setenv', "modifying the environ dict is not preferred"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
654 (r'(?<!pycompat\.)xrange', "use pycompat.xrange instead (py3)"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
655 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
656 # warnings |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
657 [], |
30665
01721d382c16
py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30557
diff
changeset
|
658 ] |
01721d382c16
py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30557
diff
changeset
|
659 |
10281 | 660 checks = [ |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
661 ('python', r'.*\.(py|cgi)$', r'^#!.*python', pyfilters, pypats), |
34648
4889b84b15f2
check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents:
34642
diff
changeset
|
662 ('python', r'.*\.(py|cgi)$', r'^#!.*python', [], pynfpats), |
31602
772878ac930e
checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents:
31572
diff
changeset
|
663 ('python', r'.*hgext.*\.py$', '', [], pyextnfpats), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
664 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
665 'python 3', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
666 r'.*(hgext|mercurial)/(?!demandimport|policy|pycompat).*\.py', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
667 '', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
668 pyfilters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
669 py3pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
670 ), |
47635
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
671 ( |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
672 'core files', |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
673 r'.*(hgext|mercurial)/(?!demandimport|policy|pycompat).*\.py', |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
674 '', |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
675 pyfilters, |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
676 core_py_pats, |
752109dc2fb7
check-code: add a rules to catch os.path.abspath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47499
diff
changeset
|
677 ), |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
678 ('test script', r'(.*/)?test-[^.~]*$', '', testfilters, testpats), |
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
679 ('c', r'.*\.[ch]$', '', cfilters, cpats), |
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
680 ('unified test', r'.*\.t$', '', utestfilters, utestpats), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
681 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
682 'layering violation repo in revlog', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
683 r'mercurial/revlog\.py', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
684 '', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
685 pyfilters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
686 inrevlogpats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
687 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
688 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
689 'layering violation ui in util', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
690 r'mercurial/util\.py', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
691 '', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
692 pyfilters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
693 inutilpats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
694 ), |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
695 ('txt', r'.*\.txt$', '', txtfilters, txtpats), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
696 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
697 'web template', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
698 r'mercurial/templates/.*\.tmpl', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
699 '', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
700 webtemplatefilters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
701 webtemplatepats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
702 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
703 ('all except for .po', r'.*(?<!\.po)$', '', allfilesfilters, allfilespats), |
10281 | 704 ] |
705 | |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
706 # (desc, |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
707 # func to pick up embedded code fragments, |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
708 # list of patterns to convert target files |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
709 # list of patterns to detect errors/warnings) |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
710 embeddedchecks = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
711 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
712 'embedded python', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
713 testparseutil.pyembedded, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
714 embeddedpyfilters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
715 embeddedpypats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
716 ) |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
717 ] |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
718 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
719 |
19307
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
720 def _preparepats(): |
41822
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
721 def preparefailandwarn(failandwarn): |
19307
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
722 for pats in failandwarn: |
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
723 for i, pseq in enumerate(pats): |
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
724 # fix-up regexes for multi-line searches |
19378
9de689d20230
cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents:
19310
diff
changeset
|
725 p = pseq[0] |
36957
a8d540d2628c
contrib: fix a subtle bug in check-code's regex rewriting
Augie Fackler <augie@google.com>
parents:
36949
diff
changeset
|
726 # \s doesn't match \n (done in two steps) |
a8d540d2628c
contrib: fix a subtle bug in check-code's regex rewriting
Augie Fackler <augie@google.com>
parents:
36949
diff
changeset
|
727 # first, we replace \s that appears in a set already |
a8d540d2628c
contrib: fix a subtle bug in check-code's regex rewriting
Augie Fackler <augie@google.com>
parents:
36949
diff
changeset
|
728 p = re.sub(r'\[\\s', r'[ \\t', p) |
a8d540d2628c
contrib: fix a subtle bug in check-code's regex rewriting
Augie Fackler <augie@google.com>
parents:
36949
diff
changeset
|
729 # now we replace other \s instances. |
a8d540d2628c
contrib: fix a subtle bug in check-code's regex rewriting
Augie Fackler <augie@google.com>
parents:
36949
diff
changeset
|
730 p = re.sub(r'(?<!(\\|\[))\\s', r'[ \\t]', p) |
19307
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
731 # [^...] doesn't match newline |
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
732 p = re.sub(r'(?<!\\)\[\^', r'[^\\n', p) |
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
733 |
19308
84faaacbd3fa
check-code: compile all patterns on initialisation
Simon Heimberg <simohe@besonet.ch>
parents:
19307
diff
changeset
|
734 pats[i] = (re.compile(p, re.MULTILINE),) + pseq[1:] |
41822
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
735 |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
736 def preparefilters(filters): |
19309
7d77fa1cd537
check-code: compile filters when loading
Simon Heimberg <simohe@besonet.ch>
parents:
19308
diff
changeset
|
737 for i, flt in enumerate(filters): |
7d77fa1cd537
check-code: compile filters when loading
Simon Heimberg <simohe@besonet.ch>
parents:
19308
diff
changeset
|
738 filters[i] = re.compile(flt[0]), flt[1] |
19307
5443d40d524b
check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents:
19168
diff
changeset
|
739 |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
740 for cs in (checks, embeddedchecks): |
41822
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
741 for c in cs: |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
742 failandwarn = c[-1] |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
743 preparefailandwarn(failandwarn) |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
744 |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
745 filters = c[-2] |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
746 preparefilters(filters) |
55ae5cd31f76
contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41821
diff
changeset
|
747 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
748 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48945
diff
changeset
|
749 class norepeatlogger: |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
750 def __init__(self): |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
751 self._lastseen = None |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
752 |
11604
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
753 def log(self, fname, lineno, line, msg, blame): |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
754 """print error related a to given line of a given file. |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
755 |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
756 The faulty line will also be printed but only once in the case |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
757 of multiple errors. |
10281 | 758 |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
759 :fname: filename |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
760 :lineno: line number |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
761 :line: actual content of the line |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
762 :msg: error message |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
763 """ |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
764 msgid = fname, lineno, line |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
765 if msgid != self._lastseen: |
11604
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
766 if blame: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
767 print("%s:%d (%s):" % (fname, lineno, blame)) |
11604
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
768 else: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
769 print("%s:%d:" % (fname, lineno)) |
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
770 print(" > %s" % line) |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
771 self._lastseen = msgid |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
772 print(" " + msg) |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
773 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
774 |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
775 _defaultlogger = norepeatlogger() |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
776 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
777 |
11604
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
778 def getblame(f): |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
779 lines = [] |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
780 for l in os.popen('hg annotate -un %s' % f): |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
781 start, line = l.split(':', 1) |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
782 user, rev = start.split() |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
783 lines.append((line[1:-1], user, rev)) |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
784 return lines |
c5d40818b270
check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents:
11602
diff
changeset
|
785 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
786 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
787 def checkfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
788 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
789 logfunc=_defaultlogger.log, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
790 maxerr=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
791 warnings=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
792 blame=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
793 debug=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
794 lineno=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
795 ): |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
796 """checks style and portability of a given file |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
797 |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
798 :f: filepath |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
799 :logfunc: function used to report error |
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
800 logfunc(filename, linenumber, linecontent, errormessage) |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17347
diff
changeset
|
801 :maxerr: number of error to display before aborting. |
15873
a153a86a472c
tests: keep track of all check-code.py warnings
Mads Kiilerich <mads@kiilerich.com>
parents:
15611
diff
changeset
|
802 Set to false (default) to report all errors |
10720
fbcccf9ec58f
check-code: add a return value to checkfile function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10719
diff
changeset
|
803 |
fbcccf9ec58f
check-code: add a return value to checkfile function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10719
diff
changeset
|
804 return True if no error is found, False otherwise. |
10719
3be9ae49b628
code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10718
diff
changeset
|
805 """ |
10720
fbcccf9ec58f
check-code: add a return value to checkfile function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10719
diff
changeset
|
806 result = True |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
807 |
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
808 try: |
29145
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
809 with opentext(f) as fp: |
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
810 try: |
41365
876494fd967d
cleanup: delete lots of unused local variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
811 pre = fp.read() |
29145
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
812 except UnicodeDecodeError as e: |
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
813 print("%s while reading %s" % (e, f)) |
c641b8dfb98c
check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents:
29144
diff
changeset
|
814 return result |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25659
diff
changeset
|
815 except IOError as e: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
816 print("Skipping %s, %s" % (f, str(e).split(':', 1)[0])) |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
817 return result |
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
818 |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
819 # context information shared while single checkfile() invocation |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
820 context = {'blamecache': None} |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
821 |
21222
4840abc83970
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents:
21097
diff
changeset
|
822 for name, match, magic, filters, pats in checks: |
14135
673abd432104
check-code: adding debug flag
timeless <timeless@mozdev.org>
parents:
14009
diff
changeset
|
823 if debug: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
824 print(name, f) |
28050
7e9e39228de6
check-code: examine magic pattern matching against contents of a file
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28035
diff
changeset
|
825 if not (re.match(match, f) or (magic and re.search(magic, pre))): |
14135
673abd432104
check-code: adding debug flag
timeless <timeless@mozdev.org>
parents:
14009
diff
changeset
|
826 if debug: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
827 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
828 "Skipping %s for %s it doesn't match %s" % (name, match, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
829 ) |
10281 | 830 continue |
19382
5aeb03b48ab4
check-code: concatenate "check-code" on compile time
Simon Heimberg <simohe@besonet.ch>
parents:
19380
diff
changeset
|
831 if "no-" "check-code" in pre: |
27560
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
832 # If you're looking at this line, it's because a file has: |
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
833 # no- check- code |
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
834 # but the reason to output skipping is to make life for |
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
835 # tests easier. So, instead of writing it with a normal |
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
836 # spelling, we write it with the expected spelling from |
15b06f306c1f
check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents:
27557
diff
changeset
|
837 # tests/test-check-code.t |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
838 print("Skipping %s it has no-che?k-code (glob)" % f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
839 return "Skip" # skip checking this file |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
840 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
841 fc = _checkfiledata( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
842 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
843 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
844 pre, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
845 filters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
846 pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
847 context, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
848 logfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
849 maxerr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
850 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
851 blame, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
852 debug, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
853 lineno, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
854 ) |
41824
519b2faea261
contrib: change return value of file checking function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41823
diff
changeset
|
855 if fc: |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
856 result = False |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
857 |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
858 if f.endswith('.t') and "no-" "check-code" not in pre: |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
859 if debug: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
860 print("Checking embedded code in %s" % f) |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
861 |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
862 prelines = pre.splitlines() |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
863 embeddederros = [] |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
864 for name, embedded, filters, pats in embeddedchecks: |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
865 # "reset curmax at each repetition" treats maxerr as "max |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
866 # nubmer of errors in an actual file per entry of |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
867 # (embedded)checks" |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
868 curmaxerr = maxerr |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
869 |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
870 for found in embedded(f, prelines, embeddederros): |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
871 filename, starts, ends, code = found |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
872 fc = _checkfiledata( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
873 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
874 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
875 code, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
876 filters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
877 pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
878 context, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
879 logfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
880 curmaxerr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
881 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
882 blame, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
883 debug, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
884 lineno, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
885 offset=starts - 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
886 ) |
41826
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
887 if fc: |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
888 result = False |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
889 if curmaxerr: |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
890 if fc >= curmaxerr: |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
891 break |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
892 curmaxerr -= fc |
867883d454ea
contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41825
diff
changeset
|
893 |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
894 return result |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
895 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
896 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
897 def _checkfiledata( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
898 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
899 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
900 filedata, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
901 filters, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
902 pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
903 context, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
904 logfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
905 maxerr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
906 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
907 blame, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
908 debug, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
909 lineno, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
910 offset=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
911 ): |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
912 """Execute actual error check for file data |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
913 |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
914 :name: of the checking category |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
915 :f: filepath |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
916 :filedata: content of a file |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
917 :filters: to be applied before checking |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
918 :pats: to detect errors |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
919 :context: a dict of information shared while single checkfile() invocation |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
920 Valid keys: 'blamecache'. |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
921 :logfunc: function used to report error |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
922 logfunc(filename, linenumber, linecontent, errormessage) |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
923 :maxerr: number of error to display before aborting, or False to |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
924 report all errors |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
925 :warnings: whether warning level checks should be applied |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
926 :blame: whether blame information should be displayed at error reporting |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
927 :debug: whether debug information should be displayed |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
928 :lineno: whether lineno should be displayed at error reporting |
41825
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
929 :offset: line number offset of 'filedata' in 'f' for checking |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
930 an embedded code fragment, or None (offset=0 is different |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
931 from offset=None) |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
932 |
41824
519b2faea261
contrib: change return value of file checking function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41823
diff
changeset
|
933 returns number of detected errors. |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
934 """ |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
935 blamecache = context['blamecache'] |
41825
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
936 if offset is None: |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
937 lineoffset = 0 |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
938 else: |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
939 lineoffset = offset |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
940 |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
941 fc = 0 |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
942 pre = post = filedata |
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
943 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
944 if True: # TODO: get rid of this redundant 'if' block |
10281 | 945 for p, r in filters: |
946 post = re.sub(p, r, post) | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
947 nerrs = len(pats[0]) # nerr elements are errors |
14009
64de9ca66511
check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents:
14005
diff
changeset
|
948 if warnings: |
64de9ca66511
check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents:
14005
diff
changeset
|
949 pats = pats[0] + pats[1] |
64de9ca66511
check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents:
14005
diff
changeset
|
950 else: |
64de9ca66511
check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents:
14005
diff
changeset
|
951 pats = pats[0] |
10281 | 952 # print post # uncomment to show filtered version |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
953 |
14135
673abd432104
check-code: adding debug flag
timeless <timeless@mozdev.org>
parents:
14009
diff
changeset
|
954 if debug: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
955 print("Checking %s for %s" % (name, f)) |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
956 |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
957 prelines = None |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
958 errors = [] |
19422
d9e86d656017
check-code: automatically preppend "warning: " to all warning messages
Simon Heimberg <simohe@besonet.ch>
parents:
19382
diff
changeset
|
959 for i, pat in enumerate(pats): |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
960 if len(pat) == 3: |
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
961 p, msg, ignore = pat |
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
962 else: |
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
963 p, msg = pat |
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
964 ignore = None |
20005
22154ec6fb8b
check-code: prepend warning prefix only once, but for each warning
Simon Heimberg <simohe@besonet.ch>
parents:
19999
diff
changeset
|
965 if i >= nerrs: |
22154ec6fb8b
check-code: prepend warning prefix only once, but for each warning
Simon Heimberg <simohe@besonet.ch>
parents:
19999
diff
changeset
|
966 msg = "warning: " + msg |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
967 |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
968 pos = 0 |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
969 n = 0 |
19308
84faaacbd3fa
check-code: compile all patterns on initialisation
Simon Heimberg <simohe@besonet.ch>
parents:
19307
diff
changeset
|
970 for m in p.finditer(post): |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
971 if prelines is None: |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
972 prelines = pre.splitlines() |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
973 postlines = post.splitlines(True) |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
974 |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
975 start = m.start() |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
976 while n < len(postlines): |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
977 step = len(postlines[n]) |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
978 if pos + step > start: |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
979 break |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
980 pos += step |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
981 n += 1 |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
982 l = prelines[n] |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
983 |
20242
2dad90bdf29d
check-code: drop now unused check-code-ignore
Simon Heimberg <simohe@besonet.ch>
parents:
20241
diff
changeset
|
984 if ignore and re.search(ignore, l, re.MULTILINE): |
20243
cc09cfea3dd4
check-code: print debug output when an ignore pattern matches
Simon Heimberg <simohe@besonet.ch>
parents:
20242
diff
changeset
|
985 if debug: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
986 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
987 "Skipping %s for %s:%s (ignore pattern)" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
988 % (name, f, (n + lineoffset)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
989 ) |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16704
diff
changeset
|
990 continue |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
991 bd = "" |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
992 if blame: |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
993 bd = 'working directory' |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
994 if blamecache is None: |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
995 blamecache = getblame(f) |
41823
7a139fc60eb0
contrib: factor out actual error check for file data of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41822
diff
changeset
|
996 context['blamecache'] = blamecache |
41825
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
997 if (n + lineoffset) < len(blamecache): |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
998 bl, bu, br = blamecache[(n + lineoffset)] |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
999 if offset is None and bl == l: |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1000 bd = '%s@%s' % (bu, br) |
41825
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1001 elif offset is not None and bl.endswith(l): |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1002 # "offset is not None" means "checking |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1003 # embedded code fragment". In this case, |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1004 # "l" does not have information about the |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1005 # beginning of an *original* line in the |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1006 # file (e.g. ' > '). |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1007 # Therefore, use "str.endswith()", and |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1008 # show "maybe" for a little loose |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1009 # examination. |
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1010 bd = '%s@%s, maybe' % (bu, br) |
20005
22154ec6fb8b
check-code: prepend warning prefix only once, but for each warning
Simon Heimberg <simohe@besonet.ch>
parents:
19999
diff
changeset
|
1011 |
41825
6d6bd9039ecd
contrib: add line offset information to file check function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41824
diff
changeset
|
1012 errors.append((f, lineno and (n + lineoffset + 1), l, msg, bd)) |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1013 |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1014 errors.sort() |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1015 for e in errors: |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1016 logfunc(*e) |
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1017 fc += 1 |
15873
a153a86a472c
tests: keep track of all check-code.py warnings
Mads Kiilerich <mads@kiilerich.com>
parents:
15611
diff
changeset
|
1018 if maxerr and fc >= maxerr: |
28509
9e3ecb6f4995
check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28399
diff
changeset
|
1019 print(" (too many errors, giving up)") |
10281 | 1020 break |
15281
aeeb2afcdc25
check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
14978
diff
changeset
|
1021 |
41824
519b2faea261
contrib: change return value of file checking function of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
41823
diff
changeset
|
1022 return fc |
10717
b1f4fcef99b3
check-code: Add a ``checkfile`` function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10716
diff
changeset
|
1023 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1024 |
29568
7825f6154a65
check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29566
diff
changeset
|
1025 def main(): |
31824
4804644489cf
check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents:
31816
diff
changeset
|
1026 parser = optparse.OptionParser("%prog [options] [files | -]") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1027 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1028 "-w", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1029 "--warnings", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1030 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1031 help="include warning-level checks", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1032 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1033 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1034 "-p", "--per-file", type="int", help="max warnings per file" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1035 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1036 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1037 "-b", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1038 "--blame", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1039 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1040 help="use annotate to generate blame info", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1041 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1042 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1043 "", "--debug", action="store_true", help="show debug information" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1044 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1045 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1046 "", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1047 "--nolineno", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1048 action="store_false", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1049 dest='lineno', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1050 help="don't show line numbers", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1051 ) |
10895
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
1052 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1053 parser.set_defaults( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1054 per_file=15, warnings=False, blame=False, debug=False, lineno=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1055 ) |
10895
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
1056 (options, args) = parser.parse_args() |
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
1057 |
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
1058 if len(args) == 0: |
10716
5f92bde72eef
check-code: Only call check-code if __name__ = "__main__".
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10707
diff
changeset
|
1059 check = glob.glob("*") |
31824
4804644489cf
check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents:
31816
diff
changeset
|
1060 elif args == ['-']: |
4804644489cf
check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents:
31816
diff
changeset
|
1061 # read file list from stdin |
4804644489cf
check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents:
31816
diff
changeset
|
1062 check = sys.stdin.read().splitlines() |
10716
5f92bde72eef
check-code: Only call check-code if __name__ = "__main__".
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10707
diff
changeset
|
1063 else: |
10895
217557b26bc7
check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents:
10814
diff
changeset
|
1064 check = args |
10281 | 1065 |
29569
3d52e7c78a6b
check-code: move fixing up regexp into main procedure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29568
diff
changeset
|
1066 _preparepats() |
3d52e7c78a6b
check-code: move fixing up regexp into main procedure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29568
diff
changeset
|
1067 |
15544
53ef627cda30
check-code: fix return code initialization
Mads Kiilerich <mads@kiilerich.com>
parents:
15502
diff
changeset
|
1068 ret = 0 |
10716
5f92bde72eef
check-code: Only call check-code if __name__ = "__main__".
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
10707
diff
changeset
|
1069 for f in check: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1070 if not checkfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1071 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1072 maxerr=options.per_file, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1073 warnings=options.warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1074 blame=options.blame, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1075 debug=options.debug, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1076 lineno=options.lineno, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1077 ): |
11816
e1359ad582f6
check-code: add exit status
Alecs King <alecsk@gmail.com>
parents:
11764
diff
changeset
|
1078 ret = 1 |
29568
7825f6154a65
check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29566
diff
changeset
|
1079 return ret |
7825f6154a65
check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29566
diff
changeset
|
1080 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43063
diff
changeset
|
1081 |
29568
7825f6154a65
check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29566
diff
changeset
|
1082 if __name__ == "__main__": |
7825f6154a65
check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29566
diff
changeset
|
1083 sys.exit(main()) |