def block_code(self, block_position): """ Get code block :param block_position: 0:up 1:down 2:line 3:in-function :return: """ if block_position == 2: if self.line is None or self.line == 0: logger.error("[AST] Line exception: {0}".format(self.line)) return False line_rule = '{0}p'.format(self.line) code = File(self.file_path).lines(line_rule) if code is not False: code = code.strip() return code else: block_start = 1 block_end = 0 functions = self.functions() if functions: for function_name, function_value in functions.items(): if int(function_value['start']) < int(self.line) < int(function_value['end']): in_this_function = '<---- {0}'.format(self.line) if block_position == 0: block_start = function_value['start'] block_end = int(self.line) - 1 elif block_position == 1: block_start = int(self.line) block_end = int(function_value['end']) - 1 elif block_position == 3: block_start = function_value['start'] block_end = function_value['end'] logger.debug( "[AST] [FUNCTION] {0} ({1} - {2}) {3}".format(function_name, function_value['start'], function_value['end'], in_this_function)) else: if block_position == 0: block_start = 1 block_end = int(self.line) - 1 elif block_position == 1: block_start = int(self.line) + 1 block_end = sum(1 for l in open(self.file_path)) elif block_position == 3: block_start = 1 block_end = sum(1 for l in open(self.file_path)) logger.debug("[AST] Not function anything `function`, will split file") # get param block code line_rule = "{0},{1}p".format(block_start, block_end) code = File(self.file_path).lines(line_rule) logger.debug('[AST] [BLOCK-CODE-LINES] {0} - {1}p'.format(block_start, block_end)) return code