File: os_settings_presubmit_checker.py

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; 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 (6)
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