From bdbebc2d39338e7da96a1fb5c081d8117df611c2 Mon Sep 17 00:00:00 2001 From: Fawwaz Anugrah Wiradhika Dharmasatya <anugrahdwfawwaz@gmail.com> Date: Wed, 5 Jun 2024 22:22:36 +0700 Subject: [PATCH] feat: handle exemption in function in module --- src/lib/ASTGenerator.py | 2 +- src/lib/CFGGenerator.py | 2 +- src/lib/FileReader.py | 14 ++++++++------ tests/tc1/views.py | 1 + todo.txt | 4 ++-- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/lib/ASTGenerator.py b/src/lib/ASTGenerator.py index 6537d4a..616f686 100644 --- a/src/lib/ASTGenerator.py +++ b/src/lib/ASTGenerator.py @@ -123,7 +123,7 @@ class ASTGenerator(): # Generate AST untuk file with open(ctx.location,'rb') as f: file_content:bytes = bytes(f.read().decode(),'utf-8') - ast = self.parser.parse(file_content) + ast = self.parser.parse(file_content).root_node cursor = ast.walk() return (ast,cursor,file_content) diff --git a/src/lib/CFGGenerator.py b/src/lib/CFGGenerator.py index a2832d7..10f10d1 100644 --- a/src/lib/CFGGenerator.py +++ b/src/lib/CFGGenerator.py @@ -412,4 +412,4 @@ class CFG(): return None @staticmethod def is_node_equal(node:Node,expected:Node): - return node.byte_range == expected.byte_range \ No newline at end of file + return node and expected and node.byte_range == expected.byte_range \ No newline at end of file diff --git a/src/lib/FileReader.py b/src/lib/FileReader.py index bb05f81..2811430 100644 --- a/src/lib/FileReader.py +++ b/src/lib/FileReader.py @@ -44,14 +44,16 @@ class FileReader: else: continue # Tentukan parent node ini - parent = self.cfg_generator.generate(curr_node).ast.parent.parent - print(parent) - print(parent.parent) + parent = self.cfg_generator.generate(curr_node).ast.parent + if parent.type=='decorated_definition': + parent = parent.parent + if parent.type=='block': + parent = parent.parent + # if curr_node.type=='class': + # parent = parent.parent.parent # Kasih keterangan tambahan ke konteks modul/fungsi yang merupakan parent fungsi ini. for route in project_info.route_class: - print(route.cfg.ast) - if route.location==file and (CFG.is_node_equal(route.cfg.ast,parent) or CFG.is_node_equal(route.cfg.ast,parent.parent)): - print("masuk") + if route.location==file and (CFG.is_node_equal(route.cfg.ast,parent)): route.context.append(f"Exempt::{curr_node.name.split('(')[0]}") elif("@ACL" in annotation): # Ini kelas acl diff --git a/tests/tc1/views.py b/tests/tc1/views.py index 4d4ce7c..7d69919 100644 --- a/tests/tc1/views.py +++ b/tests/tc1/views.py @@ -9,6 +9,7 @@ from lib.RoleCheck import RoleCheck views = Blueprint('views', __name__) + @views.route('/add', methods=['POST']) @login_required def add_note(): diff --git a/todo.txt b/todo.txt index ff8c931..fadf9d8 100644 --- a/todo.txt +++ b/todo.txt @@ -3,6 +3,6 @@ function class: - function module: - - function (!) - - class + - function + - class (!) - class > function \ No newline at end of file -- GitLab