| @@ 1186-1242 (lines=57) @@ | ||
| 1183 | """ Restores filters previously backed up.""" |
|
| 1184 | _cpplint_state.RestoreFilters() |
|
| 1185 | ||
| 1186 | class _FunctionState(object): |
|
| 1187 | """Tracks current function name and the number of lines in its body.""" |
|
| 1188 | ||
| 1189 | _NORMAL_TRIGGER = 250 # for --v=0, 500 for --v=1, etc. |
|
| 1190 | _TEST_TRIGGER = 400 # about 50% more than _NORMAL_TRIGGER. |
|
| 1191 | ||
| 1192 | def __init__(self): |
|
| 1193 | self.in_a_function = False |
|
| 1194 | self.lines_in_function = 0 |
|
| 1195 | self.current_function = '' |
|
| 1196 | ||
| 1197 | def Begin(self, function_name): |
|
| 1198 | """Start analyzing function body. |
|
| 1199 | ||
| 1200 | Args: |
|
| 1201 | function_name: The name of the function being tracked. |
|
| 1202 | """ |
|
| 1203 | self.in_a_function = True |
|
| 1204 | self.lines_in_function = 0 |
|
| 1205 | self.current_function = function_name |
|
| 1206 | ||
| 1207 | def Count(self): |
|
| 1208 | """Count line in current function body.""" |
|
| 1209 | if self.in_a_function: |
|
| 1210 | self.lines_in_function += 1 |
|
| 1211 | ||
| 1212 | def Check(self, error, filename, linenum): |
|
| 1213 | """Report if too many lines in function body. |
|
| 1214 | ||
| 1215 | Args: |
|
| 1216 | error: The function to call with any errors found. |
|
| 1217 | filename: The name of the current file. |
|
| 1218 | linenum: The number of the line to check. |
|
| 1219 | """ |
|
| 1220 | if not self.in_a_function: |
|
| 1221 | return |
|
| 1222 | ||
| 1223 | if Match(r'T(EST|est)', self.current_function): |
|
| 1224 | base_trigger = self._TEST_TRIGGER |
|
| 1225 | else: |
|
| 1226 | base_trigger = self._NORMAL_TRIGGER |
|
| 1227 | trigger = base_trigger * 2**_VerboseLevel() |
|
| 1228 | ||
| 1229 | if self.lines_in_function > trigger: |
|
| 1230 | error_level = int(math.log(self.lines_in_function / base_trigger, 2)) |
|
| 1231 | # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ... |
|
| 1232 | if error_level > 5: |
|
| 1233 | error_level = 5 |
|
| 1234 | error(filename, linenum, 'readability/fn_size', error_level, |
|
| 1235 | 'Small and focused functions are preferred:' |
|
| 1236 | ' %s has %d non-comment lines' |
|
| 1237 | ' (error triggered by exceeding %d lines).' % ( |
|
| 1238 | self.current_function, self.lines_in_function, trigger)) |
|
| 1239 | ||
| 1240 | def End(self): |
|
| 1241 | """Stop analyzing function body.""" |
|
| 1242 | self.in_a_function = False |
|
| 1243 | ||
| 1244 | ||
| 1245 | class _IncludeError(Exception): |
|
| @@ 1186-1242 (lines=57) @@ | ||
| 1183 | """ Restores filters previously backed up.""" |
|
| 1184 | _cpplint_state.RestoreFilters() |
|
| 1185 | ||
| 1186 | class _FunctionState(object): |
|
| 1187 | """Tracks current function name and the number of lines in its body.""" |
|
| 1188 | ||
| 1189 | _NORMAL_TRIGGER = 250 # for --v=0, 500 for --v=1, etc. |
|
| 1190 | _TEST_TRIGGER = 400 # about 50% more than _NORMAL_TRIGGER. |
|
| 1191 | ||
| 1192 | def __init__(self): |
|
| 1193 | self.in_a_function = False |
|
| 1194 | self.lines_in_function = 0 |
|
| 1195 | self.current_function = '' |
|
| 1196 | ||
| 1197 | def Begin(self, function_name): |
|
| 1198 | """Start analyzing function body. |
|
| 1199 | ||
| 1200 | Args: |
|
| 1201 | function_name: The name of the function being tracked. |
|
| 1202 | """ |
|
| 1203 | self.in_a_function = True |
|
| 1204 | self.lines_in_function = 0 |
|
| 1205 | self.current_function = function_name |
|
| 1206 | ||
| 1207 | def Count(self): |
|
| 1208 | """Count line in current function body.""" |
|
| 1209 | if self.in_a_function: |
|
| 1210 | self.lines_in_function += 1 |
|
| 1211 | ||
| 1212 | def Check(self, error, filename, linenum): |
|
| 1213 | """Report if too many lines in function body. |
|
| 1214 | ||
| 1215 | Args: |
|
| 1216 | error: The function to call with any errors found. |
|
| 1217 | filename: The name of the current file. |
|
| 1218 | linenum: The number of the line to check. |
|
| 1219 | """ |
|
| 1220 | if not self.in_a_function: |
|
| 1221 | return |
|
| 1222 | ||
| 1223 | if Match(r'T(EST|est)', self.current_function): |
|
| 1224 | base_trigger = self._TEST_TRIGGER |
|
| 1225 | else: |
|
| 1226 | base_trigger = self._NORMAL_TRIGGER |
|
| 1227 | trigger = base_trigger * 2**_VerboseLevel() |
|
| 1228 | ||
| 1229 | if self.lines_in_function > trigger: |
|
| 1230 | error_level = int(math.log(self.lines_in_function / base_trigger, 2)) |
|
| 1231 | # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ... |
|
| 1232 | if error_level > 5: |
|
| 1233 | error_level = 5 |
|
| 1234 | error(filename, linenum, 'readability/fn_size', error_level, |
|
| 1235 | 'Small and focused functions are preferred:' |
|
| 1236 | ' %s has %d non-comment lines' |
|
| 1237 | ' (error triggered by exceeding %d lines).' % ( |
|
| 1238 | self.current_function, self.lines_in_function, trigger)) |
|
| 1239 | ||
| 1240 | def End(self): |
|
| 1241 | """Stop analyzing function body.""" |
|
| 1242 | self.in_a_function = False |
|
| 1243 | ||
| 1244 | ||
| 1245 | class _IncludeError(Exception): |
|