summaryrefslogtreecommitdiff
path: root/tests/functional/c
diff options
context:
space:
mode:
authorDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2022-09-22 23:32:16 +0200
committerGitHub <noreply@github.com>2022-09-22 17:32:16 -0400
commit705ac4cd88f3efae44309cd46494780ffaa93ca1 (patch)
tree41c2877ef252d4bc9efb518e88b624423299ad11 /tests/functional/c
parent1918a4d21ca803d43c65eaa198b905bf2cf5be3f (diff)
downloadpylint-git-705ac4cd88f3efae44309cd46494780ffaa93ca1.tar.gz
Add ``consider-using-augmented-assign`` checker (#7514)
Co-authored-by: clavedeluna <danalitovsky+git@gmail.com> Co-authored-by: Mark Byrne <31762852+mbyrnepr2@users.noreply.github.com>
Diffstat (limited to 'tests/functional/c')
-rw-r--r--tests/functional/c/consider/consider_using_augmented_assign.py77
-rw-r--r--tests/functional/c/consider/consider_using_augmented_assign.txt20
2 files changed, 97 insertions, 0 deletions
diff --git a/tests/functional/c/consider/consider_using_augmented_assign.py b/tests/functional/c/consider/consider_using_augmented_assign.py
new file mode 100644
index 000000000..e4af95686
--- /dev/null
+++ b/tests/functional/c/consider/consider_using_augmented_assign.py
@@ -0,0 +1,77 @@
+"""Tests for consider-using-augmented-assign."""
+
+# pylint: disable=invalid-name,too-few-public-methods,import-error,consider-using-f-string
+
+from unknown import Unknown
+
+x = 1
+x = x + 1 # [consider-using-augmented-assign]
+x = 1 + x # [consider-using-augmented-assign]
+x, y = 1 + x, 2 + x
+# We don't warn on intricate expressions as we lack knowledge
+# of simplifying such expressions which is necessary to see
+# if they can become augmented
+x = 1 + x - 2
+x = 1 + x + 2
+
+# For anything other than a float or an int we only want to warn on
+# assignments where the 'itself' is on the left side of the assignment
+my_list = [2, 3, 4]
+my_list = [1] + my_list
+
+
+class MyClass:
+ """Simple base class."""
+
+ def __init__(self) -> None:
+ self.x = 1
+ self.x = self.x + 1 # [consider-using-augmented-assign]
+ self.x = 1 + self.x # [consider-using-augmented-assign]
+
+ x = 1 # [redefined-outer-name]
+ self.x = x
+
+
+instance = MyClass()
+
+x = instance.x + 1
+
+my_str = ""
+my_str = my_str + "foo" # [consider-using-augmented-assign]
+my_str = "foo" + my_str
+
+my_bytes = b""
+my_bytes = my_bytes + b"foo" # [consider-using-augmented-assign]
+my_bytes = b"foo" + my_bytes
+
+
+def return_str() -> str:
+ """Return a string."""
+ return ""
+
+
+# Currently we disregard all calls
+my_str = return_str() + my_str
+
+my_str = my_str % return_str()
+my_str = my_str % 1 # [consider-using-augmented-assign]
+my_str = my_str % (1, 2) # [consider-using-augmented-assign]
+my_str = "%s" % my_str
+my_str = return_str() % my_str
+my_str = Unknown % my_str
+my_str = my_str % Unknown # [consider-using-augmented-assign]
+
+x = x - 3 # [consider-using-augmented-assign]
+x = x * 3 # [consider-using-augmented-assign]
+x = x / 3 # [consider-using-augmented-assign]
+x = x // 3 # [consider-using-augmented-assign]
+x = x << 3 # [consider-using-augmented-assign]
+x = x >> 3 # [consider-using-augmented-assign]
+x = x % 3 # [consider-using-augmented-assign]
+x = x**3 # [consider-using-augmented-assign]
+x = x ^ 3 # [consider-using-augmented-assign]
+x = x & 3 # [consider-using-augmented-assign]
+x = x > 3
+x = x < 3
+x = x >= 3
+x = x <= 3
diff --git a/tests/functional/c/consider/consider_using_augmented_assign.txt b/tests/functional/c/consider/consider_using_augmented_assign.txt
new file mode 100644
index 000000000..1684953e9
--- /dev/null
+++ b/tests/functional/c/consider/consider_using_augmented_assign.txt
@@ -0,0 +1,20 @@
+consider-using-augmented-assign:8:0:8:9::Use '+=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:9:0:9:9::Use '+=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:28:8:28:27:MyClass.__init__:Use '+=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:29:8:29:27:MyClass.__init__:Use '+=' to do an augmented assign directly:INFERENCE
+redefined-outer-name:31:8:31:9:MyClass.__init__:Redefining name 'x' from outer scope (line 7):UNDEFINED
+consider-using-augmented-assign:40:0:40:23::Use '+=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:44:0:44:28::Use '+=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:57:0:57:19::Use '%=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:58:0:58:24::Use '%=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:62:0:62:25::Use '%=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:64:0:64:9::Use '-=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:65:0:65:9::Use '*=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:66:0:66:9::Use '/=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:67:0:67:10::Use '//=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:68:0:68:10::Use '<<=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:69:0:69:10::Use '>>=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:70:0:70:9::Use '%=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:71:0:71:8::Use '**=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:72:0:72:9::Use '^=' to do an augmented assign directly:INFERENCE
+consider-using-augmented-assign:73:0:73:9::Use '&=' to do an augmented assign directly:INFERENCE