annotate contrib/check-code.py @ 44763:94f4f2ec7dee stable

packaging: support building Inno installer with PyOxidizer We want to start distributing Mercurial on Python 3 on Windows. PyOxidizer will be our vehicle for achieving that. This commit implements basic support for producing Inno installers using PyOxidizer. While it is an eventual goal of PyOxidizer to produce installers, those features aren't yet implemented. So our strategy for producing Mercurial installers is similar to what we've been doing with py2exe: invoke a build system to produce files then stage those files into a directory so they can be turned into an installer. We had to make significant alterations to the pyoxidizer.bzl config file to get it to produce the files that we desire for a Windows install. This meant differentiating the build targets so we can target Windows specifically. We've added a new module to hgpackaging to deal with interacting with PyOxidizer. It is similar to pyexe: we invoke a build process then copy files to a staging directory. Ideally these extra files would be defined in pyoxidizer.bzl. But I don't think it is worth doing at this time, as PyOxidizer's config files are lacking some features to make this turnkey. The rest of the change is introducing a variant of the Inno installer code that invokes PyOxidizer instead of py2exe. Comparing the Python 2.7 based Inno installers with this one, the following changes were observed: * No lib/*.{pyd, dll} files * No Microsoft.VC90.CRT.manifest * No msvc{m,p,r}90.dll files * python27.dll replaced with python37.dll * Add vcruntime140.dll file The disappearance of the .pyd and .dll files is acceptable, as PyOxidizer has embedded these in hg.exe and loads them from memory. The disappearance of the *90* files is acceptable because those provide the Visual C++ 9 runtime, as required by Python 2.7. Similarly, the appearance of vcruntime140.dll is a requirement of Python 3.7. Differential Revision: https://phab.mercurial-scm.org/D8473
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 23 Apr 2020 18:06:02 -0700
parents 313e3a279828
children c102b704edb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 #!/usr/bin/env python
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 #
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3 # check-code - a style and portability checker for Mercurial
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 #
10290
7cc60de189d7 check-code: fix copyright date
Matt Mackall <mpm@selenic.com>
parents: 10287
diff changeset
5 # Copyright 2010 Matt Mackall <mpm@selenic.com>
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
6 #
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7 # This software may be used and distributed according to the terms of the
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
8 # GNU General Public License version 2 or any later version.
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
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 from __future__ import absolute_import, print_function
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
23 import glob
13074
637627f31c74 check-code: check for gratuitous whitespace after Python keywords
Thomas Arendsen Hein <thomas@jtah.de>
parents: 13031
diff changeset
24 import keyword
10895
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
25 import optparse
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
26 import os
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
27 import re
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
28 import sys
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
29
29145
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
30 if sys.version_info[0] < 3:
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
31 opentext = open
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
32 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
33
29145
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
34 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
35 return open(f, encoding='latin1')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
36
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
37
19310
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
38 try:
29143
8ed693ec5398 check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents: 29142
diff changeset
39 xrange
8ed693ec5398 check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents: 29142
diff changeset
40 except NameError:
8ed693ec5398 check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents: 29142
diff changeset
41 xrange = range
8ed693ec5398 check-code: handle range/xrange divergence
timeless <timeless@mozdev.org>
parents: 29142
diff changeset
42 try:
19310
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
43 import re2
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
44 except ImportError:
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
45 re2 = None
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
46
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
47 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
48
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
49
19310
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
50 def compilere(pat, multiline=False):
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
51 if multiline:
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
52 pat = '(?m)' + pat
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
53 if re2:
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
54 try:
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
55 return re2.compile(pat)
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
56 except re2.error:
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
57 pass
30ea54660d14 check-code: introduce function for using re2 when available
Simon Heimberg <simohe@besonet.ch>
parents: 19309
diff changeset
58 return re.compile(pat)
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
59
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
60
29398
2a54cf92c773 check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29397
diff changeset
61 # 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
62 # patterns (especially pypats), before changing around repquote()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
63 _repquotefixedmap = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
64 ' ': ' ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
65 '\n': '\n',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
66 '.': 'p',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
67 ':': 'q',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
68 '%': '%',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
69 '\\': 'b',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
70 '*': 'A',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
71 '+': 'P',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
72 '-': 'M',
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
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
75
29398
2a54cf92c773 check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29397
diff changeset
76 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
77 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
78 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
79 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
80 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
81 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
82 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
83 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
84 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
85 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
86 return 'o'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
87
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
88
29398
2a54cf92c773 check-code: build translation table for repquote in global for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29397
diff changeset
89 _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
90
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
91
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
92 def repquote(m):
19999
169cb9e47f8e check-code: more replacement characters
Simon Heimberg <simohe@besonet.ch>
parents: 19998
diff changeset
93 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
94 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
95 return m.group('quote') + t + m.group('quote')
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
96
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
97
10727
62b8f15683f2 check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10723
diff changeset
98 def reppython(m):
62b8f15683f2 check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10723
diff changeset
99 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
100 if comment:
18959
2f6418d8a4c9 check-code: catch trailing space in comments
Mads Kiilerich <madski@unity3d.com>
parents: 18835
diff changeset
101 l = len(comment.rstrip())
2f6418d8a4c9 check-code: catch trailing space in comments
Mads Kiilerich <madski@unity3d.com>
parents: 18835
diff changeset
102 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
103 return repquote(m)
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
104
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
105
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
106 def repcomment(m):
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
107 return m.group(1) + "#" * len(m.group(2))
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
108
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
109
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
110 def repccomment(m):
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
111 t = re.sub(r"((?<=\n) )|\S", "x", m.group(2))
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
112 return m.group(1) + t + "*/"
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
113
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
114
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
115 def repcallspaces(m):
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
116 t = re.sub(r"\n\s+", "\n", m.group(2))
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
117 return m.group(1) + t
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
118
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
119
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
120 def repinclude(m):
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
121 return m.group(1) + "<foo>"
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
122
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
123
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
124 def rephere(m):
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
125 t = re.sub(r"\S", "x", m.group(2))
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
126 return m.group(1) + t
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
127
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
128
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
129 testpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
130 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
131 (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
132 (r'\W\$?\(\([^\)\n]*\)\)', "don't use (()) or $(()), use 'expr'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
133 (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
134 (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
135 (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
136 (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
137 (r'echo -n', "don't use 'echo -n', use printf"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
138 (r'(^|\|\s*)\bwc\b[^|]*$\n(?!.*\(re\))', "filter wc output"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
139 (r'head -c', "don't use 'head -c', use 'dd'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
140 (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
141 (r'sha1sum', "don't use sha1sum, use $TESTDIR/md5sum.py"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
142 (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
143 (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
144 (r'printf.*[^\\]\\x', "don't use printf \\x, use Python"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
145 (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
146 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
147 r'\[[^\]]+==',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
148 '[ foo == bar ] is a bashism, use [ foo = bar ] instead',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
149 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
150 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
151 r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
152 "use egrep for extended grep syntax",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
153 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
154 (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
155 (r'(?<!!)/bin/', "don't use explicit paths for tools"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
156 (r'#!.*/bash', "don't use bash in shebang, use sh"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
157 (r'[^\n]\Z', "no trailing newline"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
158 (r'export .*=', "don't export and assign at once"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
159 (r'^source\b', "don't use 'source', use '.'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
160 (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
161 (r'\bls +[^|\n-]+ +-', "options to 'ls' must come before filenames"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
162 (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
163 (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
164 (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
165 (r'\[\[\s+[^\]]*\]\]', "don't use '[[ ]]', use '[ ]'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
166 (r'^alias\b.*=', "don't use alias, use a function"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
167 (r'if\s*!', "don't use '!' to negate exit status"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
168 (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
169 (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
170 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
171 r'sed (-e )?\'(\d+|/[^/]*/)i(?!\\\n)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
172 "put a backslash-escaped newline after sed 'i' command",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
173 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
174 (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
175 (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
176 (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
177 (r'seq ', "don't use 'seq', use $TESTDIR/seq.py"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
178 (r'\butil\.Abort\b', "directly use error.Abort"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
179 (r'\|&', "don't use |&, use 2>&1"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
180 (r'\w = +\w', "only one space after = allowed"),
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'\bsed\b.*[^\\]\\n',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
183 "don't use 'sed ... \\n', use a \\ and a newline",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
184 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
185 (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
186 (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
187 (r'grep.* -[ABC]', "don't use grep's context flags"),
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'find.*-printf',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
190 "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
191 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
192 (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
193 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
194 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
195 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
196 (r'^function', "don't use 'function', use old style"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
197 (r'^diff.*-\w*N', "don't use 'diff -N'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
198 (r'\$PWD|\${PWD}', "don't use $PWD, use `pwd`"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
199 (r'^([^"\'\n]|("[^"\n]*")|(\'[^\'\n]*\'))*\^', "^ must be quoted"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
200 (r'kill (`|\$\()', "don't use kill, use killdaemons.py"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
201 ],
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
202 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
203
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
204 testfilters = [
34060
e267d4ee4f2d check-code: forbid using bash in shebang
Jun Wu <quark@fb.com>
parents: 33369
diff changeset
205 (r"( *)(#([^!][^\n]*\S)?)", repcomment),
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
206 (r"<<(\S+)((.|\n)*?\n\1)", rephere),
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
207 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
208
15372
695ac6aca77f check-code: fix issues with finding patterns in unified tests, fix tests
Matt Mackall <mpm@selenic.com>
parents: 15364
diff changeset
209 uprefix = r"^ \$ "
12364
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
210 utestpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
211 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
212 (r'^(\S.*|| [$>] \S.*)[ \t]\n', "trailing whitespace on non-output"),
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'.*\|\s*sed[^|>\n]*\n',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
215 "use regex test output patterns instead of sed",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
216 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
217 (uprefix + r'(true|exit 0)', "explicit zero exit unnecessary"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
218 (uprefix + r'.*(?<!\[)\$\?', "explicit exit code checks unnecessary"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
219 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
220 uprefix + r'.*\|\| echo.*(fail|error)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
221 "explicit exit code checks unnecessary",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
222 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
223 (uprefix + r'set -e', "don't use set -e"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
224 (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
225 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
226 uprefix + r'.*:\.\S*/',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
227 "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
228 "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
229 r'-\S+:\.|' '# no-msys', # -Rxxx
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
230 ), # in test-pull.t which is skipped on windows
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'^ [^$>].*27\.0\.0\.1',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
233 'use $LOCALIP not an explicit loopback address',
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'^ (?![>$] ).*\$LOCALIP.*[^)]$',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
237 '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
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'^ (cat|find): .*: \$ENOENT\$',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
241 'use test -f to test for file existence',
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 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
244 r'^ diff -[^ -]*p',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
245 "don't use (external) diff with -p for portability",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
246 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
247 (r' readlink ', 'use readlink.py instead of readlink'),
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'^ [-+][-+][-+] .* [-+]0000 \(glob\)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
250 "glob timezone field in diff output 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]+ [+][0-9]+ @@',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
258 "use '@@ -N,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 r'^ @@ -[0-9]+ [+][0-9]+ @@',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
262 "use '@@ -N* +N* @@ (glob)' style chunk header for portability",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
263 ),
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 uprefix + r'hg( +-[^ ]+( +[^ ]+)?)* +extdiff'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
266 r'( +(-[^ po-]+|--(?!program|option)[^ ]+|[^-][^ ]*))*$',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
267 "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
268 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
269 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
270 # warnings
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 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
273 r'^ (?!.*\$LOCALIP)[^*?/\n]* \(glob\)$',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
274 "glob match with no glob string (?, *, /, and $LOCALIP)",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
275 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
276 ],
12364
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
277 ]
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
278
35315
e223c0438f89 check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 35251
diff changeset
279 # 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
280 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
281 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
282 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
283 m = tp[1]
43503
313e3a279828 cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
284 if p.startswith('^'):
313e3a279828 cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
285 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
286 else:
43503
313e3a279828 cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
287 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
288 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
289
35315
e223c0438f89 check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 35251
diff changeset
290 # don't transform the following rules:
e223c0438f89 check-code: allow tabs in heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 35251
diff changeset
291 # " > \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
292 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
293 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
294
12364
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
295 utestfilters = [
17711
cf204e9829f4 check-code: replace heredocs in unified tests
Idan Kamara <idankk86@gmail.com>
parents: 17620
diff changeset
296 (r"<<(\S+)((.|\n)*?\n > \1)", rephere),
34060
e267d4ee4f2d check-code: forbid using bash in shebang
Jun Wu <quark@fb.com>
parents: 33369
diff changeset
297 (r"( +)(#([^!][^\n]*\S)?)", repcomment),
12364
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
298 ]
e128fa4615f2 check-code: add some basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents: 11886
diff changeset
299
41821
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
300 # 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
301 commonpypats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
302 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
303 (r'\\$', 'Use () to wrap long lines in Python, not \\'),
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'^\s*def\s*\w+\s*\(.*,\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 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
309 r'lambda\s*\(.*,.*\)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
310 "tuple parameter unpacking not available in Python 3+",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
311 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
312 (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
313 (r'(?<!\.)\breduce\s*\(.*', "reduce is not available in Python 3+"),
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'\bdict\(.*=',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
316 '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
317 'dict-from-generator',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
318 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
319 (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
320 (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
321 (r'^\s*\t', "don't use tabs"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
322 (r'\S;\s*\n', "semicolon"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
323 (r'[^_]_\([ \t\n]*(?:"[^"]+"[ \t\n+]*)+%', "don't use % inside _()"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
324 (r"[^_]_\([ \t\n]*(?:'[^']+'[ \t\n+]*)+%", "don't use % inside _()"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
325 (r'(\w|\)),\w', "missing whitespace after ,"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
326 (r'(\w|\))[+/*\-<>]\w', "missing whitespace in expression"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
327 (r'\w\s=\s\s+\w', "gratuitous whitespace after ="),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
328 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
329 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
330 # a line ending with a colon, potentially with trailing comments
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
331 r':([ \t]*#[^\n]*)?\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
332 # 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
333 r'(?P<indent>[ \t]+)[^#][^\n]+\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
334 # more lines at the same indent level
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
335 r'((?P=indent)[^\n]+\n)*'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
336 # a pass at the same indent level, which is bogus
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
337 r'(?P=indent)pass[ \t\n#]'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
338 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
339 'omit superfluous pass',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
340 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
341 (r'[^\n]\Z', "no trailing newline"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
342 (r'(\S[ \t]+|^[ \t]+)\n', "trailing whitespace"),
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'^\s+(self\.)?[A-Za-z][a-z0-9]+[A-Z]\w* = ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
345 "don't use camelcase in identifiers",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
346 r'#.*camelcase-required',
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 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
349 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
350 "linebreak after :",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
351 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
352 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
353 r'class\s[^( \n]+:',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
354 "old-style class, use class foo(object)",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
355 r'#.*old-style',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
356 ),
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'class\s[^( \n]+\(\):',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
359 "class foo() creates old style object, use class foo(object)",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
360 r'#.*old-style',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
361 ),
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 r'\b(%s)\('
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
364 % '|'.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
365 "Python keyword is not a function",
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 # (r'class\s[A-Z][^\(]*\((?!Exception)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
368 # "don't capitalize non-exception classes"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
369 # (r'in range\(', "use xrange"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
370 # (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
371 (r'[\x80-\xff]', "non-ASCII character literal"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
372 (r'("\')\.format\(', "str.format() has no bytes counterpart, use %"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
373 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
374 r'([\(\[][ \t]\S)|(\S[ \t][\)\]])',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
375 "gratuitous whitespace in () or []",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
376 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
377 # (r'\s\s=', "gratuitous whitespace before ="),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
378 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
379 r'[^>< ](\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\S',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
380 "missing whitespace around operator",
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 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
383 r'[^>< ](\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\s',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
384 "missing whitespace around operator",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
385 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
386 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
387 r'\s(\+=|-=|!=|<>|<=|>=|<<=|>>=|%=)\S',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
388 "missing whitespace around operator",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
389 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
390 (r'[^^+=*/!<>&| %-](\s=|=\s)[^= ]', "wrong whitespace around ="),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
391 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
392 r'\([^()]*( =[^=]|[^<>!=]= )',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
393 "no whitespace around = for named parameters",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
394 ),
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'raise [^,(]+, (\([^\)]+\)|[^,\(\)]+)$',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
397 "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
398 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
399 (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
400 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
401 r' [=!]=\s+(True|False|None)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
402 "comparison with singleton, use 'is' or 'is not' instead",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
403 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
404 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
405 r'^\s*(while|if) [01]:',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
406 "use True/False for constant Boolean expression",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
407 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
408 (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
409 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
410 r'(?:(?<!def)\s+|\()hasattr\(',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
411 'hasattr(foo, bar) is broken on py2, use util.safehasattr(foo, bar) '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
412 'instead',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
413 r'#.*hasattr-py3-only',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
414 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
415 (r'opener\([^)]*\).read\(', "use opener.read() instead"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
416 (r'opener\([^)]*\).write\(', "use opener.write() instead"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
417 (r'(?i)descend[e]nt', "the proper spelling is descendAnt"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
418 (r'\.debug\(\_', "don't mark debug messages for translation"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
419 (r'\.strip\(\)\.split\(\)', "no need to strip before splitting"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
420 (r'^\s*except\s*:', "naked except clause", r'#.*re-raises'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
421 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
422 r'^\s*except\s([^\(,]+|\([^\)]+\))\s*,',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
423 'legacy exception syntax; use "as" instead of ","',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
424 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
425 (r'release\(.*wlock, .*lock\)', "wrong lock release order"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
426 (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
427 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
428 r'os\.path\.join\(.*, *(""|\'\')\)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
429 "use pathutil.normasprefix(path) instead of os.path.join(path, '')",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
430 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
431 (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
432 # 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
433 (r'def.*[( ]\w+=\{\}', "don't use mutable default arguments"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
434 (r'\butil\.Abort\b', "directly use error.Abort"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
435 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
436 r'^@(\w*\.)?cachefunc',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
437 "module-level @cachefunc is risky, please avoid",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
438 ),
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 r'^import Queue',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
441 "don't use Queue, use pycompat.queue.Queue + "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
442 "pycompat.queue.Empty",
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'^import cStringIO',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
446 "don't use cStringIO.StringIO, use util.stringio",
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'^import urllib', "don't use urllib, use util.urlreq/util.urlerr"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
449 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
450 r'^import SocketServer',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
451 "don't use SockerServer, use util.socketserver",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
452 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
453 (r'^import urlparse', "don't use urlparse, use util.urlreq"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
454 (r'^import xmlrpclib', "don't use xmlrpclib, use util.xmlrpclib"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
455 (r'^import cPickle', "don't use cPickle, use util.pickle"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
456 (r'^import pickle', "don't use pickle, use util.pickle"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
457 (r'^import httplib', "don't use httplib, use util.httplib"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
458 (r'^import BaseHTTPServer', "use util.httpserver instead"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
459 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
460 r'^(from|import) mercurial\.(cext|pure|cffi)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
461 "use mercurial.policy.importmod instead",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
462 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
463 (r'\.next\(\)', "don't use .next(), use next(...)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
464 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
465 r'([a-z]*).revision\(\1\.node\(',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
466 "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
467 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
468 (r'platform\.system\(\)', "don't use platform.system(), use pycompat"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
469 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
470 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
471 [],
41821
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
472 ]
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
473
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
474 # 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
475 pypats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
476 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
477 # Ideally, these should be placed in "commonpypats" for
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
478 # consistency of coding rules in Mercurial source tree.
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
479 # 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
480 # python code fragments embedded in test scripts. Fixing test
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
481 # scripts for these patterns requires many changes, and has less
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
482 # profit than effort.
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
483 (r'raise Exception', "don't raise generic exceptions"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
484 (r'[\s\(](open|file)\([^)]*\)\.read\(', "use util.readfile() instead"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
485 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
486 r'[\s\(](open|file)\([^)]*\)\.write\(',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
487 "use util.writefile() instead",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
488 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
489 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
490 r'^[\s\(]*(open(er)?|file)\([^)]*\)(?!\.close\(\))',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
491 "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
492 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
493 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
494 r'[\s\(](open|file)\([^)]*\)\.(?!close\(\))',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
495 "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
496 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
497 (r':\n( )*( ){1,3}[^ ]', "must indent 4 spaces"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
498 (r'^import atexit', "don't use atexit, use ui.atexit"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
499 # rules depending on implementation of repquote()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
500 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
501 r' x+[xpqo%APM][\'"]\n\s+[\'"]x',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
502 'string join across lines with no space',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
503 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
504 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
505 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
506 [ \t\n#]*
844f72885fb9 check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29330
diff changeset
507 (?# 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
508 # 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
509 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
510 (?# 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
511 # - 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
512 # - 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
513 # - 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
514 (['"]|\'\'\'|""")
844f72885fb9 check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29330
diff changeset
515 ((%([ 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
516 (?# 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
517 # 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
518 # even though this regexp wants match it against "\n")''',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
519 "missing _() in ui message (use () to hide false-positives)",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
520 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
521 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
522 + commonpypats[0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
523 # warnings
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 # rules depending on implementation of repquote()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
526 (r'(^| )pp +xxxxqq[ \n][^\n]', "add two newlines after '.. note::'"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
527 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
528 + commonpypats[1],
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
529 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
530
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
531 # 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
532 embeddedpypats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
533 [] + commonpypats[0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
534 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
535 [] + 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
536 ]
867883d454ea contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41825
diff changeset
537
41821
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
538 # 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
539 commonpyfilters = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
540 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
541 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
542 ((?P<quote>('''|\"\"\"|(?<!')'(?!')|(?<!")"(?!")))
62b8f15683f2 check-code: more tests and more robust python filtering
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10723
diff changeset
543 (?P<text>(([^\\]|\\.)*?))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
544 (?P=quote))""",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
545 reppython,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
546 ),
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
547 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
548
41821
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
549 # filters to convert normal *.py files
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
550 pyfilters = [] + commonpyfilters
41821
14e8d042993a contrib: split pypats list in check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41761
diff changeset
551
34648
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
552 # non-filter patterns
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
553 pynfpats = [
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
554 [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
555 (r'pycompat\.osname\s*[=!]=\s*[\'"]nt[\'"]', "use pycompat.iswindows"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
556 (r'pycompat\.osname\s*[=!]=\s*[\'"]posix[\'"]', "use pycompat.isposix"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
557 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
558 r'pycompat\.sysplatform\s*[!=]=\s*[\'"]darwin[\'"]',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
559 "use pycompat.isdarwin",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
560 ),
34648
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
561 ],
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
562 # warnings
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
563 [],
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
564 ]
4889b84b15f2 check-code: suggest pycompat.is(posix|windows|darwin)
Jun Wu <quark@fb.com>
parents: 34642
diff changeset
565
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
566 # 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
567 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
568
31602
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
569 # extension non-filter patterns
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
570 pyextnfpats = [
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
571 [(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
572 # warnings
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
573 [],
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
574 ]
772878ac930e checkcode: enforce lowercase for extension docstring title
Jun Wu <quark@fb.com>
parents: 31572
diff changeset
575
18960
170fc0949fb6 check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents: 18959
diff changeset
576 txtfilters = []
170fc0949fb6 check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents: 18959
diff changeset
577
170fc0949fb6 check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents: 18959
diff changeset
578 txtpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
579 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
580 (r'\s$', 'trailing whitespace'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
581 ('.. note::[ \n][^\n]', 'add two newlines after note::'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
582 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
583 [],
18960
170fc0949fb6 check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents: 18959
diff changeset
584 ]
170fc0949fb6 check-code: check txt files for trailing whitespace
Mads Kiilerich <madski@unity3d.com>
parents: 18959
diff changeset
585
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
586 cpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
587 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
588 (r'//', "don't use //-style comments"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
589 (r'\S\t', "don't use tabs except for indent"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
590 (r'(\S[ \t]+|^[ \t]+)\n', "trailing whitespace"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
591 (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
592 (r'return\(', "return is not a function"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
593 (r' ;', "no space before ;"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
594 (r'[^;] \)', "no space before )"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
595 (r'[)][{]', "space between ) and {"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
596 (r'\w+\* \w+', "use int *foo, not int* foo"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
597 (r'\W\([^\)]+\) \w+', "use (int)foo, not (int) foo"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
598 (r'\w+ (\+\+|--)', "use foo++, not foo ++"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
599 (r'\w,\w', "missing whitespace after ,"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
600 (r'^[^#]\w[+/*]\w', "missing whitespace in expression"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
601 (r'\w\s=\s\s+\w', "gratuitous whitespace after ="),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
602 (r'^#\s+\w', "use #foo, not # foo"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
603 (r'[^\n]\Z', "no trailing newline"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
604 (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
605 (r'strcpy\(', "don't use strcpy, use strlcpy or memcpy"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
606 (r'strcat\(', "don't use strcat"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
607 # rules depending on implementation of repquote()
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 # warnings
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 # rules depending on implementation of repquote()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
612 ],
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
613 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
614
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
615 cfilters = [
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
616 (r'(/\*)(((\*(?!/))|[^*])*)\*/', repccomment),
10722
c4fb2103e734 check-code: improve quote detection regexp, add tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10720
diff changeset
617 (r'''(?P<quote>(?<!")")(?P<text>([^"]|\\")+)"(?!")''', repquote),
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
618 (r'''(#\s*include\s+<)([^>]+)>''', repinclude),
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
619 (r'(\()([^)]+\))', repcallspaces),
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
620 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
621
14137
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
622 inutilpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
623 [(r'\bui\.', "don't use ui in util"),],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
624 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
625 [],
14137
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
626 ]
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
627
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
628 inrevlogpats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
629 [(r'\brepo\.', "don't use repo in revlog"),],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
630 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
631 [],
14137
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
632 ]
83a94c2fe6f4 check-code: check for repo in revlog and ui in util
timeless <timeless@mozdev.org>
parents: 14136
diff changeset
633
21487
c26464ce0781 check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents: 21222
diff changeset
634 webtemplatefilters = []
c26464ce0781 check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents: 21222
diff changeset
635
c26464ce0781 check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents: 21222
diff changeset
636 webtemplatepats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
637 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
638 [
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 r'{desc(\|(?!websub|firstline)[^\|]*)+}',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
641 'follow desc keyword with either firstline or websub',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
642 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
643 ],
21487
c26464ce0781 check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents: 21222
diff changeset
644 ]
c26464ce0781 check-code: check for consistent usage of the websub filter in hgweb templates
Steven Brown <StevenGBrown@gmail.com>
parents: 21222
diff changeset
645
30246
b4c0f8d5edd2 contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30245
diff changeset
646 allfilesfilters = []
b4c0f8d5edd2 contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30245
diff changeset
647
b4c0f8d5edd2 contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30245
diff changeset
648 allfilespats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
649 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
650 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
651 r'(http|https)://[a-zA-Z0-9./]*selenic.com/',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
652 'use mercurial-scm.org domain URL',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
653 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
654 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
655 r'mercurial@selenic\.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
656 'use mercurial-scm.org domain for mercurial ML address',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
657 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
658 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
659 r'mercurial-devel@selenic\.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
660 'use mercurial-scm.org domain for mercurial-devel ML address',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
661 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
662 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
663 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
664 [],
30246
b4c0f8d5edd2 contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30245
diff changeset
665 ]
b4c0f8d5edd2 contrib: check reference to old selenic.com domain
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30245
diff changeset
666
30665
01721d382c16 py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30557
diff changeset
667 py3pats = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
668 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
669 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
670 r'os\.environ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
671 "use encoding.environ instead (py3)",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
672 r'#.*re-exports',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
673 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
674 (r'os\.name', "use pycompat.osname instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
675 (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
676 (r'os\.sep', "use pycompat.ossep instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
677 (r'os\.pathsep', "use pycompat.ospathsep instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
678 (r'os\.altsep', "use pycompat.osaltsep instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
679 (r'sys\.platform', "use pycompat.sysplatform instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
680 (r'getopt\.getopt', "use pycompat.getoptb instead (py3)"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
681 (r'os\.getenv', "use encoding.environ.get instead"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
682 (r'os\.setenv', "modifying the environ dict is not preferred"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
683 (r'(?<!pycompat\.)xrange', "use pycompat.xrange instead (py3)"),
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 # warnings
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
686 [],
30665
01721d382c16 py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30557
diff changeset
687 ]
01721d382c16 py3: add warnings in check-code related to py3
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30557
diff changeset
688
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
689 checks = [
21222
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
690 ('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
691 ('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
692 ('python', r'.*hgext.*\.py$', '', [], pyextnfpats),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
693 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
694 'python 3',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
695 r'.*(hgext|mercurial)/(?!demandimport|policy|pycompat).*\.py',
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 pyfilters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
698 py3pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
699 ),
21222
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
700 ('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
701 ('c', r'.*\.[ch]$', '', cfilters, cpats),
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
702 ('unified test', r'.*\.t$', '', utestfilters, utestpats),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
703 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
704 'layering violation repo in revlog',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
705 r'mercurial/revlog\.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
706 '',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
707 pyfilters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
708 inrevlogpats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
709 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
710 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
711 'layering violation ui in util',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
712 r'mercurial/util\.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
713 '',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
714 pyfilters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
715 inutilpats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
716 ),
21222
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
717 ('txt', r'.*\.txt$', '', txtfilters, txtpats),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
718 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
719 'web template',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
720 r'mercurial/templates/.*\.tmpl',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
721 '',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
722 webtemplatefilters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
723 webtemplatepats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
724 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
725 ('all except for .po', r'.*(?<!\.po)$', '', allfilesfilters, allfilespats),
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
726 ]
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
727
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
728 # (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
729 # 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
730 # 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
731 # 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
732 embeddedchecks = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
733 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
734 'embedded python',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
735 testparseutil.pyembedded,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
736 embeddedpyfilters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
737 embeddedpypats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
738 )
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
739 ]
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
741
19307
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
742 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
743 def preparefailandwarn(failandwarn):
19307
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
744 for pats in failandwarn:
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
745 for i, pseq in enumerate(pats):
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
746 # 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
747 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
748 # \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
749 # 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
750 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
751 # 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
752 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
753 # [^...] doesn't match newline
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
754 p = re.sub(r'(?<!\\)\[\^', r'[^\\n', p)
5443d40d524b check-code: only fix patterns once
Simon Heimberg <simohe@besonet.ch>
parents: 19168
diff changeset
755
19308
84faaacbd3fa check-code: compile all patterns on initialisation
Simon Heimberg <simohe@besonet.ch>
parents: 19307
diff changeset
756 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
757
55ae5cd31f76 contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41821
diff changeset
758 def preparefilters(filters):
19309
7d77fa1cd537 check-code: compile filters when loading
Simon Heimberg <simohe@besonet.ch>
parents: 19308
diff changeset
759 for i, flt in enumerate(filters):
7d77fa1cd537 check-code: compile filters when loading
Simon Heimberg <simohe@besonet.ch>
parents: 19308
diff changeset
760 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
761
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
762 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
763 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
764 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
765 preparefailandwarn(failandwarn)
55ae5cd31f76 contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41821
diff changeset
766
55ae5cd31f76 contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41821
diff changeset
767 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
768 preparefilters(filters)
55ae5cd31f76 contrib: refactor preparation logic for patterns of check-code.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41821
diff changeset
769
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
770
10719
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
771 class norepeatlogger(object):
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
772 def __init__(self):
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
773 self._lastseen = None
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
774
11604
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
775 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
776 """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
777
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
778 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
779 of multiple errors.
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
780
10719
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
781 :fname: filename
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
782 :lineno: line number
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
783 :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
784 :msg: error message
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
785 """
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
786 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
787 if msgid != self._lastseen:
11604
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
788 if blame:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
789 print("%s:%d (%s):" % (fname, lineno, blame))
11604
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
790 else:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
791 print("%s:%d:" % (fname, lineno))
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
792 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
793 self._lastseen = msgid
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
794 print(" " + msg)
10719
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
795
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
796
10719
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
797 _defaultlogger = norepeatlogger()
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
798
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
799
11604
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
800 def getblame(f):
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
801 lines = []
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
802 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
803 start, line = l.split(':', 1)
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
804 user, rev = start.split()
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
805 lines.append((line[1:-1], user, rev))
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
806 return lines
c5d40818b270 check-code: add --blame switch
Matt Mackall <mpm@selenic.com>
parents: 11602
diff changeset
807
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
808
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
809 def checkfile(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
810 f,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
811 logfunc=_defaultlogger.log,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
812 maxerr=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
813 warnings=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
814 blame=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
815 debug=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
816 lineno=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
817 ):
10719
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
818 """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
819
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
820 :f: filepath
3be9ae49b628 code-code: Add a logfunc argument to checkfile
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10718
diff changeset
821 :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
822 logfunc(filename, linenumber, linecontent, errormessage)
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17347
diff changeset
823 :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
824 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
825
fbcccf9ec58f check-code: add a return value to checkfile function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10719
diff changeset
826 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
827 """
10720
fbcccf9ec58f check-code: add a return value to checkfile function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10719
diff changeset
828 result = True
21222
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
829
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
830 try:
29145
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
831 with opentext(f) as fp:
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
832 try:
41365
876494fd967d cleanup: delete lots of unused local variables
Martin von Zweigbergk <martinvonz@google.com>
parents: 39818
diff changeset
833 pre = fp.read()
29145
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
834 except UnicodeDecodeError as e:
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
835 print("%s while reading %s" % (e, f))
c641b8dfb98c check-code: handle py3 open divergence
timeless <timeless@mozdev.org>
parents: 29144
diff changeset
836 return result
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25659
diff changeset
837 except IOError as e:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
838 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
839 return result
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
840
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
841 # 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
842 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
843
21222
4840abc83970 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com>
parents: 21097
diff changeset
844 for name, match, magic, filters, pats in checks:
14135
673abd432104 check-code: adding debug flag
timeless <timeless@mozdev.org>
parents: 14009
diff changeset
845 if debug:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
846 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
847 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
848 if debug:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
849 print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
850 "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
851 )
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
852 continue
19382
5aeb03b48ab4 check-code: concatenate "check-code" on compile time
Simon Heimberg <simohe@besonet.ch>
parents: 19380
diff changeset
853 if "no-" "check-code" in pre:
27560
15b06f306c1f check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents: 27557
diff changeset
854 # 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
855 # no- check- code
15b06f306c1f check-code: improve test-check-code error diffs
timeless <timeless@mozdev.org>
parents: 27557
diff changeset
856 # 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
857 # 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
858 # 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
859 # tests/test-check-code.t
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
860 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
861 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
862
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
863 fc = _checkfiledata(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
864 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
865 f,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
866 pre,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
867 filters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
868 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
869 context,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
870 logfunc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
871 maxerr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
872 warnings,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
873 blame,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
874 debug,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
875 lineno,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
876 )
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
877 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
878 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
879
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
880 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
881 if debug:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
882 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
883
867883d454ea contrib: make check-code.py check code fragments embedded in test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 41825
diff changeset
884 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
885 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
886 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
887 # "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
888 # 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
889 # (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
890 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
891
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 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
893 filename, starts, ends, code = found
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
894 fc = _checkfiledata(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
895 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
896 f,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
897 code,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
898 filters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
899 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
900 context,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
901 logfunc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
902 curmaxerr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
903 warnings,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
904 blame,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
905 debug,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
906 lineno,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
907 offset=starts - 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
908 )
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
909 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
910 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
911 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
912 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
913 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
914 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
915
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
916 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
917
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
918
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
919 def _checkfiledata(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
920 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
921 f,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
922 filedata,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
923 filters,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
924 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
925 context,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
926 logfunc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
927 maxerr,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
928 warnings,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
929 blame,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
930 debug,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
931 lineno,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
932 offset=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
933 ):
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 """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
935
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
936 :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
937 :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
938 :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
939 :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
940 :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
941 :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
942 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
943 :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
944 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
945 :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
946 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
947 :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
948 :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
949 :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
950 :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
951 :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
952 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
953 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
954
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
955 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
956 """
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
957 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
958 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
959 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
960 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
961 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
962
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
963 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
964 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
965
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
966 if True: # TODO: get rid of this redundant 'if' block
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
967 for p, r in filters:
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
968 post = re.sub(p, r, post)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
969 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
970 if warnings:
64de9ca66511 check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents: 14005
diff changeset
971 pats = pats[0] + pats[1]
64de9ca66511 check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents: 14005
diff changeset
972 else:
64de9ca66511 check-code: separate warnings to avoid repetitive str.startswith
Idan Kamara <idankk86@gmail.com>
parents: 14005
diff changeset
973 pats = pats[0]
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
974 # 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
975
14135
673abd432104 check-code: adding debug flag
timeless <timeless@mozdev.org>
parents: 14009
diff changeset
976 if debug:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
977 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
978
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
979 prelines = None
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
980 errors = []
19422
d9e86d656017 check-code: automatically preppend "warning: " to all warning messages
Simon Heimberg <simohe@besonet.ch>
parents: 19382
diff changeset
981 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
982 if len(pat) == 3:
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
983 p, msg, ignore = pat
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
984 else:
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
985 p, msg = pat
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
986 ignore = None
20005
22154ec6fb8b check-code: prepend warning prefix only once, but for each warning
Simon Heimberg <simohe@besonet.ch>
parents: 19999
diff changeset
987 if i >= nerrs:
22154ec6fb8b check-code: prepend warning prefix only once, but for each warning
Simon Heimberg <simohe@besonet.ch>
parents: 19999
diff changeset
988 msg = "warning: " + msg
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
989
15281
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
990 pos = 0
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
991 n = 0
19308
84faaacbd3fa check-code: compile all patterns on initialisation
Simon Heimberg <simohe@besonet.ch>
parents: 19307
diff changeset
992 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
993 if prelines is None:
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
994 prelines = pre.splitlines()
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
995 postlines = post.splitlines(True)
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
996
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
997 start = m.start()
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
998 while n < len(postlines):
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
999 step = len(postlines[n])
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1000 if pos + step > start:
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1001 break
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1002 pos += step
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1003 n += 1
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1004 l = prelines[n]
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1005
20242
2dad90bdf29d check-code: drop now unused check-code-ignore
Simon Heimberg <simohe@besonet.ch>
parents: 20241
diff changeset
1006 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
1007 if debug:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1008 print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1009 "Skipping %s for %s:%s (ignore pattern)"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1010 % (name, f, (n + lineoffset))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1011 )
16705
c2d9ef43ff6c check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents: 16704
diff changeset
1012 continue
15281
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1013 bd = ""
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1014 if blame:
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1015 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
1016 if blamecache is None:
15281
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1017 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
1018 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
1019 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
1020 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
1021 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
1022 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
1023 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
1024 # "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
1025 # 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
1026 # "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
1027 # 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
1028 # 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
1029 # 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
1030 # 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
1031 # 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
1032 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
1033
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
1034 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
1035
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1036 errors.sort()
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1037 for e in errors:
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1038 logfunc(*e)
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1039 fc += 1
15873
a153a86a472c tests: keep track of all check-code.py warnings
Mads Kiilerich <mads@kiilerich.com>
parents: 15611
diff changeset
1040 if maxerr and fc >= maxerr:
28509
9e3ecb6f4995 check-code: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28399
diff changeset
1041 print(" (too many errors, giving up)")
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1042 break
15281
aeeb2afcdc25 check-code: support multiline matches like try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 14978
diff changeset
1043
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
1044 return fc
10717
b1f4fcef99b3 check-code: Add a ``checkfile`` function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 10716
diff changeset
1045
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1046
29568
7825f6154a65 check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29566
diff changeset
1047 def main():
31824
4804644489cf check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents: 31816
diff changeset
1048 parser = optparse.OptionParser("%prog [options] [files | -]")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1049 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1050 "-w",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1051 "--warnings",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1052 action="store_true",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1053 help="include warning-level checks",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1054 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1055 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1056 "-p", "--per-file", type="int", help="max warnings per file"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1057 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1058 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1059 "-b",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1060 "--blame",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1061 action="store_true",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1062 help="use annotate to generate blame info",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1063 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1064 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1065 "", "--debug", action="store_true", help="show debug information"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1066 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1067 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1068 "",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1069 "--nolineno",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1070 action="store_false",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1071 dest='lineno',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1072 help="don't show line numbers",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1073 )
10895
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
1074
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1075 parser.set_defaults(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1076 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
1077 )
10895
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
1078 (options, args) = parser.parse_args()
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
1079
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
1080 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
1081 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
1082 elif args == ['-']:
4804644489cf check-code: use "-" to specify a list of files from stdin
Jun Wu <quark@fb.com>
parents: 31816
diff changeset
1083 # 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
1084 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
1085 else:
10895
217557b26bc7 check-code: add a warnings level
Matt Mackall <mpm@selenic.com>
parents: 10814
diff changeset
1086 check = args
10281
e7d3b509af8b Introduce check-code.py
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1087
29569
3d52e7c78a6b check-code: move fixing up regexp into main procedure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29568
diff changeset
1088 _preparepats()
3d52e7c78a6b check-code: move fixing up regexp into main procedure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29568
diff changeset
1089
15544
53ef627cda30 check-code: fix return code initialization
Mads Kiilerich <mads@kiilerich.com>
parents: 15502
diff changeset
1090 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
1091 for f in check:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1092 if not checkfile(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1093 f,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1094 maxerr=options.per_file,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1095 warnings=options.warnings,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1096 blame=options.blame,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1097 debug=options.debug,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1098 lineno=options.lineno,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1099 ):
11816
e1359ad582f6 check-code: add exit status
Alecs King <alecsk@gmail.com>
parents: 11764
diff changeset
1100 ret = 1
29568
7825f6154a65 check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29566
diff changeset
1101 return ret
7825f6154a65 check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29566
diff changeset
1102
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43063
diff changeset
1103
29568
7825f6154a65 check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29566
diff changeset
1104 if __name__ == "__main__":
7825f6154a65 check-code: factor out boot procedure into main
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29566
diff changeset
1105 sys.exit(main())