Skip to content

Conversation

@tomerqodo
Copy link

@tomerqodo tomerqodo commented Jan 29, 2026

Benchmark PR from agentic-review-benchmarks#1

Summary by CodeRabbit

  • New Features

    • Added "Allow Feature Studies" and "Allow Remote Improvements" settings options to the Settings menu
    • Enhanced settings UI with descriptive labels and learn more links for new feature controls
  • Localization

    • Updated and expanded localization strings across multiple languages (English variants and others)
    • Added new localized content for Studies and Rollouts features with version 148 support

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 29, 2026

Walkthrough

These changes introduce v148 localization support for Studies and Rollouts feature toggles across Firefox iOS and Focus iOS, including linter configuration updates, new localized strings across multiple languages, and a new text formatting utility class.

Changes

Cohort / File(s) Summary
Linter Configuration
.github/l10n/linter_config_ios.json
Added exclusion for the Settings.Studies.Message.v148 key to skip quote validation checks on this specific message.
Firefox iOS Localization Strings
firefox-ios/Shared/Strings.swift
Added six new public localization constants for Studies and Rollouts settings at v148: StudiesSettingTitleV3, StudiesSettingLinkV3, StudiesSettingMessageV3, RolloutsSettingTitle, RolloutsSettingLink, and RolloutsSettingMessage.
English Localization Files
firefox-ios/Shared/Supporting Files/en-CA.lproj/Settings.strings, firefox-ios/Shared/Supporting Files/en-GB.lproj/Settings.strings
Added v148 localization entries for Studies and Rollouts (Link, Message, Title keys). The en-GB file also removed an obsolete Settings.Translation.ToggleTitle.v145 entry.
Focus iOS UI Utilities
focus-ios/Blockzilla/UIComponents/UIConstants.swift
Escaped double quotes in existing localization strings, added five new localization keys (detailTextSendUsageDataV2, labelStudiesV2, detailTextStudiesV2, labelRollouts, detailTextRollouts), and introduced a new SettingsTextFormatter utility class with formatStudiesText and formatRolloutsText methods.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 Six strings hop into the settings view,
Studies and Rollouts, both shiny and new,
A formatter hops in to dress them just right,
v148 glows in localized light!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: adding new strings for a Rollouts toggle and updating Studies-related strings across multiple files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@firefox-ios/Shared/Strings.swift`:
- Around line 6258-6261: The localized string for key
"Settings.Rollouts.Message.v148" uses a non-positional specifier ("%@") but the
comment documents a positional placeholder ("%1$@"); update the value to use a
positional specifier (replace "%@" with "%1$@") so it matches the comment and
supports reordering in translations; ensure you only change the value string for
that key in Strings.swift (or alternatively update the comment if you
intentionally want a non-positional specifier).
🧹 Nitpick comments (1)
focus-ios/Blockzilla/UIComponents/UIConstants.swift (1)

417-430: Consider using static methods instead of singleton.

Since SettingsTextFormatter is stateless and the methods are simple String(format:) wrappers, static methods would be simpler and eliminate the singleton overhead:

Alternative approach
-class SettingsTextFormatter {
-    static let shared = SettingsTextFormatter()
-
-    private init() {}
-
-    func formatStudiesText(appName: String) -> String {
+enum SettingsTextFormatter {
+    static func formatStudiesText(appName: String) -> String {
         return String(format: strings.detailTextStudies, appName)
     }
 
-    func formatRolloutsText(appName: String) -> String {
+    static func formatRolloutsText(appName: String) -> String {
         return String(format: strings.detailTextRollouts, appName)
     }
 }

Usage would change from SettingsTextFormatter.shared.formatStudiesText(...) to SettingsTextFormatter.formatStudiesText(...).

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 74e028f and a606e5b.

📒 Files selected for processing (5)
  • .github/l10n/linter_config_ios.json
  • firefox-ios/Shared/Strings.swift
  • firefox-ios/Shared/Supporting Files/en-CA.lproj/Settings.strings
  • firefox-ios/Shared/Supporting Files/en-GB.lproj/Settings.strings
  • focus-ios/Blockzilla/UIComponents/UIConstants.swift
🧰 Additional context used
🧬 Code graph analysis (1)
firefox-ios/Shared/Strings.swift (1)
firefox-ios/Client/Assets/CC_Script/TranslationsUtils.mjs (1)
  • key (118-118)
🔇 Additional comments (6)
focus-ios/Blockzilla/UIComponents/UIConstants.swift (3)

202-203: LGTM!

The V2 localization key follows the versioning pattern for localization migration. The escaped quotes in comments properly document the placeholder usage.


205-209: LGTM!

The new V2 Studies strings and Rollouts strings are well-defined with appropriate localization keys and clear user-facing descriptions.


423-425: Verify: Should this use the V2 string key?

The formatter uses strings.detailTextStudies (the original key), but this PR introduces detailTextStudiesV2 with updated wording. If the V2 strings are intended for new UI, consider using detailTextStudiesV2 here for consistency:

Suggested change
 func formatStudiesText(appName: String) -> String {
-    return String(format: strings.detailTextStudies, appName)
+    return String(format: strings.detailTextStudiesV2, appName)
 }
firefox-ios/Shared/Supporting Files/en-CA.lproj/Settings.strings (1)

238-261: LGTM!

The new v148 localization entries for Studies and Rollouts are well-structured:

  • Comments clearly describe each string's purpose
  • The %@ placeholder for app name is consistent with existing patterns
  • Keys follow the established naming convention (Settings.<Feature>.<Property>.v<version>)
firefox-ios/Shared/Supporting Files/en-GB.lproj/Settings.strings (1)

238-261: LGTM!

The new v148 localization entries for Studies and Rollouts are consistent with the en-CA locale and follow the established patterns. The British English locale appropriately uses the same text for these settings strings.

.github/l10n/linter_config_ios.json (1)

8-10: Document the rationale for excluding Settings.Studies.Message.v148 from quote validation.

The exclusion exists in the linter config but lacks any explanation. Add a comment or update documentation clarifying why this string requires bypass from quote checks, to help maintainers understand the configuration decision.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment on lines +6258 to +6261
key: "Settings.Rollouts.Message.v148",
tableName: "Settings",
value: "%@ will improve features, performance, and stability between updates. Changes applied remotely.",
comment: "A short description that explains that Mozilla may change features remotely. %1$@ is the app name (e.g. Firefox).")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Align placeholder spec with the comment (positional).

The comment documents %1$@, but the value uses %@. Use a positional specifier (or update the comment) to avoid confusion and allow reordering in localized strings.

🛠️ Proposed fix
-        value: "%@ will improve features, performance, and stability between updates. Changes applied remotely.",
+        value: "%1$@ will improve features, performance, and stability between updates. Changes applied remotely.",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
key: "Settings.Rollouts.Message.v148",
tableName: "Settings",
value: "%@ will improve features, performance, and stability between updates. Changes applied remotely.",
comment: "A short description that explains that Mozilla may change features remotely. %1$@ is the app name (e.g. Firefox).")
key: "Settings.Rollouts.Message.v148",
tableName: "Settings",
value: "%1$@ will improve features, performance, and stability between updates. Changes applied remotely.",
comment: "A short description that explains that Mozilla may change features remotely. %1$@ is the app name (e.g. Firefox).")
🤖 Prompt for AI Agents
In `@firefox-ios/Shared/Strings.swift` around lines 6258 - 6261, The localized
string for key "Settings.Rollouts.Message.v148" uses a non-positional specifier
("%@") but the comment documents a positional placeholder ("%1$@"); update the
value to use a positional specifier (replace "%@" with "%1$@") so it matches the
comment and supports reordering in translations; ensure you only change the
value string for that key in Strings.swift (or alternatively update the comment
if you intentionally want a non-positional specifier).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants