code: def beginning_of_code_block(node, line_number, full_contents, is_code_node):
      
      if SPHINX_INSTALLED and not is_code_node:
          delta = len(node.non_default_attributes())
          current_line_contents = full_contents.splitlines()[line_number:]
          blank_lines = next(
              (i for (i, x) in enumerate(current_line_contents) if x),
              0)
          return (
              line_number +
              delta - 1 +
              blank_lines - 1 +
              SPHINX_CODE_BLOCK_DELTA)
      else:
          lines = full_contents.splitlines()
          code_block_length = len(node.rawsource.splitlines())
  
          try:
              # Case where there are no extra spaces.
              if lines[line_number - 1].strip():
                  return line_number - code_block_length + 1
          except IndexError:
              pass
  
          # The offsets are wrong if the RST text has multiple blank lines after
          # the code block. This is a workaround.
          for line_number in range(line_number, 1, -1):
              if lines[line_number - 2].strip():
                  break
  
          return line_number - code_block_length
docs: Return line number of beginning of code block.