File: os_settings_presubmit_checker.py

package info (click to toggle)
chromium 139.0.7258.138-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,120,676 kB
  • sloc: cpp: 35,100,869; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (107 lines) | stat: -rw-r--r-- 3,496 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 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