Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Presubmit script for Chromium WebUI resources. | 5 """Presubmit script for Chromium WebUI resources. |
| 6 | 6 |
| 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
| 8 for more details about the presubmit API built into depot_tools, and see | 8 for more details about the presubmit API built into depot_tools, and see |
| 9 http://www.chromium.org/developers/web-development-style-guide for the rules | 9 http://www.chromium.org/developers/web-development-style-guide for the rules |
| 10 we're checking against here. | 10 we're checking against here. |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 webkit_before_or_after_reg = re.compile(r'-webkit-(\w+-)(after|before):') | 251 webkit_before_or_after_reg = re.compile(r'-webkit-(\w+-)(after|before):') |
| 252 | 252 |
| 253 def suggest_top_or_bottom(line): | 253 def suggest_top_or_bottom(line): |
| 254 prop, pos = webkit_before_or_after_reg.search(line).groups() | 254 prop, pos = webkit_before_or_after_reg.search(line).groups() |
| 255 top_or_bottom = 'top' if pos == 'before' else 'bottom' | 255 top_or_bottom = 'top' if pos == 'before' else 'bottom' |
| 256 return ' (replace with %s)' % (prop + top_or_bottom) | 256 return ' (replace with %s)' % (prop + top_or_bottom) |
| 257 | 257 |
| 258 def webkit_before_or_after(line): | 258 def webkit_before_or_after(line): |
| 259 return webkit_before_or_after_reg.search(line) | 259 return webkit_before_or_after_reg.search(line) |
| 260 | 260 |
| 261 def zero_length_values(contents): | 261 def zero_width_lengths(contents): |
| 262 hsl_reg = re.compile(r""" | 262 hsl_reg = re.compile(r""" |
| 263 hsl\([^\)]* # hsl(<maybe stuff> | 263 hsl\([^\)]* # hsl(<maybe stuff> |
| 264 (?:[, ]|(?<=\()) # a comma or space not followed by a ( | 264 (?:[, ]|(?<=\()) # a comma or space not followed by a ( |
| 265 (?:0?\.?)?0% # some equivalent to 0%""", | 265 (?:0?\.?)?0% # some equivalent to 0%""", |
| 266 re.VERBOSE) | 266 re.VERBOSE) |
| 267 zeros_reg = re.compile(r""" | 267 zeros_reg = re.compile(r""" |
| 268 ^.*(?:^|[^0-9.]) # start/non-number | 268 ^.*(?:^|[^0-9.]) # start/non-number |
| 269 (?:\.0|0(?:\.0? # .0, 0, or 0.0 | 269 (?:\.0|0(?:\.0? # .0, 0, or 0.0 |
| 270 |px|em|%|in|cm|mm|pc|pt|ex|deg|g?rad|m?s|k?hz)) # a length unit | 270 |px|em|%|in|cm|mm|pc|pt|ex)) # a length unit |
|
Dan Beam
2015/02/03 16:09:16
this is the functional change
| |
| 271 (?:\D|$) # non-number/end | 271 (?:\D|$) # non-number/end |
| 272 (?=[^{}]+?}).*$ # only { rules }""", | 272 (?=[^{}]+?}).*$ # only { rules }""", |
| 273 re.MULTILINE | re.VERBOSE) | 273 re.MULTILINE | re.VERBOSE) |
| 274 errors = [] | 274 errors = [] |
| 275 for z in re.finditer(zeros_reg, contents): | 275 for z in re.finditer(zeros_reg, contents): |
| 276 first_line = z.group(0).strip().splitlines()[0] | 276 first_line = z.group(0).strip().splitlines()[0] |
| 277 if not hsl_reg.search(first_line): | 277 if not hsl_reg.search(first_line): |
| 278 errors.append(' ' + first_line) | 278 errors.append(' ' + first_line) |
| 279 return errors | 279 return errors |
| 280 | 280 |
| 281 # NOTE: Currently multi-line checks don't support 'after'. Instead, add | 281 # NOTE: Currently multi-line checks don't support 'after'. Instead, add |
| 282 # suggestions while parsing the file so another pass isn't necessary. | 282 # suggestions while parsing the file so another pass isn't necessary. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 'multiline': True, | 329 'multiline': True, |
| 330 }, | 330 }, |
| 331 { 'desc': 'Use rgb() over #hex when not a shade of gray (like #333).', | 331 { 'desc': 'Use rgb() over #hex when not a shade of gray (like #333).', |
| 332 'test': rgb_if_not_gray, | 332 'test': rgb_if_not_gray, |
| 333 'after': suggest_rgb_from_hex, | 333 'after': suggest_rgb_from_hex, |
| 334 }, | 334 }, |
| 335 { 'desc': 'Use *-top/bottom instead of -webkit-*-before/after.', | 335 { 'desc': 'Use *-top/bottom instead of -webkit-*-before/after.', |
| 336 'test': webkit_before_or_after, | 336 'test': webkit_before_or_after, |
| 337 'after': suggest_top_or_bottom, | 337 'after': suggest_top_or_bottom, |
| 338 }, | 338 }, |
| 339 { 'desc': 'Make all zero length terms (i.e. 0px) 0 unless inside of ' | 339 { 'desc': 'Use "0" for zero-width lengths (i.e. 0px -> 0)', |
| 340 'hsl() or part of @keyframe.', | 340 'test': zero_width_lengths, |
| 341 'test': zero_length_values, | |
| 342 'multiline': True, | 341 'multiline': True, |
| 343 }, | 342 }, |
| 344 ] | 343 ] |
| 345 | 344 |
| 346 results = [] | 345 results = [] |
| 347 affected_files = self.input_api.AffectedFiles(include_deletes=False, | 346 affected_files = self.input_api.AffectedFiles(include_deletes=False, |
| 348 file_filter=self.file_filter) | 347 file_filter=self.file_filter) |
| 349 files = [] | 348 files = [] |
| 350 for f in affected_files: | 349 for f in affected_files: |
| 351 # Remove all /*comments*/, @at-keywords, and grit <if|include> tags; we're | 350 # Remove all /*comments*/, @at-keywords, and grit <if|include> tags; we're |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 '%s:\n%s' % (f[0], '\n\n'.join(file_errors)))) | 382 '%s:\n%s' % (f[0], '\n\n'.join(file_errors)))) |
| 384 | 383 |
| 385 if results: | 384 if results: |
| 386 # Add your name if you're here often mucking around in the code. | 385 # Add your name if you're here often mucking around in the code. |
| 387 authors = ['dbeam@chromium.org'] | 386 authors = ['dbeam@chromium.org'] |
| 388 results.append(self.output_api.PresubmitNotifyResult( | 387 results.append(self.output_api.PresubmitNotifyResult( |
| 389 'Was the CSS checker useful? Send feedback or hate mail to %s.' % | 388 'Was the CSS checker useful? Send feedback or hate mail to %s.' % |
| 390 ', '.join(authors))) | 389 ', '.join(authors))) |
| 391 | 390 |
| 392 return results | 391 return results |
| OLD | NEW |