mirror of https://github.com/astral-sh/ruff
642 lines
6.4 KiB
Python
642 lines
6.4 KiB
Python
# ==> bad_function_call.py <==
|
|
bad_function_call(
|
|
param1='test',
|
|
param2='test'
|
|
)
|
|
# ==> bad_list.py <==
|
|
bad_list = [
|
|
1,
|
|
2,
|
|
3
|
|
]
|
|
|
|
bad_list_with_comment = [
|
|
1,
|
|
2,
|
|
3
|
|
# still needs a comma!
|
|
]
|
|
|
|
bad_list_with_extra_empty = [
|
|
1,
|
|
2,
|
|
3
|
|
|
|
|
|
|
|
]
|
|
|
|
# ==> bare.py <==
|
|
bar = 1, 2
|
|
|
|
foo = 1
|
|
|
|
foo = (1,)
|
|
|
|
foo = 1,
|
|
|
|
bar = 1; foo = bar,
|
|
|
|
foo = (
|
|
3,
|
|
4,
|
|
)
|
|
|
|
foo = 3,
|
|
|
|
class A(object):
|
|
foo = 3
|
|
bar = 10,
|
|
foo_bar = 2
|
|
|
|
a = ('a',)
|
|
|
|
from foo import bar, baz
|
|
|
|
group_by = function_call('arg'),
|
|
|
|
group_by = ('foobar' * 3),
|
|
|
|
def foo():
|
|
return False,
|
|
|
|
# ==> callable_before_parenth_form.py <==
|
|
def foo(
|
|
bar,
|
|
):
|
|
pass
|
|
|
|
{'foo': foo}['foo'](
|
|
bar
|
|
)
|
|
|
|
{'foo': foo}['foo'](
|
|
bar,
|
|
)
|
|
|
|
(foo)(
|
|
bar
|
|
)
|
|
|
|
(foo)[0](
|
|
bar,
|
|
)
|
|
|
|
[foo][0](
|
|
bar
|
|
)
|
|
|
|
[foo][0](
|
|
bar,
|
|
)
|
|
|
|
# ==> comment_good_dict.py <==
|
|
multiline_good_dict = {
|
|
"good": 123, # this is a good number
|
|
}
|
|
|
|
# ==> dict_comprehension.py <==
|
|
not_a_dict = {
|
|
x: y
|
|
for x, y in ((1, 2), (3, 4))
|
|
}
|
|
|
|
# ==> good_empty_comma_context.py <==
|
|
def func2(
|
|
):
|
|
pass
|
|
|
|
|
|
func2(
|
|
|
|
)
|
|
|
|
func2(
|
|
)
|
|
|
|
[
|
|
]
|
|
|
|
[
|
|
|
|
]
|
|
|
|
(
|
|
)
|
|
|
|
(
|
|
|
|
)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
# ==> good_list.py <==
|
|
stuff = [
|
|
'a',
|
|
'b',
|
|
# more stuff will go here
|
|
]
|
|
|
|
more_stuff = [
|
|
'a',
|
|
'b',
|
|
|
|
|
|
|
|
]
|
|
|
|
# ==> keyword_before_parenth_form/base_bad.py <==
|
|
from x import (
|
|
y
|
|
)
|
|
|
|
assert(
|
|
SyntaxWarning,
|
|
ThrownHere,
|
|
Anyway
|
|
)
|
|
|
|
# async await is fine outside an async def
|
|
# ruff: RustPython tokenizer treats async/await as keywords, not applicable.
|
|
|
|
# def await(
|
|
# foo
|
|
# ):
|
|
# async(
|
|
# foo
|
|
# )
|
|
|
|
# def async(
|
|
# foo
|
|
# ):
|
|
# await(
|
|
# foo
|
|
# )
|
|
|
|
# ==> keyword_before_parenth_form/base.py <==
|
|
from x import (
|
|
y,
|
|
)
|
|
|
|
assert(
|
|
SyntaxWarning,
|
|
ThrownHere,
|
|
Anyway,
|
|
)
|
|
|
|
assert (
|
|
foo
|
|
)
|
|
|
|
assert (
|
|
foo and
|
|
bar
|
|
)
|
|
|
|
if(
|
|
foo and
|
|
bar
|
|
):
|
|
pass
|
|
elif(
|
|
foo and
|
|
bar
|
|
):
|
|
pass
|
|
|
|
for x in(
|
|
[1,2,3]
|
|
):
|
|
print(x)
|
|
|
|
|
|
(x for x in (
|
|
[1, 2, 3]
|
|
))
|
|
|
|
(
|
|
'foo'
|
|
) is (
|
|
'foo'
|
|
)
|
|
|
|
if (
|
|
foo and
|
|
bar
|
|
) or not (
|
|
foo
|
|
) or (
|
|
spam
|
|
):
|
|
pass
|
|
|
|
def xyz():
|
|
raise(
|
|
Exception()
|
|
)
|
|
|
|
def abc():
|
|
return(
|
|
3
|
|
)
|
|
|
|
while(
|
|
False
|
|
):
|
|
pass
|
|
|
|
with(
|
|
loop
|
|
):
|
|
pass
|
|
|
|
def foo():
|
|
yield (
|
|
"foo"
|
|
)
|
|
|
|
# async await is fine outside an async def
|
|
# ruff: RustPython tokenizer treats async/await as keywords, not applicable.
|
|
|
|
# def await(
|
|
# foo,
|
|
# ):
|
|
# async(
|
|
# foo,
|
|
# )
|
|
|
|
# def async(
|
|
# foo,
|
|
# ):
|
|
# await(
|
|
# foo,
|
|
# )
|
|
|
|
# ==> keyword_before_parenth_form/py3.py <==
|
|
# Syntax error in Py2
|
|
|
|
def foo():
|
|
yield from (
|
|
foo
|
|
)
|
|
|
|
# ==> list_comprehension.py <==
|
|
not_a_list = [
|
|
s.strip()
|
|
for s in 'foo, bar, baz'.split(',')
|
|
]
|
|
|
|
# ==> multiline_bad_dict.py <==
|
|
multiline_bad_dict = {
|
|
"bad": 123
|
|
}
|
|
# ==> multiline_bad_function_def.py <==
|
|
def func_good(
|
|
a = 3,
|
|
b = 2):
|
|
pass
|
|
|
|
|
|
def func_bad(
|
|
a = 3,
|
|
b = 2
|
|
):
|
|
pass
|
|
|
|
# ==> multiline_bad_function_one_param.py <==
|
|
def func(
|
|
a = 3
|
|
):
|
|
pass
|
|
|
|
|
|
func(
|
|
a = 3
|
|
)
|
|
|
|
# ==> multiline_bad_or_dict.py <==
|
|
multiline_bad_or_dict = {
|
|
"good": True or False,
|
|
"bad": 123
|
|
}
|
|
|
|
# ==> multiline_good_dict.py <==
|
|
multiline_good_dict = {
|
|
"good": 123,
|
|
}
|
|
# ==> multiline_good_single_keyed_for_dict.py <==
|
|
good_dict = {
|
|
"good": x for x in y
|
|
}
|
|
|
|
# ==> multiline_if.py <==
|
|
if (
|
|
foo
|
|
and bar
|
|
):
|
|
print("Baz")
|
|
|
|
# ==> multiline_index_access.py <==
|
|
multiline_index_access[
|
|
"good"
|
|
]
|
|
|
|
multiline_index_access_after_function()[
|
|
"good"
|
|
]
|
|
|
|
multiline_index_access_after_inline_index_access['first'][
|
|
"good"
|
|
]
|
|
|
|
multiline_index_access[
|
|
"probably fine",
|
|
]
|
|
|
|
[0, 1, 2][
|
|
"good"
|
|
]
|
|
|
|
[0, 1, 2][
|
|
"probably fine",
|
|
]
|
|
|
|
multiline_index_access[
|
|
"probably fine",
|
|
"not good"
|
|
]
|
|
|
|
multiline_index_access[
|
|
"fine",
|
|
"fine",
|
|
:
|
|
"not good"
|
|
]
|
|
|
|
# ==> multiline_string.py <==
|
|
s = (
|
|
'this' +
|
|
'is a string'
|
|
)
|
|
|
|
s2 = (
|
|
'this'
|
|
'is also a string'
|
|
)
|
|
|
|
t = (
|
|
'this' +
|
|
'is a tuple',
|
|
)
|
|
|
|
t2 = (
|
|
'this'
|
|
'is also a tuple',
|
|
)
|
|
|
|
# ==> multiline_subscript_slice.py <==
|
|
multiline_index_access[
|
|
"fine",
|
|
"fine"
|
|
:
|
|
"not fine"
|
|
]
|
|
|
|
multiline_index_access[
|
|
"fine"
|
|
"fine"
|
|
:
|
|
"fine"
|
|
:
|
|
"fine"
|
|
]
|
|
|
|
multiline_index_access[
|
|
"fine"
|
|
"fine",
|
|
:
|
|
"fine",
|
|
:
|
|
"fine",
|
|
]
|
|
|
|
multiline_index_access[
|
|
"fine"
|
|
"fine",
|
|
:
|
|
"fine"
|
|
:
|
|
"fine",
|
|
"not fine"
|
|
]
|
|
|
|
multiline_index_access[
|
|
"fine"
|
|
"fine",
|
|
:
|
|
"fine",
|
|
"fine"
|
|
:
|
|
"fine",
|
|
]
|
|
|
|
multiline_index_access[
|
|
lambda fine,
|
|
fine,
|
|
fine: (0,)
|
|
:
|
|
lambda fine,
|
|
fine,
|
|
fine: (0,),
|
|
"fine"
|
|
:
|
|
"fine",
|
|
]
|
|
|
|
# ==> one_line_dict.py <==
|
|
one_line_dict = {"good": 123}
|
|
# ==> parenth_form.py <==
|
|
parenth_form = (
|
|
a +
|
|
b +
|
|
c
|
|
)
|
|
|
|
parenth_form_with_lambda = (
|
|
lambda x, y: 0
|
|
)
|
|
|
|
parenth_form_with_default_lambda = (
|
|
lambda x=(
|
|
lambda
|
|
x,
|
|
y,
|
|
:
|
|
0
|
|
),
|
|
y = {a: b},
|
|
:
|
|
0
|
|
)
|
|
|
|
# ==> prohibited.py <==
|
|
foo = ['a', 'b', 'c',]
|
|
|
|
bar = { a: b,}
|
|
|
|
def bah(ham, spam,):
|
|
pass
|
|
|
|
(0,)
|
|
|
|
(0, 1,)
|
|
|
|
foo = ['a', 'b', 'c', ]
|
|
|
|
bar = { a: b, }
|
|
|
|
def bah(ham, spam, ):
|
|
pass
|
|
|
|
(0, )
|
|
|
|
(0, 1, )
|
|
|
|
image[:, :, 0]
|
|
|
|
image[:,]
|
|
|
|
image[:,:,]
|
|
|
|
lambda x, :
|
|
|
|
# ==> unpack.py <==
|
|
def function(
|
|
foo,
|
|
bar,
|
|
**kwargs
|
|
):
|
|
pass
|
|
|
|
def function(
|
|
foo,
|
|
bar,
|
|
*args
|
|
):
|
|
pass
|
|
|
|
def function(
|
|
foo,
|
|
bar,
|
|
*args,
|
|
extra_kwarg
|
|
):
|
|
pass
|
|
|
|
result = function(
|
|
foo,
|
|
bar,
|
|
**kwargs
|
|
)
|
|
|
|
result = function(
|
|
foo,
|
|
bar,
|
|
**not_called_kwargs
|
|
)
|
|
|
|
def foo(
|
|
ham,
|
|
spam,
|
|
*args,
|
|
kwarg_only
|
|
):
|
|
pass
|
|
|
|
# In python 3.5 if it's not a function def, commas are mandatory.
|
|
|
|
foo(
|
|
**kwargs
|
|
)
|
|
|
|
{
|
|
**kwargs
|
|
}
|
|
|
|
(
|
|
*args
|
|
)
|
|
|
|
{
|
|
*args
|
|
}
|
|
|
|
[
|
|
*args
|
|
]
|
|
|
|
def foo(
|
|
ham,
|
|
spam,
|
|
*args
|
|
):
|
|
pass
|
|
|
|
def foo(
|
|
ham,
|
|
spam,
|
|
**kwargs
|
|
):
|
|
pass
|
|
|
|
def foo(
|
|
ham,
|
|
spam,
|
|
*args,
|
|
kwarg_only
|
|
):
|
|
pass
|
|
|
|
# In python 3.5 if it's not a function def, commas are mandatory.
|
|
|
|
foo(
|
|
**kwargs,
|
|
)
|
|
|
|
{
|
|
**kwargs,
|
|
}
|
|
|
|
(
|
|
*args,
|
|
)
|
|
|
|
{
|
|
*args,
|
|
}
|
|
|
|
[
|
|
*args,
|
|
]
|
|
|
|
result = function(
|
|
foo,
|
|
bar,
|
|
**{'ham': spam}
|
|
)
|
|
|
|
# Make sure the COM812 and UP034 rules don't fix simultaneously and cause a syntax error.
|
|
the_first_one = next(
|
|
(i for i in range(10) if i // 2 == 0) # COM812 fix should include the final bracket
|
|
)
|
|
|
|
foo = namedtuple(
|
|
name="foo",
|
|
status="bar",
|
|
message="sfdsdfsdgs fsdfsdf output!dsfdfsdjkg ghfskdjghkdssd sd fsdf s\n"[
|
|
:20
|
|
],
|
|
)
|