Пример #1
0
 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