comparison tests/test-contrib-check-code.t @ 40094:ff47ba7a2903

tests: use NO_CHECK_EOF as heredoc limit mark to omit checking code fragments This patch uses NO_CHECK_EOF as heredoc limit mark instead of EOF, in order to avoid checking all python code fragments in test-contrib-check-code.t, because almost all of them has un-recommended implementations intentionally.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Thu, 23 Aug 2018 12:25:54 +0900
parents e223c0438f89
children e2472b12c842
comparison
equal deleted inserted replaced
40093:726cfc47f17a 40094:ff47ba7a2903
1 $ cat > correct.py <<EOF 1 $ cat > correct.py <<NO_CHECK_EOF
2 > def toto(arg1, arg2): 2 > def toto(arg1, arg2):
3 > del arg2 3 > del arg2
4 > return (5 + 6, 9) 4 > return (5 + 6, 9)
5 > EOF 5 > NO_CHECK_EOF
6 $ cat > wrong.py <<EOF 6 $ cat > wrong.py <<NO_CHECK_EOF
7 > def toto( arg1, arg2): 7 > def toto( arg1, arg2):
8 > del(arg2) 8 > del(arg2)
9 > return ( 5+6, 9) 9 > return ( 5+6, 9)
10 > EOF 10 > NO_CHECK_EOF
11 $ cat > quote.py <<EOF 11 $ cat > quote.py <<NO_CHECK_EOF
12 > # let's use quote in comments 12 > # let's use quote in comments
13 > (''' ( 4x5 ) 13 > (''' ( 4x5 )
14 > but """\\''' and finally''', 14 > but """\\''' and finally''',
15 > """let's fool checkpatch""", '1+2', 15 > """let's fool checkpatch""", '1+2',
16 > '"""', 42+1, """and 16 > '"""', 42+1, """and
17 > ( 4-1 ) """, "( 1+1 )\" and ") 17 > ( 4-1 ) """, "( 1+1 )\" and ")
18 > a, '\\\\\\\\', "\\\\\\" x-2", "c-1" 18 > a, '\\\\\\\\', "\\\\\\" x-2", "c-1"
19 > EOF 19 > NO_CHECK_EOF
20 $ cat > classstyle.py <<EOF 20 $ cat > classstyle.py <<NO_CHECK_EOF
21 > class newstyle_class(object): 21 > class newstyle_class(object):
22 > pass 22 > pass
23 > 23 >
24 > class oldstyle_class: 24 > class oldstyle_class:
25 > pass 25 > pass
27 > class empty(): 27 > class empty():
28 > pass 28 > pass
29 > 29 >
30 > no_class = 1: 30 > no_class = 1:
31 > pass 31 > pass
32 > EOF 32 > NO_CHECK_EOF
33 $ check_code="$TESTDIR"/../contrib/check-code.py 33 $ check_code="$TESTDIR"/../contrib/check-code.py
34 $ "$check_code" ./wrong.py ./correct.py ./quote.py ./classstyle.py 34 $ "$check_code" ./wrong.py ./correct.py ./quote.py ./classstyle.py
35 ./wrong.py:1: 35 ./wrong.py:1:
36 > def toto( arg1, arg2): 36 > def toto( arg1, arg2):
37 gratuitous whitespace in () or [] 37 gratuitous whitespace in () or []
50 old-style class, use class foo(object) 50 old-style class, use class foo(object)
51 ./classstyle.py:7: 51 ./classstyle.py:7:
52 > class empty(): 52 > class empty():
53 class foo() creates old style object, use class foo(object) 53 class foo() creates old style object, use class foo(object)
54 [1] 54 [1]
55 $ cat > python3-compat.py << EOF 55 $ cat > python3-compat.py << NO_CHECK_EOF
56 > foo <> bar 56 > foo <> bar
57 > reduce(lambda a, b: a + b, [1, 2, 3, 4]) 57 > reduce(lambda a, b: a + b, [1, 2, 3, 4])
58 > dict(key=value) 58 > dict(key=value)
59 > EOF 59 > NO_CHECK_EOF
60 $ "$check_code" python3-compat.py 60 $ "$check_code" python3-compat.py
61 python3-compat.py:1: 61 python3-compat.py:1:
62 > foo <> bar 62 > foo <> bar
63 <> operator is not available in Python 3+, use != 63 <> operator is not available in Python 3+, use !=
64 python3-compat.py:2: 64 python3-compat.py:2:
67 python3-compat.py:3: 67 python3-compat.py:3:
68 > dict(key=value) 68 > dict(key=value)
69 dict() is different in Py2 and 3 and is slower than {} 69 dict() is different in Py2 and 3 and is slower than {}
70 [1] 70 [1]
71 71
72 $ cat > foo.c <<EOF 72 $ cat > foo.c <<NO_CHECK_EOF
73 > void narf() { 73 > void narf() {
74 > strcpy(foo, bar); 74 > strcpy(foo, bar);
75 > // strcpy_s is okay, but this comment is not 75 > // strcpy_s is okay, but this comment is not
76 > strcpy_s(foo, bar); 76 > strcpy_s(foo, bar);
77 > } 77 > }
78 > EOF 78 > NO_CHECK_EOF
79 $ "$check_code" ./foo.c 79 $ "$check_code" ./foo.c
80 ./foo.c:2: 80 ./foo.c:2:
81 > strcpy(foo, bar); 81 > strcpy(foo, bar);
82 don't use strcpy, use strlcpy or memcpy 82 don't use strcpy, use strlcpy or memcpy
83 ./foo.c:3: 83 ./foo.c:3:
84 > // strcpy_s is okay, but this comment is not 84 > // strcpy_s is okay, but this comment is not
85 don't use //-style comments 85 don't use //-style comments
86 [1] 86 [1]
87 87
88 $ cat > is-op.py <<EOF 88 $ cat > is-op.py <<NO_CHECK_EOF
89 > # is-operator comparing number or string literal 89 > # is-operator comparing number or string literal
90 > x = None 90 > x = None
91 > y = x is 'foo' 91 > y = x is 'foo'
92 > y = x is "foo" 92 > y = x is "foo"
93 > y = x is 5346 93 > y = x is 5346
94 > y = x is -6 94 > y = x is -6
95 > y = x is not 'foo' 95 > y = x is not 'foo'
96 > y = x is not "foo" 96 > y = x is not "foo"
97 > y = x is not 5346 97 > y = x is not 5346
98 > y = x is not -6 98 > y = x is not -6
99 > EOF 99 > NO_CHECK_EOF
100 100
101 $ "$check_code" ./is-op.py 101 $ "$check_code" ./is-op.py
102 ./is-op.py:3: 102 ./is-op.py:3:
103 > y = x is 'foo' 103 > y = x is 'foo'
104 object comparison with literal 104 object comparison with literal
123 ./is-op.py:10: 123 ./is-op.py:10:
124 > y = x is not -6 124 > y = x is not -6
125 object comparison with literal 125 object comparison with literal
126 [1] 126 [1]
127 127
128 $ cat > for-nolineno.py <<EOF 128 $ cat > for-nolineno.py <<NO_CHECK_EOF
129 > except: 129 > except:
130 > EOF 130 > NO_CHECK_EOF
131 $ "$check_code" for-nolineno.py --nolineno 131 $ "$check_code" for-nolineno.py --nolineno
132 for-nolineno.py:0: 132 for-nolineno.py:0:
133 > except: 133 > except:
134 naked except clause 134 naked except clause
135 [1] 135 [1]
136 136
137 $ cat > warning.t <<EOF 137 $ cat > warning.t <<NO_CHECK_EOF
138 > $ function warnonly { 138 > $ function warnonly {
139 > > } 139 > > }
140 > $ diff -N aaa 140 > $ diff -N aaa
141 > $ function onwarn {} 141 > $ function onwarn {}
142 > EOF 142 > NO_CHECK_EOF
143 $ "$check_code" warning.t 143 $ "$check_code" warning.t
144 $ "$check_code" --warn warning.t 144 $ "$check_code" --warn warning.t
145 warning.t:1: 145 warning.t:1:
146 > $ function warnonly { 146 > $ function warnonly {
147 warning: don't use 'function', use old style 147 warning: don't use 'function', use old style
150 warning: don't use 'diff -N' 150 warning: don't use 'diff -N'
151 warning.t:4: 151 warning.t:4:
152 > $ function onwarn {} 152 > $ function onwarn {}
153 warning: don't use 'function', use old style 153 warning: don't use 'function', use old style
154 [1] 154 [1]
155 $ cat > error.t <<EOF 155 $ cat > error.t <<NO_CHECK_EOF
156 > $ [ foo == bar ] 156 > $ [ foo == bar ]
157 > EOF 157 > NO_CHECK_EOF
158 $ "$check_code" error.t 158 $ "$check_code" error.t
159 error.t:1: 159 error.t:1:
160 > $ [ foo == bar ] 160 > $ [ foo == bar ]
161 [ foo == bar ] is a bashism, use [ foo = bar ] instead 161 [ foo == bar ] is a bashism, use [ foo = bar ] instead
162 [1] 162 [1]
163 $ rm error.t 163 $ rm error.t
164 $ cat > raise-format.py <<EOF 164 $ cat > raise-format.py <<NO_CHECK_EOF
165 > raise SomeException, message 165 > raise SomeException, message
166 > # this next line is okay 166 > # this next line is okay
167 > raise SomeException(arg1, arg2) 167 > raise SomeException(arg1, arg2)
168 > EOF 168 > NO_CHECK_EOF
169 $ "$check_code" not-existing.py raise-format.py 169 $ "$check_code" not-existing.py raise-format.py
170 Skipping*not-existing.py* (glob) 170 Skipping*not-existing.py* (glob)
171 raise-format.py:1: 171 raise-format.py:1:
172 > raise SomeException, message 172 > raise SomeException, message
173 don't use old-style two-argument raise, use Exception(message) 173 don't use old-style two-argument raise, use Exception(message)
174 [1] 174 [1]
175 175
176 $ cat <<EOF > tab.t 176 $ cat <<NO_CHECK_EOF > tab.t
177 > indent 177 > indent
178 > > heredoc 178 > > heredoc
179 > EOF 179 > NO_CHECK_EOF
180 $ "$check_code" tab.t 180 $ "$check_code" tab.t
181 tab.t:1: 181 tab.t:1:
182 > indent 182 > indent
183 don't use tabs to indent 183 don't use tabs to indent
184 [1] 184 [1]
185 $ rm tab.t 185 $ rm tab.t
186 186
187 $ cat > rst.py <<EOF 187 $ cat > rst.py <<NO_CHECK_EOF
188 > """problematic rst text 188 > """problematic rst text
189 > 189 >
190 > .. note:: 190 > .. note::
191 > wrong 191 > wrong
192 > """ 192 > """
211 > good 211 > good
212 > 212 >
213 > .. note:: 213 > .. note::
214 > plus bad 214 > plus bad
215 > """ 215 > """
216 > EOF 216 > NO_CHECK_EOF
217 $ $check_code -w rst.py 217 $ $check_code -w rst.py
218 rst.py:3: 218 rst.py:3:
219 > .. note:: 219 > .. note::
220 warning: add two newlines after '.. note::' 220 warning: add two newlines after '.. note::'
221 rst.py:26: 221 rst.py:26:
222 > .. note:: 222 > .. note::
223 warning: add two newlines after '.. note::' 223 warning: add two newlines after '.. note::'
224 [1] 224 [1]
225 225
226 $ cat > ./map-inside-gettext.py <<EOF 226 $ cat > ./map-inside-gettext.py <<NO_CHECK_EOF
227 > print(_("map inside gettext %s" % v)) 227 > print(_("map inside gettext %s" % v))
228 > 228 >
229 > print(_("concatenating " " by " " space %s" % v)) 229 > print(_("concatenating " " by " " space %s" % v))
230 > print(_("concatenating " + " by " + " '+' %s" % v)) 230 > print(_("concatenating " + " by " + " '+' %s" % v))
231 > 231 >
232 > print(_("mapping operation in different line %s" 232 > print(_("mapping operation in different line %s"
233 > % v)) 233 > % v))
234 > 234 >
235 > print(_( 235 > print(_(
236 > "leading spaces inside of '(' %s" % v)) 236 > "leading spaces inside of '(' %s" % v))
237 > EOF 237 > NO_CHECK_EOF
238 $ "$check_code" ./map-inside-gettext.py 238 $ "$check_code" ./map-inside-gettext.py
239 ./map-inside-gettext.py:1: 239 ./map-inside-gettext.py:1:
240 > print(_("map inside gettext %s" % v)) 240 > print(_("map inside gettext %s" % v))
241 don't use % inside _() 241 don't use % inside _()
242 ./map-inside-gettext.py:3: 242 ./map-inside-gettext.py:3:
254 [1] 254 [1]
255 255
256 web templates 256 web templates
257 257
258 $ mkdir -p mercurial/templates 258 $ mkdir -p mercurial/templates
259 $ cat > mercurial/templates/example.tmpl <<EOF 259 $ cat > mercurial/templates/example.tmpl <<NO_CHECK_EOF
260 > {desc} 260 > {desc}
261 > {desc|escape} 261 > {desc|escape}
262 > {desc|firstline} 262 > {desc|firstline}
263 > {desc|websub} 263 > {desc|websub}
264 > EOF 264 > NO_CHECK_EOF
265 265
266 $ "$check_code" --warnings mercurial/templates/example.tmpl 266 $ "$check_code" --warnings mercurial/templates/example.tmpl
267 mercurial/templates/example.tmpl:2: 267 mercurial/templates/example.tmpl:2:
268 > {desc|escape} 268 > {desc|escape}
269 warning: follow desc keyword with either firstline or websub 269 warning: follow desc keyword with either firstline or websub
270 [1] 270 [1]
271 271
272 'string join across lines with no space' detection 272 'string join across lines with no space' detection
273 273
274 $ cat > stringjoin.py <<EOF 274 $ cat > stringjoin.py <<NO_CHECK_EOF
275 > foo = (' foo' 275 > foo = (' foo'
276 > 'bar foo.' 276 > 'bar foo.'
277 > 'bar foo:' 277 > 'bar foo:'
278 > 'bar foo@' 278 > 'bar foo@'
279 > 'bar foo%' 279 > 'bar foo%'
280 > 'bar foo*' 280 > 'bar foo*'
281 > 'bar foo+' 281 > 'bar foo+'
282 > 'bar foo-' 282 > 'bar foo-'
283 > 'bar') 283 > 'bar')
284 > EOF 284 > NO_CHECK_EOF
285 285
286 'missing _() in ui message' detection 286 'missing _() in ui message' detection
287 287
288 $ cat > uigettext.py <<EOF 288 $ cat > uigettext.py <<NO_CHECK_EOF
289 > ui.status("% 10s %05d % -3.2f %*s %%" 289 > ui.status("% 10s %05d % -3.2f %*s %%"
290 > # this use '\\\\' instead of '\\', because the latter in 290 > # this use '\\\\' instead of '\\', because the latter in
291 > # heredoc on shell becomes just '\' 291 > # heredoc on shell becomes just '\'
292 > '\\\\ \n \t \0' 292 > '\\\\ \n \t \0'
293 > """12345 293 > """12345
294 > """ 294 > """
295 > '''.:*+-= 295 > '''.:*+-=
296 > ''' "%-6d \n 123456 .:*+-= foobar") 296 > ''' "%-6d \n 123456 .:*+-= foobar")
297 > EOF 297 > NO_CHECK_EOF
298 298
299 superfluous pass 299 superfluous pass
300 300
301 $ cat > superfluous_pass.py <<EOF 301 $ cat > superfluous_pass.py <<NO_CHECK_EOF
302 > # correct examples 302 > # correct examples
303 > if foo: 303 > if foo:
304 > pass 304 > pass
305 > else: 305 > else:
306 > # comment-only line means still need pass 306 > # comment-only line means still need pass
324 > class empty(object): 324 > class empty(object):
325 > """multiline 325 > """multiline
326 > docstring also 326 > docstring also
327 > means no pass""" 327 > means no pass"""
328 > pass 328 > pass
329 > EOF 329 > NO_CHECK_EOF
330 330
331 (Checking multiple invalid files at once examines whether caching 331 (Checking multiple invalid files at once examines whether caching
332 translation table for repquote() works as expected or not. All files 332 translation table for repquote() works as expected or not. All files
333 should break rules depending on result of repquote(), in this case) 333 should break rules depending on result of repquote(), in this case)
334 334