| # Copyright 2022 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| def _TypeScriptPrepCheckNoAddSingletonGetter(file): |
| """Checks that there are no uses of addSingletonGetter() |
| |
| Args: |
| file: A changed file |
| |
| Returns: |
| A list of error messages (strings) |
| """ |
| |
| error_messages = [] |
| if file.LocalPath().endswith('js'): |
| for line_num, line in file.ChangedContents(): |
| if 'addSingletonGetter' in line: |
| error_messages.append( |
| "%s:%d:\n%s\n\n" |
| "Avoid using addSingletonGetter() in ChromeOS Settings app" |
| "due to incompatibility with TypeScript. Refer to " |
| "crrev.com/c/3582712 for an alternate solution." % |
| (file.LocalPath(), line_num, line.strip())) |
| |
| return error_messages |
| |
| |
| def _TypeScriptPrepCheckNoLegacyPolymerSyntax(file): |
| """Checks that there are no uses of the legacy Polymer element syntax |
| |
| Args: |
| file: A changed file |
| |
| Returns: |
| A list of error messages (strings) |
| """ |
| |
| error_messages = [] |
| if file.LocalPath().endswith('js'): |
| for line_num, line in file.ChangedContents(): |
| if 'Polymer({' in line: |
| error_messages.append( |
| "%s:%d:\n%s\n\n" |
| "Avoid using the legacy Polymer element syntax in " |
| "ChromeOS Settings app due to incompatibility with " |
| "TypeScript. Instead use the class-based syntax documented " |
| "in Polymer 3." % |
| (file.LocalPath(), line_num, line.strip())) |
| |
| return error_messages |
| |
| |
| def _EnforceSchemeSpecificURLs(file): |
| """Checks that only scheme-specific URLs are used and scheme relative URLs |
| are avoided. (i.e. 'chrome://' is preferred over '//') |
| |
| Args: |
| file: A changed file |
| |
| Returns: |
| A list of error messages (strings) |
| """ |
| |
| error_messages = [] |
| if file.LocalPath().endswith('js'): |
| for line_num, line in file.ChangedContents(): |
| if '\'//' in line: |
| error_messages.append( |
| "%s:%d:\n%s\n\n" |
| "Prefer using scheme-specific URLs (i.e. 'chrome://')" % |
| (file.LocalPath(), line_num, line.strip())) |
| |
| return error_messages |
| |
| |
| class OSSettingsPresubmitChecker(object): |
| """Checks that the changes comply with ChromeOS Settings code style. |
| |
| Checks: |
| - addSingletonGetter() is not used |
| - No legacy Polymer syntax (1.x, 2.x) is used |
| """ |
| |
| @staticmethod |
| def RunChecks(input_api, output_api): |
| """Runs checks for ChromeOS Settings |
| |
| Args: |
| input_api: presubmit.InputApi containing information of the files |
| in the change. |
| output_api: presubmit.OutputApi used to display the warnings. |
| |
| Returns: |
| A list of presubmit warnings, each containing the line the violation |
| occurred and the warning message. |
| """ |
| |
| error_messages = [] |
| for file in input_api.AffectedFiles(): |
| error_messages += _TypeScriptPrepCheckNoAddSingletonGetter(file) |
| error_messages += _TypeScriptPrepCheckNoLegacyPolymerSyntax(file) |
| error_messages += _EnforceSchemeSpecificURLs(file) |
| |
| errors = list(map(output_api.PresubmitPromptWarning, error_messages)) |
| return errors |