Index: chrome/browser/web_dev_style/html_checker.py |
diff --git a/chrome/browser/web_dev_style/html_checker.py b/chrome/browser/web_dev_style/html_checker.py |
deleted file mode 100644 |
index bd5070a72382f901d17dc2e2d0106f9bc42c8e48..0000000000000000000000000000000000000000 |
--- a/chrome/browser/web_dev_style/html_checker.py |
+++ /dev/null |
@@ -1,116 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-""" |
-Presubmit for Chromium HTML resources. See chrome/browser/PRESUBMIT.py. |
-""" |
- |
-import regex_check |
- |
- |
-class HtmlChecker(object): |
- def __init__(self, input_api, output_api, file_filter=None): |
- self.input_api = input_api |
- self.output_api = output_api |
- self.file_filter = file_filter |
- |
- def ClassesUseDashFormCheck(self, line_number, line): |
- regex = self.input_api.re.compile(""" |
- (?:^|\s) # start of line or whitespace |
- (class="[^"]*[A-Z_][^"]*") # class contains caps or '_' |
- """, |
- self.input_api.re.VERBOSE) |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- "Classes should use dash-form.") |
- |
- def DoNotCloseSingleTagsCheck(self, line_number, line): |
- regex = r"(/>)" |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- "Do not close single tags.") |
- |
- def DoNotUseBrElementCheck(self, line_number, line): |
- regex = r"(<br)" |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- "Do not use <br>; place blocking elements (<div>) as appropriate.") |
- |
- def DoNotUseInputTypeButtonCheck(self, line_number, line): |
- regex = self.input_api.re.compile(""" |
- (<input [^>]* # "<input " followed by anything but ">" |
- type="button" # type="button" |
- [^>]*>) # anything but ">" then ">" |
- """, |
- self.input_api.re.VERBOSE) |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- 'Use the button element instead of <input type="button">') |
- |
- def DoNotUseSingleQuotesCheck(self, line_number, line): |
- regex = self.input_api.re.compile(""" |
- <\S+ # The tag name. |
- (?:\s+\S+\$?="[^"]*"|\s+\S+)* # Correctly quoted or non-value props. |
- \s+(\S+\$?='[^']*') # Find incorrectly quoted (foo='bar'). |
- [^>]*> # To the end of the tag. |
- """, |
- self.input_api.re.MULTILINE | self.input_api.re.VERBOSE) |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- 'Use double quotes rather than single quotes in HTML properties') |
- |
- def I18nContentJavaScriptCaseCheck(self, line_number, line): |
- regex = self.input_api.re.compile(""" |
- (?:^|\s) # start of line or whitespace |
- i18n-content=" # i18n-content=" |
- ([A-Z][^"]*|[^"]*[-_][^"]*)" # starts with caps or contains '-' or '_' |
- """, |
- self.input_api.re.VERBOSE) |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- "For i18n-content use javaScriptCase.") |
- |
- def LabelCheck(self, line_number, line): |
- regex = self.input_api.re.compile(""" |
- (?:^|\s) # start of line or whitespace |
- <label[^>]+? # <label tag |
- (for=) # for= |
- """, |
- self.input_api.re.VERBOSE) |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- "Avoid 'for' attribute on <label>. Place the input within the <label>, " |
- "or use aria-labelledby for <select>.") |
- |
- def QuotePolymerBindings(self, line_number, line): |
- regex = self.input_api.re.compile(r"=(\[\[|\{\{)") |
- return regex_check.RegexCheck(self.input_api.re, line_number, line, regex, |
- 'Please use quotes around Polymer bindings (i.e. attr="[[prop]]")') |
- |
- def RunChecks(self): |
- """Check for violations of the Chromium web development style guide. See |
- https://chromium.googlesource.com/chromium/src/+/master/styleguide/web/web.md |
- """ |
- results = [] |
- |
- affected_files = self.input_api.change.AffectedFiles( |
- file_filter=self.file_filter, include_deletes=False) |
- |
- for f in affected_files: |
- if not f.LocalPath().endswith('.html'): |
- continue |
- |
- errors = [] |
- |
- for line_number, line in f.ChangedContents(): |
- errors.extend(filter(None, [ |
- self.ClassesUseDashFormCheck(line_number, line), |
- self.DoNotCloseSingleTagsCheck(line_number, line), |
- self.DoNotUseBrElementCheck(line_number, line), |
- self.DoNotUseInputTypeButtonCheck(line_number, line), |
- self.I18nContentJavaScriptCaseCheck(line_number, line), |
- self.LabelCheck(line_number, line), |
- self.QuotePolymerBindings(line_number, line), |
- ])) |
- |
- if errors: |
- abs_local_path = f.AbsoluteLocalPath() |
- file_indicator = 'Found HTML style issues in %s' % abs_local_path |
- prompt_msg = file_indicator + '\n\n' + '\n'.join(errors) + '\n' |
- results.append(self.output_api.PresubmitPromptWarning(prompt_msg)) |
- |
- return results |