summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-07-28 22:15:25 +0200
committerGitHub <noreply@github.com>2021-07-28 22:15:25 +0200
commit107f59e949f1824251d14717eb57650273c0ffff (patch)
tree3fd711a55aabf3c6ac4cfe84ce998200f32ff011 /tests
parentae6cbd1062c0a8e68d32a5cdc67c993da26d0f4a (diff)
downloadpylint-git-107f59e949f1824251d14717eb57650273c0ffff.tar.gz
Omit no-member error if guarded behind if stmt (#4764)
* Omit no-member error if guarded behind if stmt Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/functional/n/no/no_member_if_statements.py79
-rw-r--r--tests/functional/n/no/no_member_if_statements.txt3
2 files changed, 82 insertions, 0 deletions
diff --git a/tests/functional/n/no/no_member_if_statements.py b/tests/functional/n/no/no_member_if_statements.py
new file mode 100644
index 000000000..ad87e9950
--- /dev/null
+++ b/tests/functional/n/no/no_member_if_statements.py
@@ -0,0 +1,79 @@
+# pylint: disable=invalid-name,missing-docstring,pointless-statement
+from datetime import datetime
+from typing import Union
+
+value = "Hello World"
+value.isoformat() # [no-member]
+
+
+if isinstance(value, datetime):
+ value.isoformat()
+else:
+ value.isoformat() # [no-member]
+
+
+def func():
+ if hasattr(value, "load"):
+ value.load()
+
+ if getattr(value, "load", None):
+ value.load
+
+
+if value.none_existent(): # [no-member]
+ pass
+
+res = value.isoformat() if isinstance(value, datetime) else value
+
+
+class Base:
+ _attr_state: Union[str, datetime] = "Unknown"
+
+ @property
+ def state(self) -> Union[str, datetime]:
+ return self._attr_state
+
+ def some_function(self) -> str:
+ state = self.state
+ if isinstance(state, datetime):
+ return state.isoformat()
+ return str(state)
+
+
+# https://github.com/PyCQA/pylint/issues/1990
+# Attribute access after 'isinstance' should not cause 'no-member' error
+import subprocess # pylint: disable=wrong-import-position # noqa: E402
+
+try:
+ subprocess.check_call(['ls', '-']) # Deliberately made error in this line
+except Exception as err:
+ if isinstance(err, subprocess.CalledProcessError):
+ print(f'Subprocess error occured. Return code: {err.returncode}')
+ else:
+ print(f'An error occured: {str(err)}')
+ raise
+
+
+# https://github.com/PyCQA/pylint/issues/4168
+# 'encode' for 'arg' should not cause 'no-member' error
+mixed_tuple = (b"a", b"b", b"c", b"d")
+byte_tuple = [arg.encode('utf8') if isinstance(arg, str) else arg for arg in mixed_tuple]
+
+for arg in mixed_tuple:
+ if isinstance(arg, str):
+ print(arg.encode('utf8'))
+ else:
+ print(arg)
+
+
+# https://github.com/PyCQA/pylint/issues/1162
+# Attribute access after 'isinstance' should not cause 'no-member' error
+class FoobarException(Exception):
+ foobar = None
+
+try: # noqa: E305
+ pass
+except Exception as ex:
+ if isinstance(ex, FoobarException):
+ ex.foobar
+ raise
diff --git a/tests/functional/n/no/no_member_if_statements.txt b/tests/functional/n/no/no_member_if_statements.txt
new file mode 100644
index 000000000..2bc673b49
--- /dev/null
+++ b/tests/functional/n/no/no_member_if_statements.txt
@@ -0,0 +1,3 @@
+no-member:6:0::Instance of 'str' has no 'isoformat' member:INFERENCE
+no-member:12:4::Instance of 'str' has no 'isoformat' member:INFERENCE
+no-member:23:3::Instance of 'str' has no 'none_existent' member:INFERENCE