Mark classes as final that can be marked as final.

This commit is contained in:
Brent Simmons
2025-01-25 11:01:12 -08:00
parent 48fc807f94
commit 5651764907
155 changed files with 172 additions and 172 deletions

View File

@@ -13,7 +13,7 @@ import CloudKit
import RSCore
import Articles
class CloudKitAcountZoneDelegate: CloudKitZoneDelegate {
final class CloudKitAcountZoneDelegate: CloudKitZoneDelegate {
struct UnclaimedFeed {
let url: URL

View File

@@ -16,7 +16,7 @@ import SyncDatabase
import Articles
import ArticlesDatabase
class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate {
final class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate {
private var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "CloudKit")

View File

@@ -10,7 +10,7 @@ import Foundation
import os.log
import RSCore
class CloudKitReceiveStatusOperation: MainThreadOperation {
final class CloudKitReceiveStatusOperation: MainThreadOperation {
private var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "CloudKit")

View File

@@ -11,7 +11,7 @@ import Foundation
import os.log
import RSCore
class CloudKitRemoteNotificationOperation: MainThreadOperation {
final class CloudKitRemoteNotificationOperation: MainThreadOperation {
private var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "CloudKit")

View File

@@ -13,7 +13,7 @@ import RSCore
import RSWeb
import SyncDatabase
class CloudKitSendStatusOperation: MainThreadOperation {
final class CloudKitSendStatusOperation: MainThreadOperation {
private var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "CloudKit")
private let blockSize = 150

View File

@@ -11,7 +11,7 @@ import Parser
import RSWeb
import RSCore
class FeedFinder {
final class FeedFinder {
static func find(url: URL, completion: @escaping (Result<Set<FeedSpecifier>, Error>) -> Void) {
Downloader.shared.download(url) { (data, response, error) in

View File

@@ -11,7 +11,7 @@ import Parser
private let feedURLWordsToMatch = ["feed", "xml", "rss", "atom", "json"]
class HTMLFeedFinder {
final class HTMLFeedFinder {
var feedSpecifiers: Set<FeedSpecifier> {
return Set(feedSpecifiersDictionary.values)

View File

@@ -12,7 +12,7 @@ import RSWeb
import RSCore
import Secrets
class FeedlyAddExistingFeedOperation: FeedlyOperation, FeedlyOperationDelegate, FeedlyCheckpointOperationDelegate {
final class FeedlyAddExistingFeedOperation: FeedlyOperation, FeedlyOperationDelegate, FeedlyCheckpointOperationDelegate {
private let operationQueue = MainThreadOperationQueue()
var addCompletionHandler: ((Result<Void, Error>) -> Void)?

View File

@@ -13,7 +13,7 @@ import RSWeb
import RSCore
import Secrets
class FeedlyAddNewFeedOperation: FeedlyOperation, FeedlyOperationDelegate, FeedlySearchOperationDelegate, FeedlyCheckpointOperationDelegate {
final class FeedlyAddNewFeedOperation: FeedlyOperation, FeedlyOperationDelegate, FeedlySearchOperationDelegate, FeedlyCheckpointOperationDelegate {
private let operationQueue = MainThreadOperationQueue()
private let folder: Folder

View File

@@ -11,7 +11,7 @@ import os.log
import RSCore
import RSWeb
class FeedlyDownloadArticlesOperation: FeedlyOperation {
final class FeedlyDownloadArticlesOperation: FeedlyOperation {
private let account: Account
private let log: OSLog

View File

@@ -14,7 +14,7 @@ import Secrets
///
/// Typically, it pages through the article ids of the global.all stream.
/// When all the article ids are collected, it is the responsibility of another operation to download them when appropriate.
class FeedlyGetUpdatedArticleIdsOperation: FeedlyOperation, FeedlyEntryIdentifierProviding {
final class FeedlyGetUpdatedArticleIdsOperation: FeedlyOperation, FeedlyEntryIdentifierProviding {
private let account: Account
private let resource: FeedlyResourceId

View File

@@ -15,7 +15,7 @@ import Secrets
/// Typically, it pages through the article ids of the global.all stream.
/// As the article ids are collected, a default read status is created for each.
/// So this operation has side effects *for the entire account* it operates on.
class FeedlyIngestStreamArticleIdsOperation: FeedlyOperation {
final class FeedlyIngestStreamArticleIdsOperation: FeedlyOperation {
private let account: Account
private let resource: FeedlyResourceId

View File

@@ -18,7 +18,7 @@ protocol FeedlySearchOperationDelegate: AnyObject {
/// Find one and only one feed for a given query (usually, a URL).
/// What happens when a feed is found for the URL is delegated to the `searchDelegate`.
class FeedlySearchOperation: FeedlyOperation {
final class FeedlySearchOperation: FeedlyOperation {
let query: String
let locale: Locale

View File

@@ -11,7 +11,7 @@ import RSWeb
@testable import Account
import Secrets
class AccountCredentialsTest: XCTestCase {
final class AccountCredentialsTest: XCTestCase {
private var account: Account!

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class AccountFeedbinFolderContentsSyncTest: XCTestCase {
final class AccountFeedbinFolderContentsSyncTest: XCTestCase {
override func setUp() {
}

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class AccountFeedbinFolderSyncTest: XCTestCase {
final class AccountFeedbinFolderSyncTest: XCTestCase {
override func setUp() {
}

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class AccountFeedbinSyncTest: XCTestCase {
final class AccountFeedbinSyncTest: XCTestCase {
override func setUp() {
}

View File

@@ -10,9 +10,9 @@ import XCTest
@testable import Account
import RSCore
class FeedlyCheckpointOperationTests: XCTestCase {
final class FeedlyCheckpointOperationTests: XCTestCase {
class TestDelegate: FeedlyCheckpointOperationDelegate {
final class TestDelegate: FeedlyCheckpointOperationDelegate {
var didReachCheckpointExpectation: XCTestExpectation?

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class FeedlyCollectionParserTests: XCTestCase {
final class FeedlyCollectionParserTests: XCTestCase {
func testParsing() {
let collection = FeedlyCollection(feeds: [], label: "Test Collection", id: "test/collection/1")

View File

@@ -10,7 +10,7 @@ import XCTest
@testable import Account
import RSCore
class FeedlyCreateFeedsForCollectionFoldersOperationTests: XCTestCase {
final class FeedlyCreateFeedsForCollectionFoldersOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()
@@ -27,7 +27,7 @@ class FeedlyCreateFeedsForCollectionFoldersOperationTests: XCTestCase {
super.tearDown()
}
class FeedsAndFoldersProvider: FeedlyFeedsAndFoldersProviding {
final class FeedsAndFoldersProvider: FeedlyFeedsAndFoldersProviding {
var feedsAndFolders = [([FeedlyFeed], Folder)]()
}

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class FeedlyEntryParserTests: XCTestCase {
final class FeedlyEntryParserTests: XCTestCase {
func testParsing() {
let content = FeedlyEntry.Content(content: "Test Content", direction: .leftToRight)

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class FeedlyFeedParserTests: XCTestCase {
final class FeedlyFeedParserTests: XCTestCase {
func testParsing() {
let name = "Test Feed"

View File

@@ -11,7 +11,7 @@ import XCTest
import os.log
import RSCore
class FeedlyGetCollectionsOperationTests: XCTestCase {
final class FeedlyGetCollectionsOperationTests: XCTestCase {
func testGetCollections() {
let support = FeedlyTestSupport()
@@ -58,7 +58,7 @@ class FeedlyGetCollectionsOperationTests: XCTestCase {
func testGetCollectionsError() {
class TestDelegate: FeedlyOperationDelegate {
final class TestDelegate: FeedlyOperationDelegate {
var errorExpectation: XCTestExpectation?
var error: Error?

View File

@@ -10,7 +10,7 @@ import XCTest
@testable import Account
import RSCore
class FeedlyGetStreamContentsOperationTests: XCTestCase {
final class FeedlyGetStreamContentsOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()

View File

@@ -10,7 +10,7 @@ import XCTest
@testable import Account
import RSCore
class FeedlyGetStreamIdsOperationTests: XCTestCase {
final class FeedlyGetStreamIdsOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()

View File

@@ -11,7 +11,7 @@ import XCTest
import RSCore
import Secrets
class FeedlyLogoutOperationTests: XCTestCase {
final class FeedlyLogoutOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()
@@ -36,7 +36,7 @@ class FeedlyLogoutOperationTests: XCTestCase {
return (accessToken, refreshToken)
}
class TestFeedlyLogoutService: FeedlyLogoutService {
final class TestFeedlyLogoutService: FeedlyLogoutService {
var mockResult: Result<Void, Error>?
var logoutExpectation: XCTestExpectation?
@@ -123,7 +123,7 @@ class FeedlyLogoutOperationTests: XCTestCase {
}
}
class TestLogoutDelegate: FeedlyOperationDelegate {
final class TestLogoutDelegate: FeedlyOperationDelegate {
var error: Error?
var didFailExpectation: XCTestExpectation?

View File

@@ -10,7 +10,7 @@ import XCTest
@testable import Account
import RSCore
class FeedlyMirrorCollectionsAsFoldersOperationTests: XCTestCase {
final class FeedlyMirrorCollectionsAsFoldersOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()
@@ -27,7 +27,7 @@ class FeedlyMirrorCollectionsAsFoldersOperationTests: XCTestCase {
super.tearDown()
}
class CollectionsProvider: FeedlyCollectionProviding {
final class CollectionsProvider: FeedlyCollectionProviding {
var collections = [
FeedlyCollection(feeds: [], label: "One", id: "collections/1"),
FeedlyCollection(feeds: [], label: "Two", id: "collections/2")
@@ -105,7 +105,7 @@ class FeedlyMirrorCollectionsAsFoldersOperationTests: XCTestCase {
XCTAssertTrue(removeFolders.feedsAndFolders.isEmpty)
}
class CollectionsAndFeedsProvider: FeedlyCollectionProviding {
final class CollectionsAndFeedsProvider: FeedlyCollectionProviding {
var feedsForCollectionOne = [
FeedlyFeed(id: "feed/1", title: "Feed One", updated: nil, website: nil),
FeedlyFeed(id: "feed/2", title: "Feed Two", updated: nil, website: nil)

View File

@@ -11,7 +11,7 @@ import XCTest
import RSWeb
import RSCore
class FeedlyOperationTests: XCTestCase {
final class FeedlyOperationTests: XCTestCase {
enum TestOperationError: Error, Equatable {
case mockError

View File

@@ -11,7 +11,7 @@ import XCTest
import Parser
import RSCore
class FeedlyOrganiseParsedItemsByFeedOperationTests: XCTestCase {
final class FeedlyOrganiseParsedItemsByFeedOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()

View File

@@ -12,7 +12,7 @@ import RSWeb
import RSCore
import Secrets
class FeedlyRefreshAccessTokenOperationTests: XCTestCase {
final class FeedlyRefreshAccessTokenOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()
@@ -29,7 +29,7 @@ class FeedlyRefreshAccessTokenOperationTests: XCTestCase {
super.tearDown()
}
class TestRefreshTokenService: OAuthAccessTokenRefreshing {
final class TestRefreshTokenService: OAuthAccessTokenRefreshing {
var mockResult: Result<OAuthAuthorizationGrant, Error>?
var refreshAccessTokenExpectation: XCTestExpectation?
var parameterTester: ((String, OAuthAuthorizationClient) -> Void)?
@@ -71,7 +71,7 @@ class FeedlyRefreshAccessTokenOperationTests: XCTestCase {
XCTAssertTrue(refresh.isCanceled)
}
class TestRefreshTokenDelegate: FeedlyOperationDelegate {
final class TestRefreshTokenDelegate: FeedlyOperationDelegate {
var error: Error?
var didFailExpectation: XCTestExpectation?

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class FeedlyResourceIdTests: XCTestCase {
final class FeedlyResourceIdTests: XCTestCase {
func testFeedResourceId() {
let expectedUrl = "http://ranchero.com/blog/atom.xml"

View File

@@ -12,7 +12,7 @@ import SyncDatabase
import Articles
import RSCore
class FeedlySendArticleStatusesOperationTests: XCTestCase {
final class FeedlySendArticleStatusesOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()

View File

@@ -8,7 +8,7 @@
import Foundation
class FeedlyMockResponseProvider: TestTransportMockResponseProviding {
final class FeedlyMockResponseProvider: TestTransportMockResponseProviding {
let subdirectory: String

View File

@@ -10,7 +10,7 @@ import XCTest
@testable import Account
import RSCore
class FeedlySyncStreamContentsOperationTests: XCTestCase {
final class FeedlySyncStreamContentsOperationTests: XCTestCase {
private var account: Account!
private let support = FeedlyTestSupport()

View File

@@ -13,7 +13,7 @@ import Secrets
import os.log
import SyncDatabase
class FeedlyTestSupport {
final class FeedlyTestSupport {
var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "FeedlyTests")
var accessToken = Credentials(type: .oauthAccessToken, username: "Test", secret: "t3st-access-tok3n")
var refreshToken = Credentials(type: .oauthRefreshToken, username: "Test", secret: "t3st-refresh-tok3n")
@@ -54,7 +54,7 @@ class FeedlyTestSupport {
return TestDatabaseContainer()
}
class TestDatabaseContainer {
final class TestDatabaseContainer {
private let path: String
private(set) var database: SyncDatabase!

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class FeedlyTextSanitizationTests: XCTestCase {
final class FeedlyTextSanitizationTests: XCTestCase {
func testRTLSanitization() {

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import Account
class TestMarkArticlesService: FeedlyMarkArticlesService {
final class TestMarkArticlesService: FeedlyMarkArticlesService {
var didMarkExpectation: XCTestExpectation?
var parameterTester: ((Set<String>, FeedlyMarkAction) -> Void)?

View File

@@ -11,7 +11,7 @@ import RSWeb
@testable import Account
class TestAccountManager {
final class TestAccountManager {
static let shared = TestAccountManager()

View File

@@ -9,7 +9,7 @@
#if os(macOS)
import Cocoa
public class RSAppMovementMonitor: NSObject {
public final class RSAppMovementMonitor: NSObject {
// If provided, the handler will be consulted when the app is moved.
// Return true to indicate that the default handler should be invoked.

View File

@@ -8,7 +8,7 @@
#if os(macOS)
import AppKit
class RSDarkModeAdaptingToolbarButton: NSButton {
final class RSDarkModeAdaptingToolbarButton: NSButton {
// Clients probably should not bother using this class unless they want
// to force the template in dark mode, but if you are using this in a more
// general context where you want to control and/or override it on a

View File

@@ -8,7 +8,7 @@
#if os(macOS)
import AppKit
public class RSToolbarItem: NSToolbarItem {
public final class RSToolbarItem: NSToolbarItem {
override public func validate() {

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import RSCore
class MacroProcessorTests: XCTestCase {
final class MacroProcessorTests: XCTestCase {
let substitutions = ["one": "1", "two": "2"]
func testMacroProcessor() {

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import RSCore
class MainThreadOperationTests: XCTestCase {
final class MainThreadOperationTests: XCTestCase {
func testSingleOperation() {
let queue = MainThreadOperationQueue()

View File

@@ -8,7 +8,7 @@
import XCTest
class StringRSCore: XCTestCase {
final class StringRSCore: XCTestCase {
func testCollapsingWhitespace() {

View File

@@ -33,7 +33,7 @@ public enum ReachabilityError: Error {
case unableToGetFlags(Int32)
}
public class Reachability {
public final class Reachability {
/// Returns true if the internet is reachable.
///

View File

@@ -8,7 +8,7 @@
import XCTest
class DictionaryTests: XCTestCase {
final class DictionaryTests: XCTestCase {
func testSimpleQueryString() {

View File

@@ -9,7 +9,7 @@
import XCTest
@testable import RSWeb
class RSWebTests: XCTestCase {
final class RSWebTests: XCTestCase {
func testExample() {
// This is an example of a functional test case.

View File

@@ -8,7 +8,7 @@
import XCTest
class StringTests: XCTestCase {
final class StringTests: XCTestCase {
func testHTMLEscaping() {