Files
codeql/python/ql/test/query-tests/Statements/no_effect/test.py

140 lines
1.8 KiB
Python

import sys
#Statement has no effect (4 statements, 3 of which are violations)
"Not a docstring" # This is acceptable as strings can be used as comments.
len
sys.argv + []
3 == 4
#The 'sys' statements have an effect
try:
sys
except:
do_something()
def exec_used(val):
exec (val)
#This has an effect:
def effectful(y):
[x for x in y]
#Not a redundant assignment if a property.
class WithProp(object):
@property
def x(self):
return self._x
@prop.setter
def set_x(self, x):
side_effect(x)
self._x = x
def meth(self):
self.x = self.x
#Accessing a property has an effect:
def prop_acc():
p = WithProp()
p.x
def mydecorator(func):
return property(fget=func)
class X(object):
@mydecorator
def deco(self):
pass
def func(self):
pass
x = X()
x.deco
x.deco + 2
#No effect
x.func
#Cannot infer what attribute is, so be conservative
x.thing
other_thing.func
#Name Error
try:
unicode
except NameError:
#Python 3
unicode = str
try:
ascii
except NameError:
#Python 2
def ascii(obj):
pass
#Overridden operator. yuck.
class Horrible(object):
def __add__(self, other):
fire_missiles_at(other)
def __lt__(self, other):
fire_guns_at(other)
def possible_fps(x):
h = Horrible()
h + "innocent bystander"
h < "upstanding citizen"
x - 3 #True positive
# Forgotten raise.
def do_action_forgotten_raise(action):
if action == "go":
start()
elif action == "stop":
stop()
else:
ValueError(action)
def do_action(action):
if action == "go":
start()
elif action == "stop":
stop()
else:
raise ValueError(action)
#Python 2 print
print >> out, message