@@ -3446,99 +3446,6 @@ def CheckMakePairUsesDeduction(filename, clean_lines, linenum, error):
34463446 ' OR use pair directly OR if appropriate, construct a pair directly' )
34473447
34483448
3449- def CheckRedundantVirtual (filename , clean_lines , linenum , error ):
3450- """Check if line contains a redundant "virtual" function-specifier.
3451-
3452- Args:
3453- filename: The name of the current file.
3454- clean_lines: A CleansedLines instance containing the file.
3455- linenum: The number of the line to check.
3456- error: The function to call with any errors found.
3457- """
3458- # Look for "virtual" on current line.
3459- line = clean_lines .elided [linenum ]
3460- virtual = Match (r'^(.*)(\bvirtual\b)(.*)$' , line )
3461- if not virtual : return
3462-
3463- # Ignore "virtual" keywords that are near access-specifiers. These
3464- # are only used in class base-specifier and do not apply to member
3465- # functions.
3466- if (Search (r'\b(public|protected|private)\s+$' , virtual .group (1 )) or
3467- Match (r'^\s+(public|protected|private)\b' , virtual .group (3 ))):
3468- return
3469-
3470- # Ignore the "virtual" keyword from virtual base classes. Usually
3471- # there is a column on the same line in these cases (virtual base
3472- # classes are rare in google3 because multiple inheritance is rare).
3473- if Match (r'^.*[^:]:[^:].*$' , line ): return
3474-
3475- # Look for the next opening parenthesis. This is the start of the
3476- # parameter list (possibly on the next line shortly after virtual).
3477- # TODO(unknown): doesn't work if there are virtual functions with
3478- # decltype() or other things that use parentheses, but csearch suggests
3479- # that this is rare.
3480- end_col = - 1
3481- end_line = - 1
3482- start_col = len (virtual .group (2 ))
3483- for start_line in range (linenum , min (linenum + 3 , clean_lines .NumLines ())):
3484- line = clean_lines .elided [start_line ][start_col :]
3485- parameter_list = Match (r'^([^(]*)\(' , line )
3486- if parameter_list :
3487- # Match parentheses to find the end of the parameter list
3488- (_ , end_line , end_col ) = CloseExpression (
3489- clean_lines , start_line , start_col + len (parameter_list .group (1 )))
3490- break
3491- start_col = 0
3492-
3493- if end_col < 0 :
3494- return # Couldn't find end of parameter list, give up
3495-
3496- # Look for "override" or "final" after the parameter list
3497- # (possibly on the next few lines).
3498- for i in range (end_line , min (end_line + 3 , clean_lines .NumLines ())):
3499- line = clean_lines .elided [i ][end_col :]
3500- match = Search (r'\b(override|final)\b' , line )
3501- if match :
3502- error (filename , linenum , 'readability/inheritance' , 4 ,
3503- ('"virtual" is redundant since function is '
3504- 'already declared as "%s"' % match .group (1 )))
3505-
3506- # Set end_col to check whole lines after we are done with the
3507- # first line.
3508- end_col = 0
3509- if Search (r'[^\w]\s*$' , line ):
3510- break
3511-
3512-
3513- def CheckRedundantOverrideOrFinal (filename , clean_lines , linenum , error ):
3514- """Check if line contains a redundant "override" or "final" virt-specifier.
3515-
3516- Args:
3517- filename: The name of the current file.
3518- clean_lines: A CleansedLines instance containing the file.
3519- linenum: The number of the line to check.
3520- error: The function to call with any errors found.
3521- """
3522- # Look for closing parenthesis nearby. We need one to confirm where
3523- # the declarator ends and where the virt-specifier starts to avoid
3524- # false positives.
3525- line = clean_lines .elided [linenum ]
3526- declarator_end = line .rfind (')' )
3527- if declarator_end >= 0 :
3528- fragment = line [declarator_end :]
3529- else :
3530- if linenum > 1 and clean_lines .elided [linenum - 1 ].rfind (')' ) >= 0 :
3531- fragment = line
3532- else :
3533- return
3534-
3535- # Check that at most one of "override" or "final" is present, not both
3536- if Search (r'\boverride\b' , fragment ) and Search (r'\bfinal\b' , fragment ):
3537- error (filename , linenum , 'readability/inheritance' , 4 ,
3538- ('"override" is redundant since function is '
3539- 'already declared as "final"' ))
3540-
3541-
35423449# Returns true if we are at a new block, and it is directly
35433450# inside of a namespace.
35443451def IsBlockInNameSpace (nesting_state , is_forward_declaration ):
@@ -3590,8 +3497,6 @@ def ProcessLine(filename, is_header, clean_lines, line,
35903497 nesting_state , error )
35913498 CheckInvalidIncrement (filename , clean_lines , line , error )
35923499 CheckMakePairUsesDeduction (filename , clean_lines , line , error )
3593- CheckRedundantVirtual (filename , clean_lines , line , error )
3594- CheckRedundantOverrideOrFinal (filename , clean_lines , line , error )
35953500
35963501
35973502def ProcessFileData (filename , is_header , lines , error ):
0 commit comments