From 8002bd7bc6261590988b76ab7b37912638b61160 Mon Sep 17 00:00:00 2001 From: Jesus Zapata Date: Fri, 30 Dec 2016 02:30:39 -0400 Subject: [PATCH 1/2] [ADD] eval-referenced: Detects if a "eval" is referenced (without call it) Cases detected: my_dict = { 'my_eval': eval, # [eval-used] } my_list = [eval] # [eval-used] my_var = eval # [eval-used] my_var('d = 3') # [eval-used] func2(eval) # [eval-used] --- pylint_odoo/checkers/no_modules.py | 15 ++++++++++++++ pylint_odoo/test/main.py | 1 + .../test_repo/no_odoo_module/__init__.py | 1 + .../test_repo/no_odoo_module/eval_used.py | 20 +++++++++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 pylint_odoo/test_repo/no_odoo_module/eval_used.py diff --git a/pylint_odoo/checkers/no_modules.py b/pylint_odoo/checkers/no_modules.py index 0a105105..83c4b740 100644 --- a/pylint_odoo/checkers/no_modules.py +++ b/pylint_odoo/checkers/no_modules.py @@ -186,6 +186,11 @@ 'old-api7-method-defined', settings.DESC_DFLT ), + 'W%d11' % settings.BASE_NOMODULE_ID: ( + '"eval" referenced detected.', + 'eval-referenced', + settings.DESC_DFLT + ), } DFTL_MANIFEST_REQUIRED_KEYS = ['license'] @@ -483,6 +488,16 @@ def visit_assign(self, node): self.add_message('attribute-deprecated', node=node_left, args=(node_left.name,)) + @utils.check_messages('eval-referenced') + def visit_name(self, node): + """Detect when a "bad" built-in is referenced.""" + node_infer = utils.safe_infer(node) + if not utils.is_builtin_object(node_infer): + # Skip not builtin objects + return + if node_infer.name == 'eval': + self.add_message('eval-referenced', node=node) + def camelize(self, string): return re.sub(r"(?:^|_)(.)", lambda m: m.group(1).upper(), string) diff --git a/pylint_odoo/test/main.py b/pylint_odoo/test/main.py index e92d237c..241a6291 100644 --- a/pylint_odoo/test/main.py +++ b/pylint_odoo/test/main.py @@ -53,6 +53,7 @@ 'translation-required': 4, 'use-vim-comment': 1, 'wrong-tabs-instead-of-spaces': 2, + 'eval-referenced': 5, 'xml-syntax-error': 2, } diff --git a/pylint_odoo/test_repo/no_odoo_module/__init__.py b/pylint_odoo/test_repo/no_odoo_module/__init__.py index 62f81e55..fdc2e3ea 100644 --- a/pylint_odoo/test_repo/no_odoo_module/__init__.py +++ b/pylint_odoo/test_repo/no_odoo_module/__init__.py @@ -1,2 +1,3 @@ # -*- coding: utf-8 -*- from . import myfile +from . import eval_used diff --git a/pylint_odoo/test_repo/no_odoo_module/eval_used.py b/pylint_odoo/test_repo/no_odoo_module/eval_used.py new file mode 100644 index 00000000..2d724ca5 --- /dev/null +++ b/pylint_odoo/test_repo/no_odoo_module/eval_used.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + + +def func2(param): + """eval used from param""" + param("c = 2") + + +def func3(): + """eval used from many ways""" + my_dict = { + 'my_eval': eval, # [eval-used] + } + my_list = [eval] # [eval-used] + + my_var = eval # [eval-used] + # inferred case + my_var('d = 3') # [eval-used] + func2(eval) # [eval-used] + return my_dict, my_list From 4f9d8c31596a95801cf705232bf37603c7b2139d Mon Sep 17 00:00:00 2001 From: JesusZapata Date: Mon, 2 Jan 2017 18:25:08 +0000 Subject: [PATCH 2/2] [FIX] pylint-odoo: Change method name in the test --- pylint_odoo/test_repo/no_odoo_module/eval_used.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pylint_odoo/test_repo/no_odoo_module/eval_used.py b/pylint_odoo/test_repo/no_odoo_module/eval_used.py index 2d724ca5..eb05630f 100644 --- a/pylint_odoo/test_repo/no_odoo_module/eval_used.py +++ b/pylint_odoo/test_repo/no_odoo_module/eval_used.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- -def func2(param): +def eval_from_param(param): """eval used from param""" param("c = 2") -def func3(): +def eval_from_other(): """eval used from many ways""" my_dict = { 'my_eval': eval, # [eval-used] @@ -16,5 +16,5 @@ def func3(): my_var = eval # [eval-used] # inferred case my_var('d = 3') # [eval-used] - func2(eval) # [eval-used] + eval_from_param(eval) # [eval-used] return my_dict, my_list