From cf1cdacaff28c7da0d3a49a2094a2e3da86c75e9 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 21 May 2026 10:26:22 +1000 Subject: [PATCH 1/2] Enable SwiftLint rule: explicit_init Part of the Orchard SwiftLint rollout campaign. The rule discourages explicitly calling `.init(...)` when the type is known, preferring `Type(...)` over `Type.init(...)`. `rake lintfix` auto-fixed 36 files; no manual fixes were needed. --- Generated with the help of Claude Code, https://claude.com/claude-code Co-Authored-By: Claude Opus 4.7 (1M context) --- .swiftlint.yml | 3 +++ .../WordPressKitModels/RemoteUser+Likes.swift | 2 +- .../RemoteVideoPressVideo.swift | 2 +- .../WordPressSharedTests/WPUserAgentTests.swift | 2 +- .../KeystoneTests/Helpers/ModelTestHelper.swift | 6 +++--- .../Helpers/NSManagedObject+Fixture.swift | 2 +- .../AllDomainsListItemViewModelTests.swift | 2 +- .../Features/Stats/StatsMockDataLoader.swift | 2 +- .../CoreAPITests/WordPressComRestApiTests.swift | 2 +- .../Tests/IPLocationRemoteTests.swift | 2 +- .../Blog/BlogSettings+DateAndTimeFormat.swift | 2 +- .../Services/AccountSettingsService.swift | 2 +- .../WeeklyRoundupBackgroundTask.swift | 2 +- .../BuildInformation/RemoteConfigParameter.swift | 2 +- .../ShareNoticeNavigationCoordinator.swift | 2 +- .../Utility/Spotlight/SearchManager.swift | 2 +- .../UnknownEditorViewController.swift | 2 +- .../RegisterDomainDetailsViewController.swift | 2 +- .../Login/JetpackConnectionViewModel.swift | 4 ++-- .../Notifications/Views/CommentLargeButton.swift | 2 +- .../Reader/Cards/ReaderPostCellViewModel.swift | 2 +- .../Views/ReaderDetailCommentsHeader.swift | 4 ++-- .../Views/ReaderDetailLikesListController.swift | 2 +- .../ReaderDisplaySettingViewController.swift | 2 +- .../Stats/Helpers/StatsDataHelper.swift | 2 +- .../SiteStatsInsightsTableViewController.swift | 2 +- .../Insights/SiteStatsInsightsViewModel.swift | 16 ++++++++-------- .../StatsMostPopularTimeInsightsCell.swift | 4 ++-- .../SiteStatsPeriodTableViewController.swift | 2 +- .../Period Stats/SiteStatsPeriodViewModel.swift | 2 +- .../PostStatsTableViewController.swift | 2 +- .../SiteStatsDetailTableViewController.swift | 2 +- ...StatsInsightsDetailsTableViewController.swift | 2 +- .../Stats/StatsLikesListViewController.swift | 2 +- .../Support/SupportTableViewController.swift | 4 ++-- ...SupportTableViewControllerConfiguration.swift | 2 +- .../Classes/ViewRelated/Views/BadgeLabel.swift | 2 +- 37 files changed, 52 insertions(+), 49 deletions(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index 3b22ba8f7043..e2029e0b2d84 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -57,6 +57,9 @@ only_rules: # Prefer checking `isEmpty` over comparing to empty string literal `""`. - empty_string + # Avoid explicitly calling `.init()`; prefer `Type(...)` over `Type.init(...)`. + - explicit_init + # Prefer `first(where:)` over `filter { }.first`. - first_where diff --git a/Modules/Sources/WordPressKitModels/RemoteUser+Likes.swift b/Modules/Sources/WordPressKitModels/RemoteUser+Likes.swift index d9b24413ef13..aeb51f5991fa 100644 --- a/Modules/Sources/WordPressKitModels/RemoteUser+Likes.swift +++ b/Modules/Sources/WordPressKitModels/RemoteUser+Likes.swift @@ -33,7 +33,7 @@ import Foundation preferredBlog = { if let preferredBlogDict = dictionary["preferred_blog"] as? [String: Any] { - return RemoteLikeUserPreferredBlog.init(dictionary: preferredBlogDict) + return RemoteLikeUserPreferredBlog(dictionary: preferredBlogDict) } return nil }() diff --git a/Modules/Sources/WordPressKitModels/RemoteVideoPressVideo.swift b/Modules/Sources/WordPressKitModels/RemoteVideoPressVideo.swift index 7613136a0c3e..180e3ea47788 100644 --- a/Modules/Sources/WordPressKitModels/RemoteVideoPressVideo.swift +++ b/Modules/Sources/WordPressKitModels/RemoteVideoPressVideo.swift @@ -54,7 +54,7 @@ import Foundation displayEmbed = metadataDict.object(forKey: "display_embed") as? Bool allowDownload = metadataDict.object(forKey: "allow_download") as? Bool rating = metadataDict.string(forKey: "rating") - if let privacySettingValue = metadataDict.number(forKey: "privacy_setting")?.intValue, let privacySettingEnum = VideoPressPrivacySetting.init(rawValue: privacySettingValue) { + if let privacySettingValue = metadataDict.number(forKey: "privacy_setting")?.intValue, let privacySettingEnum = VideoPressPrivacySetting(rawValue: privacySettingValue) { privacySetting = privacySettingEnum } if let poster = metadataDict.string(forKey: "poster") { diff --git a/Modules/Tests/WordPressSharedTests/WPUserAgentTests.swift b/Modules/Tests/WordPressSharedTests/WPUserAgentTests.swift index 23fb0453e9a9..7ea9a03303ae 100644 --- a/Modules/Tests/WordPressSharedTests/WPUserAgentTests.swift +++ b/Modules/Tests/WordPressSharedTests/WPUserAgentTests.swift @@ -23,7 +23,7 @@ class WPWPUserAgentTests { let userDefaults = UserDefaults.standard let appVersion = try #require(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) let defaultUserAgent = WPUserAgent.defaultUserAgent(userDefaults: userDefaults) - let expectedUserAgent = String.init(format: "%@ wp-iphone/%@", defaultUserAgent, appVersion) + let expectedUserAgent = String(format: "%@ wp-iphone/%@", defaultUserAgent, appVersion) #expect(WPUserAgent.wordPressUserAgent(userDefaults: userDefaults) == expectedUserAgent) } diff --git a/Tests/KeystoneTests/Helpers/ModelTestHelper.swift b/Tests/KeystoneTests/Helpers/ModelTestHelper.swift index 5a1f88e4b319..99af2f29eec2 100644 --- a/Tests/KeystoneTests/Helpers/ModelTestHelper.swift +++ b/Tests/KeystoneTests/Helpers/ModelTestHelper.swift @@ -6,7 +6,7 @@ import WordPressData public class ModelTestHelper: NSObject { @objc public class func insertSelfHostedBlog(context: NSManagedObjectContext) -> Blog { - let blog = Blog.init(context: context) + let blog = Blog(context: context) blog.url = "http://example.com/" blog.xmlrpc = "http://example.com/xmlrpc.php" return blog @@ -14,7 +14,7 @@ public class ModelTestHelper: NSObject { @objc public class func insertDotComBlog(context: NSManagedObjectContext) -> Blog { - let blog = Blog.init(context: context) + let blog = Blog(context: context) blog.url = "https://example.wordpress.com/" blog.xmlrpc = "https://example.wordpress.com/xmlrpc.php" blog.account = insertAccount(context: context) @@ -23,7 +23,7 @@ public class ModelTestHelper: NSObject { @objc public class func insertAccount(context: NSManagedObjectContext) -> WPAccount { - let account = WPAccount.init(context: context) + let account = WPAccount(context: context) account.username = "test_user" return account } diff --git a/Tests/KeystoneTests/Helpers/NSManagedObject+Fixture.swift b/Tests/KeystoneTests/Helpers/NSManagedObject+Fixture.swift index 598c5862f3ec..ee7e73e1f9b6 100644 --- a/Tests/KeystoneTests/Helpers/NSManagedObject+Fixture.swift +++ b/Tests/KeystoneTests/Helpers/NSManagedObject+Fixture.swift @@ -10,7 +10,7 @@ extension NSManagedObject { /// - Returns: A new instance with property values of the given JSON file. static func fixture(fromFile fileName: String, insertInto context: NSManagedObjectContext) throws -> Self { let jsonObject = try JSONObject(fromFileNamed: fileName) - let model = Self.init(context: context) + let model = Self(context: context) for (key, value) in jsonObject { model.setValue(value, forKey: key) } diff --git a/Tests/KeystoneTests/Tests/Features/Domains/AllDomainsListItemViewModelTests.swift b/Tests/KeystoneTests/Tests/Features/Domains/AllDomainsListItemViewModelTests.swift index aa19c48452aa..cce23afddebf 100644 --- a/Tests/KeystoneTests/Tests/Features/Domains/AllDomainsListItemViewModelTests.swift +++ b/Tests/KeystoneTests/Tests/Features/Domains/AllDomainsListItemViewModelTests.swift @@ -37,7 +37,7 @@ final class AllDomainsListItemViewModelTests: XCTestCase { } func testMappingWithValidDomain() throws { - let futureDate = Date.init(timeIntervalSinceNow: 365 * 24 * 60 * 60) + let futureDate = Date(timeIntervalSinceNow: 365 * 24 * 60 * 60) let iso8601Date = ViewModel.Row.DateFormatters.iso8601.string(from: futureDate) let humanReadableDate = ViewModel.Row.DateFormatters.humanReadable.string(from: futureDate) self.assert( diff --git a/Tests/KeystoneTests/Tests/Features/Stats/StatsMockDataLoader.swift b/Tests/KeystoneTests/Tests/Features/Stats/StatsMockDataLoader.swift index 8ba1156d164b..e5d04ca43d4c 100644 --- a/Tests/KeystoneTests/Tests/Features/Stats/StatsMockDataLoader.swift +++ b/Tests/KeystoneTests/Tests/Features/Stats/StatsMockDataLoader.swift @@ -9,7 +9,7 @@ struct StatsMockDataLoader { let feb21 = DateComponents(year: 2019, month: 2, day: 21) let date = Calendar.autoupdatingCurrent.date(from: feb21)! - let jsonDictionary = try JSONObject.init(fromFileNamed: fileName) + let jsonDictionary = try JSONObject(fromFileNamed: fileName) guard let statsSummaryTimeIntervalData = StatsSummaryTimeIntervalData( date: date, diff --git a/Tests/WordPressKitTests/CoreAPITests/WordPressComRestApiTests.swift b/Tests/WordPressKitTests/CoreAPITests/WordPressComRestApiTests.swift index b2758c119d7f..5ea8e5e3ffd7 100644 --- a/Tests/WordPressKitTests/CoreAPITests/WordPressComRestApiTests.swift +++ b/Tests/WordPressKitTests/CoreAPITests/WordPressComRestApiTests.swift @@ -366,7 +366,7 @@ class WordPressComRestApiTests: XCTestCase { func testCancelationOfRequest() { stub(condition: isRestAPIMediaNewRequest()) { _ in - return HTTPStubsResponse.init(error: NSError(domain: NSURLErrorDomain, code: NSURLErrorCancelled, userInfo: nil)) + return HTTPStubsResponse(error: NSError(domain: NSURLErrorDomain, code: NSURLErrorCancelled, userInfo: nil)) } let expect = self.expectation(description: "One callback should be invoked") let api = WordPressComRestApi(oAuthToken: "fakeToken") diff --git a/Tests/WordPressKitTests/WordPressKitTests/Tests/IPLocationRemoteTests.swift b/Tests/WordPressKitTests/WordPressKitTests/Tests/IPLocationRemoteTests.swift index 1576258e3e80..182d742ba1bc 100644 --- a/Tests/WordPressKitTests/WordPressKitTests/Tests/IPLocationRemoteTests.swift +++ b/Tests/WordPressKitTests/WordPressKitTests/Tests/IPLocationRemoteTests.swift @@ -9,7 +9,7 @@ final class IPLocationRemoteTests: XCTestCase { super.setUp() let configuration = URLSessionConfiguration.default configuration.protocolClasses = [MockURLProtocol.self] - let urlSession = URLSession.init(configuration: configuration) + let urlSession = URLSession(configuration: configuration) remote = IPLocationRemote(urlSession: urlSession) } diff --git a/WordPress/Classes/Models/Blog/BlogSettings+DateAndTimeFormat.swift b/WordPress/Classes/Models/Blog/BlogSettings+DateAndTimeFormat.swift index 3aa06d85aad8..0a767a9530bf 100644 --- a/WordPress/Classes/Models/Blog/BlogSettings+DateAndTimeFormat.swift +++ b/WordPress/Classes/Models/Blog/BlogSettings+DateAndTimeFormat.swift @@ -125,7 +125,7 @@ extension BlogSettings { // MARK: - Private Properties fileprivate static var weekdays: [String] { - var calendar = Calendar.init(identifier: .gregorian) + var calendar = Calendar(identifier: .gregorian) calendar.locale = Locale.current return calendar.weekdaySymbols } diff --git a/WordPress/Classes/Services/AccountSettingsService.swift b/WordPress/Classes/Services/AccountSettingsService.swift index ffe70b995f7e..8cce9935f541 100644 --- a/WordPress/Classes/Services/AccountSettingsService.swift +++ b/WordPress/Classes/Services/AccountSettingsService.swift @@ -233,7 +233,7 @@ class AccountSettingsService { return nil } - return AccountSettings.init(managed: managedAccount) + return AccountSettings(managed: managedAccount) } } diff --git a/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift b/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift index 9aa96bbf66d9..1b04c3a60417 100644 --- a/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift +++ b/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift @@ -368,7 +368,7 @@ class WeeklyRoundupBackgroundTask: BackgroundTask { // The run date is when the task is scheduled to run, but the period end date is actually // the previous day at 24:59:59. - let periodEndDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: runDate)!.addingTimeInterval(TimeInterval.init(-1)) + let periodEndDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: runDate)!.addingTimeInterval(TimeInterval(-1)) return periodEndDate } diff --git a/WordPress/Classes/Utility/BuildInformation/RemoteConfigParameter.swift b/WordPress/Classes/Utility/BuildInformation/RemoteConfigParameter.swift index 16250dbbec69..dd02a48e097d 100644 --- a/WordPress/Classes/Utility/BuildInformation/RemoteConfigParameter.swift +++ b/WordPress/Classes/Utility/BuildInformation/RemoteConfigParameter.swift @@ -11,7 +11,7 @@ extension RemoteParameter { overrideStore: RemoteConfigOverrideStore = .init()) -> T? { if let overriddenStringValue = overrideStore.overriddenValue(for: self) { DDLogInfo("🚩 Returning overridden value for remote config param: \(description).") - return T.init(overriddenStringValue) + return T(overriddenStringValue) } if let remoteValue = remoteStore.value(for: key) { return remoteValue as? T diff --git a/WordPress/Classes/Utility/Sharing/ShareNoticeNavigationCoordinator.swift b/WordPress/Classes/Utility/Sharing/ShareNoticeNavigationCoordinator.swift index 099c9e6f56e8..e161b07aaa41 100644 --- a/WordPress/Classes/Utility/Sharing/ShareNoticeNavigationCoordinator.swift +++ b/WordPress/Classes/Utility/Sharing/ShareNoticeNavigationCoordinator.swift @@ -19,7 +19,7 @@ class ShareNoticeNavigationCoordinator { static func presentEditor(for post: Post, source: String) { WPAppAnalytics.track(.notificationsShareSuccessEditPost, post: post) - let editor = EditPostViewController.init(post: post) + let editor = EditPostViewController(post: post) editor.modalPresentationStyle = .fullScreen RootViewCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) } diff --git a/WordPress/Classes/Utility/Spotlight/SearchManager.swift b/WordPress/Classes/Utility/Spotlight/SearchManager.swift index 3a375bb4e09b..979f7cd18c6b 100644 --- a/WordPress/Classes/Utility/Spotlight/SearchManager.swift +++ b/WordPress/Classes/Utility/Spotlight/SearchManager.swift @@ -437,7 +437,7 @@ fileprivate extension SearchManager { func openEditor(for post: Post) { closePreviewIfNeeded(for: post) openListView(for: post) - let editor = EditPostViewController.init(post: post) + let editor = EditPostViewController(post: post) editor.modalPresentationStyle = .fullScreen RootViewCoordinator.sharedPresenter.rootViewController.present(editor, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/UnknownEditorViewController.swift b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/UnknownEditorViewController.swift index 935c755eed23..00f1f5b8aa65 100644 --- a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/UnknownEditorViewController.swift +++ b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/UnknownEditorViewController.swift @@ -143,6 +143,6 @@ extension UnknownEditorViewController { struct Constants { static let defaultContentFont = UIFont.systemFont(ofSize: 14) - static let defaultContentInsets = UIEdgeInsets.init(top: 0, left: 5, bottom: 0, right: -5) + static let defaultContentInsets = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: -5) } } diff --git a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainDetails/ViewController/RegisterDomainDetailsViewController.swift b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainDetails/ViewController/RegisterDomainDetailsViewController.swift index 71d8e0bbcf9c..25ea445ed00d 100644 --- a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainDetails/ViewController/RegisterDomainDetailsViewController.swift +++ b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainDetails/ViewController/RegisterDomainDetailsViewController.swift @@ -303,7 +303,7 @@ extension RegisterDomainDetailsViewController { private func showItemSelectionPage(onSelectionAt indexPath: IndexPath, title: String, items: [String]) { var options: [OptionsTableViewOption] = [] for item in items { - let attributedItem = NSAttributedString.init( + let attributedItem = NSAttributedString( string: item, attributes: [.font: WPStyleGuide.tableviewTextFont(), .foregroundColor: UIColor.label] diff --git a/WordPress/Classes/ViewRelated/Jetpack/Login/JetpackConnectionViewModel.swift b/WordPress/Classes/ViewRelated/Jetpack/Login/JetpackConnectionViewModel.swift index 55f525cd02f7..bc8b7e6b7486 100644 --- a/WordPress/Classes/ViewRelated/Jetpack/Login/JetpackConnectionViewModel.swift +++ b/WordPress/Classes/ViewRelated/Jetpack/Login/JetpackConnectionViewModel.swift @@ -293,11 +293,11 @@ class JetpackConnectionService { } extension PluginSlug { - static let jetpack = Self.init(slug: "jetpack/jetpack") + static let jetpack = Self(slug: "jetpack/jetpack") } extension PluginWpOrgDirectorySlug { - static let jetpack = Self.init(slug: "jetpack") + static let jetpack = Self(slug: "jetpack") } enum JetpackConnectionStep: Int, CaseIterable { diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/CommentLargeButton.swift b/WordPress/Classes/ViewRelated/Notifications/Views/CommentLargeButton.swift index c39f4c3d5fe0..bedca37d3425 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/CommentLargeButton.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/CommentLargeButton.swift @@ -41,7 +41,7 @@ final class CommentLargeButton: UIView { addSubview(leaveCommentView) leaveCommentView.displaySettings = .standard - leaveCommentView.pinEdges(to: safeAreaLayoutGuide, insets: UIEdgeInsets.init(top: 14, left: 20, bottom: 8, right: 20)) + leaveCommentView.pinEdges(to: safeAreaLayoutGuide, insets: UIEdgeInsets(top: 14, left: 20, bottom: 8, right: 20)) let divider = SeparatorView.horizontal() addSubview(divider) diff --git a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCellViewModel.swift b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCellViewModel.swift index c5c8927d494b..5292e84c870e 100644 --- a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCellViewModel.swift +++ b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCellViewModel.swift @@ -63,7 +63,7 @@ final class ReaderPostCellViewModel { } private init() { - self.post = ReaderPost.init(entity: NSEntityDescription.entity(forEntityName: ReaderPost.entityName(), in: ContextManager.shared.mainContext)!, insertInto: nil) + self.post = ReaderPost(entity: NSEntityDescription.entity(forEntityName: ReaderPost.entityName(), in: ContextManager.shared.mainContext)!, insertInto: nil) self.avatarURL = URL(string: "https://picsum.photos/120/120.jpg") self.author = "WordPress Mobile Apps" self.time = "9d ago" diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailCommentsHeader.swift b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailCommentsHeader.swift index c3373383d235..11eb02b255d5 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailCommentsHeader.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailCommentsHeader.swift @@ -54,7 +54,7 @@ class ReaderDetailCommentsHeader: UITableViewHeaderFooterView, NibReusable { configureTitle() configureButton() - readerCommentsFollowPresenter = ReaderCommentsFollowPresenter.init( + readerCommentsFollowPresenter = ReaderCommentsFollowPresenter( post: post, delegate: self, presentingViewController: presentingViewController @@ -99,7 +99,7 @@ private extension ReaderDetailCommentsHeader { followButton.addTarget(self, action: #selector(followButtonTapped), for: .touchUpInside) if isSubscribedComments { - followButton.setImage(UIImage.init(systemName: "bell"), for: .normal) + followButton.setImage(UIImage(systemName: "bell"), for: .normal) followButton.setTitle(nil, for: .normal) } else { followButton.setTitle(Titles.followButton, for: .normal) diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift index c6877374f12b..2f8f8e6f310a 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift @@ -86,7 +86,7 @@ extension ReaderDetailLikesListController: LikesListControllerDelegate { } func showErrorView(title: String, subtitle: String?) { - let stateView = UIHostingView(view: EmptyStateView.init(title, systemImage: "exclamationmark.circle", description: subtitle)) + let stateView = UIHostingView(view: EmptyStateView(title, systemImage: "exclamationmark.circle", description: subtitle)) view.addSubview(stateView) stateView.pinEdges() } diff --git a/WordPress/Classes/ViewRelated/Reader/Theme/ReaderDisplaySettingViewController.swift b/WordPress/Classes/ViewRelated/Reader/Theme/ReaderDisplaySettingViewController.swift index 01e237377d23..fea0515b9df9 100644 --- a/WordPress/Classes/ViewRelated/Reader/Theme/ReaderDisplaySettingViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Theme/ReaderDisplaySettingViewController.swift @@ -302,7 +302,7 @@ extension ReaderDisplaySettingSelectionView { fontSelectionView sizeSelectionView .padding(.horizontal, .DS.Padding.double) - DSButton(title: Strings.doneButton, style: DSButtonStyle.init(emphasis: .primary, size: .large)) { + DSButton(title: Strings.doneButton, style: DSButtonStyle(emphasis: .primary, size: .large)) { viewModel.doneButtonTapped() } .padding(.horizontal, .DS.Padding.double) diff --git a/WordPress/Classes/ViewRelated/Stats/Helpers/StatsDataHelper.swift b/WordPress/Classes/ViewRelated/Stats/Helpers/StatsDataHelper.swift index 42b4892684bb..2200963151b4 100644 --- a/WordPress/Classes/ViewRelated/Stats/Helpers/StatsDataHelper.swift +++ b/WordPress/Classes/ViewRelated/Stats/Helpers/StatsDataHelper.swift @@ -89,7 +89,7 @@ import WordPressShared class func childRowsForItems(_ children: [StatsTagAndCategory]) -> [StatsTotalRowData] { return children.map { - StatsTotalRowData.init(name: $0.name, + StatsTotalRowData(name: $0.name, data: "", icon: StatsDataHelper.tagsAndCategoriesIconForKind($0.kind), showDisclosure: true, diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 1e66e28d7115..eda76d5720cd 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -357,7 +357,7 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { func displayWebViewWithURL(_ url: URL) { let webViewController = WebViewControllerFactory.controllerAuthenticatedWithDefaultAccount(url: url, source: "site_stats_insights") - let navController = UINavigationController.init(rootViewController: webViewController) + let navController = UINavigationController(rootViewController: webViewController) present(navController, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsViewModel.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsViewModel.swift index 92668e999576..26ec96f9fed7 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsViewModel.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsViewModel.swift @@ -563,12 +563,12 @@ private extension SiteStatsInsightsViewModel { var dataRows = [StatsTwoColumnRowData]() - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AllTimeStats.viewsTitle, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AllTimeStats.viewsTitle, leftColumnData: allTimeInsight.viewsCount.abbreviatedString(), rightColumnName: AllTimeStats.visitorsTitle, rightColumnData: allTimeInsight.visitorsCount.abbreviatedString())) - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AllTimeStats.postsTitle, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AllTimeStats.postsTitle, leftColumnData: allTimeInsight.postsCount.abbreviatedString(), rightColumnName: AllTimeStats.bestViewsEverTitle, rightColumnData: allTimeInsight.bestViewsPerDayCount.abbreviatedString())) @@ -638,12 +638,12 @@ private extension SiteStatsInsightsViewModel { var dataRows = [StatsTwoColumnRowData]() - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: TodaysStats.viewsTitle, + dataRows.append(StatsTwoColumnRowData(leftColumnName: TodaysStats.viewsTitle, leftColumnData: todaysStats.viewsCount.abbreviatedString(), rightColumnName: TodaysStats.visitorsTitle, rightColumnData: todaysStats.visitorsCount.abbreviatedString())) - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: TodaysStats.likesTitle, + dataRows.append(StatsTwoColumnRowData(leftColumnName: TodaysStats.likesTitle, leftColumnData: todaysStats.likesCount.abbreviatedString(), rightColumnName: TodaysStats.commentsTitle, rightColumnData: todaysStats.commentsCount.abbreviatedString())) @@ -684,22 +684,22 @@ private extension SiteStatsInsightsViewModel { var dataRows = [StatsTwoColumnRowData]() - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AnnualSiteStats.year, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AnnualSiteStats.year, leftColumnData: annualInsights.year, rightColumnName: AnnualSiteStats.totalPosts, rightColumnData: annualInsights.totalPosts.abbreviatedString())) - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AnnualSiteStats.totalComments, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AnnualSiteStats.totalComments, leftColumnData: annualInsights.totalComments.abbreviatedString(), rightColumnName: AnnualSiteStats.commentsPerPost, rightColumnData: annualInsights.averageComments.abbreviatedString())) - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AnnualSiteStats.totalLikes, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AnnualSiteStats.totalLikes, leftColumnData: annualInsights.totalLikes.abbreviatedString(), rightColumnName: AnnualSiteStats.likesPerPost, rightColumnData: annualInsights.averageLikes.abbreviatedString())) - dataRows.append(StatsTwoColumnRowData.init(leftColumnName: AnnualSiteStats.totalWords, + dataRows.append(StatsTwoColumnRowData(leftColumnName: AnnualSiteStats.totalWords, leftColumnData: annualInsights.totalWords.abbreviatedString(), rightColumnName: AnnualSiteStats.wordsPerPost, rightColumnData: annualInsights.averageWords.abbreviatedString())) diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/StatsMostPopularTimeInsightsCell.swift b/WordPress/Classes/ViewRelated/Stats/Insights/StatsMostPopularTimeInsightsCell.swift index f144a74de2e6..e5c241dc12f1 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/StatsMostPopularTimeInsightsCell.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/StatsMostPopularTimeInsightsCell.swift @@ -208,7 +208,7 @@ extension StatsAnnualAndMostPopularTimeInsight { return nil } - var calendar = Calendar.init(identifier: .gregorian) + var calendar = Calendar(identifier: .gregorian) calendar.locale = Locale.autoupdatingCurrent // Back up mostPopularWeekday by 1 to get correct index for standaloneWeekdaySymbols. @@ -217,7 +217,7 @@ extension StatsAnnualAndMostPopularTimeInsight { } func formattedMostPopularTime() -> String? { - var calendar = Calendar.init(identifier: .gregorian) + var calendar = Calendar(identifier: .gregorian) calendar.locale = Locale.autoupdatingCurrent guard let hour = mostPopularHour.hour, diff --git a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift index 6dffd431dc5f..e063bbef4700 100644 --- a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift @@ -252,7 +252,7 @@ extension SiteStatsPeriodTableViewController: SiteStatsPeriodDelegate { func displayWebViewWithURL(_ url: URL) { let webViewController = WebViewControllerFactory.controllerAuthenticatedWithDefaultAccount(url: url, source: "site_stats_period") - let navController = UINavigationController.init(rootViewController: webViewController) + let navController = UINavigationController(rootViewController: webViewController) present(navController, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodViewModel.swift b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodViewModel.swift index 0f47ce805ca8..ef9f258a4890 100644 --- a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodViewModel.swift +++ b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodViewModel.swift @@ -661,7 +661,7 @@ private extension SiteStatsPeriodViewModel { } func publishedDataRows() -> [StatsTotalRowData] { - return store.getTopPublished()?.publishedPosts.prefix(10).map { StatsTotalRowData.init(name: $0.title.stringByDecodingXMLCharacters(), + return store.getTopPublished()?.publishedPosts.prefix(10).map { StatsTotalRowData(name: $0.title.stringByDecodingXMLCharacters(), data: "", showDisclosure: true, disclosureURL: $0.postURL, diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift index e5fbfc1decfe..60af53149c3f 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift @@ -201,7 +201,7 @@ extension PostStatsTableViewController: PostStatsDelegate { func displayWebViewWithURL(_ url: URL) { let webViewController = WebViewControllerFactory.controllerAuthenticatedWithDefaultAccount(url: url, source: "stats_post_stats") - let navController = UINavigationController.init(rootViewController: webViewController) + let navController = UINavigationController(rootViewController: webViewController) present(navController, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift index b6cfceb5a876..8551a242a978 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift @@ -271,7 +271,7 @@ extension SiteStatsDetailTableViewController: SiteStatsDetailsDelegate { func displayWebViewWithURL(_ url: URL) { let webViewController = WebViewControllerFactory.controllerAuthenticatedWithDefaultAccount(url: url, source: "site_stats_detail") - let navController = UINavigationController.init(rootViewController: webViewController) + let navController = UINavigationController(rootViewController: webViewController) present(navController, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift index 38272126ad68..5e0812b47cb7 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift @@ -267,7 +267,7 @@ extension SiteStatsInsightsDetailsTableViewController: SiteStatsDetailsDelegate func displayWebViewWithURL(_ url: URL) { let webViewController = WebViewControllerFactory.controllerAuthenticatedWithDefaultAccount(url: url, source: "site_stats_detail") - let navController = UINavigationController.init(rootViewController: webViewController) + let navController = UINavigationController(rootViewController: webViewController) present(navController, animated: true) } diff --git a/WordPress/Classes/ViewRelated/Stats/StatsLikesListViewController.swift b/WordPress/Classes/ViewRelated/Stats/StatsLikesListViewController.swift index 127fc8b2ab7d..7567964e62e3 100644 --- a/WordPress/Classes/ViewRelated/Stats/StatsLikesListViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/StatsLikesListViewController.swift @@ -94,7 +94,7 @@ extension StatsLikesListViewController: LikesListControllerDelegate { } func showErrorView(title: String, subtitle: String?) { - let stateView = UIHostingView(view: EmptyStateView.init(title, systemImage: "exclamationmark.circle", description: subtitle)) + let stateView = UIHostingView(view: EmptyStateView(title, systemImage: "exclamationmark.circle", description: subtitle)) view.addSubview(stateView) stateView.pinEdges() } diff --git a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift index 24784495fd68..e8d661f39502 100644 --- a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift @@ -82,7 +82,7 @@ class SupportTableViewController: UITableViewController { } func show(from presentingViewController: UIViewController) { - let navigationController = UINavigationController.init(rootViewController: self) + let navigationController = UINavigationController(rootViewController: self) if WPDeviceIdentification.isiPad() { navigationController.modalTransitionStyle = .crossDissolve @@ -94,7 +94,7 @@ class SupportTableViewController: UITableViewController { // TODO: Refactor this method to use the general `show(from:)` method func showFromTabBar() { - let navigationController = UINavigationController.init(rootViewController: self) + let navigationController = UINavigationController(rootViewController: self) if WPDeviceIdentification.isiPad() { navigationController.modalTransitionStyle = .crossDissolve diff --git a/WordPress/Classes/ViewRelated/Support/SupportTableViewControllerConfiguration.swift b/WordPress/Classes/ViewRelated/Support/SupportTableViewControllerConfiguration.swift index 992466e03810..e09973233a19 100644 --- a/WordPress/Classes/ViewRelated/Support/SupportTableViewControllerConfiguration.swift +++ b/WordPress/Classes/ViewRelated/Support/SupportTableViewControllerConfiguration.swift @@ -12,7 +12,7 @@ struct SupportTableViewControllerConfiguration { // MARK: Default Configurations static func currentAccountConfiguration() -> Self { - var config = Self.init() + var config = Self() if let account = Self.makeAccount() { config.meHeaderConfiguration = .init(account: account) config.showsLogOutButton = true diff --git a/WordPress/Classes/ViewRelated/Views/BadgeLabel.swift b/WordPress/Classes/ViewRelated/Views/BadgeLabel.swift index bec7c78b2211..13ab1c2f1a3a 100644 --- a/WordPress/Classes/ViewRelated/Views/BadgeLabel.swift +++ b/WordPress/Classes/ViewRelated/Views/BadgeLabel.swift @@ -37,7 +37,7 @@ class BadgeLabel: UILabel { // MARK: Padding override func drawText(in rect: CGRect) { - let insets = UIEdgeInsets.init(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding) + let insets = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding) super.drawText(in: rect.inset(by: insets)) } From d575c7549ec2de5f0ea4b0fc84f7adf8bebc4bda Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 21 May 2026 15:56:29 +1000 Subject: [PATCH 2/2] Fix inaccurate comment 24:59:59 -> 23:59:59 Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift b/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift index 1b04c3a60417..dd80b26b4b8c 100644 --- a/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift +++ b/WordPress/Classes/Utility/BackgroundTasks/WeeklyRoundupBackgroundTask.swift @@ -367,7 +367,7 @@ class WeeklyRoundupBackgroundTask: BackgroundTask { direction: .backward) ?? Date() // The run date is when the task is scheduled to run, but the period end date is actually - // the previous day at 24:59:59. + // the previous day at 23:59:59. let periodEndDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: runDate)!.addingTimeInterval(TimeInterval(-1)) return periodEndDate