parameters: (filename, clean_lines, linenum, error)
docstring: Look for empty loop/conditional body with only a single semicolon.
  
    Args:
      filename: The name of the current file.
      clean_lines: A CleansedLines instance containing the file.
      linenum: The number of the line to check.
      error: The function to call with any errors found.
docstring_summary: Look for empty loop/conditional body with only a single semicolon.
docstring_tokens: Look for empty loop / conditional body with only a single semicolon .
function: def CheckEmptyBlockBody(filename, clean_lines, linenum, error):
    """Look for empty loop/conditional body with only a single semicolon.
  
    Args:
      filename: The name of the current file.
      clean_lines: A CleansedLines instance containing the file.
      linenum: The number of the line to check.
      error: The function to call with any errors found.
    """
  
    # Search for loop keywords at the beginning of the line.  Because only
    # whitespaces are allowed before the keywords, this will also ignore most
    # do-while-loops, since those lines should start with closing brace.
    #
    # We also check "if" blocks here, since an empty conditional block
    # is likely an error.
    line = clean_lines.elided[linenum]
    matched = Match(r'\s*(for|while|if)\s*\(', line)
    if matched:
      # Find the end of the conditional expression
      (end_line, end_linenum, end_pos) = CloseExpression(
          clean_lines, linenum, line.find('('))
  
      # Output warning if what follows the condition expression is a semicolon.
      # No warning for all other cases, including whitespace or newline, since we
      # have a separate check for semicolons preceded by whitespace.
      if end_pos >= 0 and Match(r';', end_line[end_pos:]):
        if matched.group(1) == 'if':
          error(filename, end_linenum, 'whitespace/empty_conditional_body', 5,
                'Empty conditional bodies should use {}')
        else:
          error(filename, end_linenum, 'whitespace/empty_loop_body', 5,
                'Empty loop bodies should use {} or continue')
function_tokens: def CheckEmptyBlockBody ( filename , clean_lines , linenum , error ) : # Search for loop keywords at the beginning of the line.  Because only # whitespaces are allowed before the keywords, this will also ignore most # do-while-loops, since those lines should start with closing brace. # # We also check "if" blocks here, since an empty conditional block # is likely an error. line = clean_lines . elided [ linenum ] matched = Match ( r'\s*(for|while|if)\s*\(' , line ) if matched : # Find the end of the conditional expression ( end_line , end_linenum , end_pos ) = CloseExpression ( clean_lines , linenum , line . find ( '(' ) ) # Output warning if what follows the condition expression is a semicolon. # No warning for all other cases, including whitespace or newline, since we # have a separate check for semicolons preceded by whitespace. if end_pos >= 0 and Match ( r';' , end_line [ end_pos : ] ) : if matched . group ( 1 ) == 'if' : error ( filename , end_linenum , 'whitespace/empty_conditional_body' , 5 , 'Empty conditional bodies should use {}' ) else : error ( filename , end_linenum , 'whitespace/empty_loop_body' , 5 , 'Empty loop bodies should use {} or continue' )