tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 306d5da462a3042b9c9d1b76e36cd5c99dddb051
parent ed6dda592a18d5dde5104bac2c184058b04877a3
Author: Alex Hochheiden <ahochheiden@mozilla.com>
Date:   Wed, 10 Dec 2025 06:03:21 +0000

Bug 2003412 - Fix UP028 warnings: Use yield from instead of yield in for loop r=emilio,mozperftest-reviewers,toolkit-telemetry-reviewers,sparky

https://docs.astral.sh/ruff/rules/yield-in-for-loop/

Differential Revision: https://phabricator.services.mozilla.com/D274685

Diffstat:
Mdom/bindings/Configuration.py | 9+++------
Mdom/bindings/parser/tests/test_union.py | 3+--
Mjs/src/builtin/intl/make_intl_data.py | 3+--
Mjs/src/gdb/mozilla/JSString.py | 3+--
Mjs/src/gdb/mozilla/prettyprinters.py | 3+--
Mjs/src/tests/lib/tasks_adb_remote.py | 10++++------
Mpython/mozbuild/mozbuild/backend/recursivemake.py | 6++----
Mpython/mozbuild/mozbuild/compilation/warnings.py | 9+++------
Mpython/mozbuild/mozbuild/frontend/emitter.py | 6++----
Mpython/mozbuild/mozbuild/frontend/reader.py | 16++++++----------
Mpython/mozbuild/mozpack/files.py | 3+--
Mpython/mozperftest/mozperftest/tests/support.py | 3+--
Mpython/mozperftest/mozperftest/tests/test_androidlog.py | 3+--
Mtesting/mozbase/manifestparser/manifestparser/expression.py | 3+--
Mtesting/mozbase/manifestparser/manifestparser/filters.py | 3+--
Mtesting/mozbase/mozlog/mozlog/handlers/summaryhandler.py | 3+--
Mtesting/mozbase/moztest/moztest/resolve.py | 3+--
Mtesting/mozharness/mozharness/base/script.py | 3+--
Mtesting/performance/hooks.py | 3+--
Mtesting/performance/hooks_recording.py | 3+--
Mtoolkit/components/telemetry/build_scripts/mozparsers/parse_user_interactions.py | 3+--
Mtools/crashreporter/system-symbols/mac/PackageSymbolDumper.py | 3+--
Mtools/crashreporter/system-symbols/mac/get_update_packages.py | 3+--
23 files changed, 37 insertions(+), 70 deletions(-)

