code: def findBracketBackward(self, block, column, bracket):
          
          if bracket in ('(', ')'):
              opening = '('
              closing = ')'
          elif bracket in ('[', ']'):
              opening = '['
              closing = ']'
          elif bracket in ('{', '}'):
              opening = '{'
              closing = '}'
          else:
              raise AssertionError('Invalid bracket "%s"' % bracket)
  
          depth = 1
          for foundBlock, foundColumn, char in self.iterateCharsBackwardFrom(block, column):
              if not self._qpart.isComment(foundBlock.blockNumber(), foundColumn):
                  if char == opening:
                      depth = depth - 1
                  elif char == closing:
                      depth = depth + 1
  
                  if depth == 0:
                      return foundBlock, foundColumn
          else:
              raise ValueError('Not found')
docs: Search for a needle and return (block, column)
          Raise ValueError, if not found
  
          NOTE this method ignores comments