diff --git a/dom/bindings/Configuration.py b/dom/bindings/Configuration.py @@ -1375,8 +1375,7 @@ def getDependentDictionariesFromDictionary(d): while d: yield d for member in d.members: - for next in getDictionariesFromType(member.type): - yield next + yield from getDictionariesFromType(member.type) d = d.parent @@ -1393,13 +1392,11 @@ def getDictionariesFromType(type): if type.isUnion(): # Look for dictionaries in all the member types for t in type.flatMemberTypes: - for next in getDictionariesFromType(t): - yield next + yield from getDictionariesFromType(t) elif type.isDictionary(): # Find the dictionaries that are itself, any of its ancestors, or # contained in any of its member types. - for d in getDependentDictionariesFromDictionary(type.inner): - yield d + yield from getDependentDictionariesFromDictionary(type.inner) def getDictionariesConvertedToJS(descriptors, dictionaries, callbacks): diff --git a/dom/bindings/parser/tests/test_union.py b/dom/bindings/parser/tests/test_union.py @@ -8,8 +8,7 @@ import WebIDL def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: - for element in it: - yield element + yield from it # We'd like to use itertools.combinations but it's 2.6 or higher. diff --git a/js/src/builtin/intl/make_intl_data.py b/js/src/builtin/intl/make_intl_data.py @@ -2061,8 +2061,7 @@ def updateCLDRLangTags(args): def flines(filepath, encoding="utf-8"): """Open filepath and iterate over its content.""" with open(filepath, encoding=encoding) as f: - for line in f: - yield line + yield from f @total_ordering diff --git a/js/src/gdb/mozilla/JSString.py b/js/src/gdb/mozilla/JSString.py @@ -53,8 +53,7 @@ class JSStringPtr(Common): 0xE5E5E5E5: "jemalloc freed memory", }.get(flags & 0xFFFFFFFF) if corrupt: - for ch in "<CORRUPT:%s>" % corrupt: - yield ch + yield from "<CORRUPT:%s>" % corrupt return is_rope = (flags & self.stc.LINEAR_BIT) == 0 if is_rope: diff --git a/js/src/gdb/mozilla/prettyprinters.py b/js/src/gdb/mozilla/prettyprinters.py @@ -267,8 +267,7 @@ def implemented_types(t): yield t2 yield t - for t2 in followers(t): - yield t2 + yield from followers(t) template_regexp = re.compile(r"([\w_:]+)<") diff --git a/js/src/tests/lib/tasks_adb_remote.py b/js/src/tests/lib/tasks_adb_remote.py @@ -242,10 +242,9 @@ def start_script( timeout=script_timeout, yield_stdout=True, ) - for test_output in aggregate_script_stdout( + yield from aggregate_script_stdout( adb_process, prefix, tempdir, uniq_tag, tests, options - ): - yield test_output + ) except ADBProcessError as e: # After a device error, the device is typically in a # state where all further tests will fail so there is no point in @@ -276,7 +275,6 @@ def get_remote_results(tests, prefix, pb, options): device, prefix, tempdir, options, uniq_tag, tests ) - for test_output in start_script( + yield from start_script( device, prefix, tempdir, script, uniq_tag, script_timeout, tests, options - ): - yield test_output + ) diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py @@ -302,11 +302,9 @@ class RecursiveMakeTraversal: if start not in self._traversal: return for node in parallel: - for n in self.traverse(node, filter): - yield n + yield from self.traverse(node, filter) for dir in sequential: - for d in self.traverse(dir, filter): - yield d + yield from self.traverse(dir, filter) def get_subdirs(self, dir): """ diff --git a/python/mozbuild/mozbuild/compilation/warnings.py b/python/mozbuild/mozbuild/compilation/warnings.py @@ -139,8 +139,7 @@ class WarningsDatabase: def __iter__(self): for value in self._files.values(): - for warning in value["warnings"]: - yield warning + yield from value["warnings"] def __contains__(self, item): for value in self._files.values(): @@ -154,8 +153,7 @@ class WarningsDatabase: def warnings(self): """All the CompilerWarning instances in this database.""" for value in self._files.values(): - for w in value["warnings"]: - yield w + yield from value["warnings"] def type_counts(self, dirpath=None): """Returns a mapping of warning types to their counts.""" @@ -183,8 +181,7 @@ class WarningsDatabase: """Obtain the warnings for the specified file.""" f = self._files.get(filename, {"warnings": []}) - for warning in f["warnings"]: - yield warning + yield from f["warnings"] def insert(self, warning, compute_hash=True): assert isinstance(warning, CompilerWarning) diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py @@ -253,8 +253,7 @@ class TreeMetadataEmitter(LoggingMixin): for o in lib.refs: yield o if isinstance(o, StaticLibrary): - for q in recurse_refs(o): - yield q + yield from recurse_refs(o) # Check that all static libraries refering shared libraries in # USE_LIBS are linked into a shared library or program. @@ -1223,8 +1222,7 @@ class TreeMetadataEmitter(LoggingMixin): # We always emit a directory traversal descriptor. This is needed by # the recursive make backend. - for o in self._emit_directory_traversal_from_context(context): - yield o + yield from self._emit_directory_traversal_from_context(context) for obj in self._process_xpidl(context): yield obj diff --git a/python/mozbuild/mozbuild/frontend/reader.py b/python/mozbuild/mozbuild/frontend/reader.py @@ -898,8 +898,7 @@ class BuildReader: read, a new Context is created and emitted. """ path = mozpath.join(self.config.topsrcdir, "moz.build") - for r in self.read_mozbuild(path, self.config): - yield r + yield from self.read_mozbuild(path, self.config) all_gyp_paths = set() for g in self._gyp_processors: for gyp_context in g.results: @@ -1116,10 +1115,9 @@ class BuildReader: """ self._execution_stack.append(path) try: - for s in self._read_mozbuild( + yield from self._read_mozbuild( path, config, descend=descend, metadata=metadata - ): - yield s + ) except BuildReaderError as bre: raise bre @@ -1244,8 +1242,7 @@ class BuildReader: ) self._gyp_processors.append(gyp_processor) - for subcontext in sandbox.subcontexts: - yield subcontext + yield from sandbox.subcontexts # Traverse into referenced files. @@ -1294,10 +1291,9 @@ class BuildReader: ) self._read_files[child_relpath] = (relpath, path) - for res in self.read_mozbuild( + yield from self.read_mozbuild( child_path, context.config, metadata=child_metadata - ): - yield res + ) self._execution_stack.pop() diff --git a/python/mozbuild/mozpack/files.py b/python/mozbuild/mozpack/files.py @@ -998,8 +998,7 @@ class FileFinder(BaseFinder): continue if not self.find_dotfiles: continue - for p_, f in self._find(mozpath.join(path, p)): - yield p_, f + yield from self._find(mozpath.join(path, p)) def get(self, path): srcpath = os.path.join(self.base, path) diff --git a/python/mozperftest/mozperftest/tests/support.py b/python/mozperftest/mozperftest/tests/support.py @@ -102,8 +102,7 @@ def requests_content(chunks=None): def _content(*args, **kw): class Resp: def iter_content(self, **kw): - for chunk in chunks: - yield chunk + yield from chunks return Resp() diff --git a/python/mozperftest/mozperftest/tests/test_androidlog.py b/python/mozperftest/mozperftest/tests/test_androidlog.py @@ -39,8 +39,7 @@ class FakeDevice: def get_logcat(self): with LOGCAT.open() as f: - for line in f: - yield line + yield from f def fake_version_producer(self, metadata): diff --git a/testing/mozbase/manifestparser/manifestparser/expression.py b/testing/mozbase/manifestparser/manifestparser/expression.py @@ -261,8 +261,7 @@ class ExpressionParser: """ Lex the input text into tokens and yield them in sequence. """ - for t in scan(self.text): - yield t + yield from scan(self.text) yield end_token() def value(self, ident): diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py @@ -272,8 +272,7 @@ class chunk_by_dir(InstanceFilter): disabled_dirs = [ v for k, v in tests_by_dir.items() if k not in ordered_dirs ] - for disabled_test in itertools.chain(*disabled_dirs): - yield disabled_test + yield from itertools.chain(*disabled_dirs) class chunk_by_manifest(InstanceFilter): diff --git a/testing/mozbase/mozlog/mozlog/handlers/summaryhandler.py b/testing/mozbase/mozlog/mozlog/handlers/summaryhandler.py @@ -74,8 +74,7 @@ class SummaryHandler(LogHandler): Yields a tuple of (suite, summary). The summary returned is the same format as returned by 'get'. """ - for suite, data in self.summary.items(): - yield suite, data + yield from self.summary.items() @classmethod def aggregate(cls, key, counts, include_skip=True): diff --git a/testing/mozbase/moztest/moztest/resolve.py b/testing/mozbase/moztest/moztest/resolve.py @@ -920,8 +920,7 @@ class TestResolver(MozbuildObject): for p in sorted(candidate_paths): tests = self.tests_by_path[p] - for test in fltr(tests): - yield test + yield from fltr(tests) def is_puppeteer_path(self, path): if path is None: diff --git a/testing/mozharness/mozharness/base/script.py b/testing/mozharness/mozharness/base/script.py @@ -671,8 +671,7 @@ class ScriptMixin(PlatformMixin): filter_partial = functools.partial(fnmatch.filter, namelist) entries = itertools.chain(*map(filter_partial, extract_dirs or ["*"])) - for entry in entries: - yield entry + yield from entries def unzip(self, compressed_file, extract_to, extract_dirs="*", verbose=False): """This method allows to extract a zip file without writing to disk first. diff --git a/testing/performance/hooks.py b/testing/performance/hooks.py @@ -11,8 +11,7 @@ with open(sites) as f: def next_site(): - for site in sites: - yield site + yield from sites get_site = next_site() diff --git a/testing/performance/hooks_recording.py b/testing/performance/hooks_recording.py @@ -95,8 +95,7 @@ def before_iterations(kw): raise Exception("No tests were selected for recording!") def next_site(): - for site in sites: - yield site + yield from sites next_site = next_site() diff --git a/toolkit/components/telemetry/build_scripts/mozparsers/parse_user_interactions.py b/toolkit/components/telemetry/build_scripts/mozparsers/parse_user_interactions.py @@ -242,5 +242,4 @@ def from_files(filenames): for filename in filenames: all_user_interactions += load_user_interactions(filename) - for user_interaction in all_user_interactions: - yield user_interaction + yield from all_user_interactions diff --git a/tools/crashreporter/system-symbols/mac/PackageSymbolDumper.py b/tools/crashreporter/system-symbols/mac/PackageSymbolDumper.py @@ -133,8 +133,7 @@ def find_all_packages(paths): """ for path in paths: logging.info(f"find_all_packages: {path}") - for pkg in find_packages(path): - yield pkg + yield from find_packages(path) def find_payloads(path): diff --git a/tools/crashreporter/system-symbols/mac/get_update_packages.py b/tools/crashreporter/system-symbols/mac/get_update_packages.py @@ -112,8 +112,7 @@ def find_update_packages(tmpdir): if future.exception() is not None: logging.error(f"exception downloading {url}: {future.exception()}") else: - for pkg in future.result(): - yield pkg + yield from future.result() def main():