Skip to content

Commit

Permalink
Update SwiftLint and SwiftFormat (#613)
Browse files Browse the repository at this point in the history
* Update Swift version used by SwiftFormat

* Update SwiftLint version

* Rely on new virtual 'all' rule in SwiftLint

* Enable SwiftLint rule 'direct_return' rule and fix all violations

* Enable SwiftLint rule 'shorthand_optional_binding' rule and fix all violations

* Enable SwiftLint rule 'blanket_disable_command' rule and fix all violations
  • Loading branch information
SimplyDanny authored Apr 23, 2023
1 parent a22e872 commit d9bd0f3
Show file tree
Hide file tree
Showing 24 changed files with 90 additions and 272 deletions.
2 changes: 1 addition & 1 deletion .swift-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.3.1
5.8
257 changes: 44 additions & 213 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,219 +10,50 @@ excluded:

## Active rules

only_rules:
- accessibility_label_for_image
# - anonymous_argument_in_multiline_closure
- anyobject_protocol
- array_init
- attributes
# - balanced_xctest_lifecycle
- block_based_kvo
- capture_variable
- class_delegate_protocol
- closing_brace
- closure_body_length
- closure_end_indentation
- closure_parameter_position
- closure_spacing
- collection_alignment
- colon
- comma
- comma_inheritance
- comment_spacing
- compiler_protocol_init
- computed_accessors_order
- conditional_returns_on_newline
- contains_over_filter_count
- contains_over_filter_is_empty
- contains_over_first_not_nil
- contains_over_range_nil_comparison
- control_statement
- convenience_type
- custom_rules
- cyclomatic_complexity
- deployment_target
- discarded_notification_center_observer
- discouraged_assert
- discouraged_direct_init
# - discouraged_none_name
# - discouraged_object_literal
- discouraged_optional_boolean
# - discouraged_optional_collection # Too many false positives in implementations of system protocols.
- duplicated_key_in_dictionary_literal
- duplicate_enum_cases
- duplicate_imports
- dynamic_inline
- empty_collection_literal
# - empty_count # Too many false positives for variables named 'count'.
- empty_enum_arguments
- empty_parameters
- empty_parentheses_with_trailing_closure
- empty_string
- empty_xctest_method
- enum_case_associated_values_count
- expiring_todo
# - explicit_acl
# - explicit_enum_raw_value # Disabled in favor of 'redundant_string_enum_value'.
- explicit_init
- explicit_self
# - explicit_top_level_acl
# - explicit_type_interface
# - extension_access_modifier
- fallthrough
- fatal_error_message
# - file_header
# - file_length
# - file_name
- file_name_no_space
# - file_types_order
- first_where
- flatmap_over_map_reduce
- for_where
# - force_cast
# - force_try
# - force_unwrapping
# - function_body_length
- function_default_parameter_at_end
- function_parameter_count
- generic_type_name
- ibinspectable_in_extension
- identical_operands
- identifier_name
- implicit_getter
- implicit_return
# - implicitly_unwrapped_optional
- inclusive_language
# - indentation_width
- inert_defer
- is_disjoint
- joined_default_parameter
- large_tuple
- last_where
- leading_whitespace
# - legacy_objc_type
- legacy_cggeometry_functions
- legacy_constant
- legacy_constructor
- legacy_hashing
- legacy_multiple
- legacy_nsgeometry_functions
- legacy_random
- let_var_whitespace
# - line_length
- literal_expression_end_indentation
- lower_acl_than_parent
- mark
# - missing_docs
- modifier_order
- multiline_arguments
- multiline_arguments_brackets
- multiline_function_chains
- multiline_literal_brackets
- multiline_parameters
- multiline_parameters_brackets
- multiple_closures_with_trailing_closure
- nesting
- nimble_operator
# - no_extension_access_modifier
- no_fallthrough_only
# - no_grouping_extension
- no_space_in_method_call
- notification_center_detachment
- nslocalizedstring_key
- nslocalizedstring_require_bundle
- nsobject_prefer_isequal
# - number_separator # Contradicts with SwiftFormat rule 'decimalgrouping'. There are not many numbers anyway in the source code.
- object_literal
- opening_brace
- operator_usage_whitespace
- operator_whitespace
- optional_enum_case_matching
- orphaned_doc_comment
- overridden_super_call
- override_in_extension
- pattern_matching_keywords
# - prefer_nimble
- prefer_self_in_static_references
- prefer_self_type_over_type_of_self
- prefer_zero_over_explicit_init
# - prefixed_toplevel_constant # Violations are mostly in test code.
- private_action
# - private_outlet
- private_over_fileprivate
- private_subject
- private_unit_test
# - prohibited_interface_builder
# - prohibited_super_call
- protocol_property_accessors_order
- quick_discouraged_call
- quick_discouraged_focused_test
- quick_discouraged_pending_test
- raw_value_for_camel_cased_codable_enum
- reduce_boolean
- reduce_into
- redundant_discardable_let
- redundant_nil_coalescing
- redundant_objc_attribute
- redundant_optional_initialization
- redundant_set_access_control
- redundant_string_enum_value
- redundant_type_annotation
- redundant_void_return
# - required_deinit
- required_enum_case
- return_arrow_whitespace
- return_value_from_void_function
- self_in_property_initialization
- shorthand_operator
- single_test_class
- sorted_first_last
# - sorted_imports # Managed by SwiftFormat.
- statement_position
- static_operator
- strict_fileprivate
- strong_iboutlet
- superfluous_disable_command
- switch_case_alignment
- switch_case_on_newline
- syntactic_sugar
- test_case_accessibility
- todo
- toggle_bool
- trailing_closure
- trailing_comma
- trailing_newline
- trailing_semicolon
- trailing_whitespace
# - type_body_length
# - type_contents_order
- type_name
- unavailable_condition
- unavailable_function
- unneeded_break_in_switch
- unneeded_parentheses_in_closure_argument
# - unowned_variable_capture
- untyped_error_in_catch
- unused_capture_list
- unused_closure_parameter
- unused_control_flow_label
- unused_declaration
- unused_enumerated
- unused_import
- unused_optional_binding
- unused_setter_value
- valid_ibinspectable
- vertical_parameter_alignment
- vertical_parameter_alignment_on_call
- vertical_whitespace
# - vertical_whitespace_between_cases # Additional whitespace not needed because of visible indentation.
- vertical_whitespace_closing_braces
- vertical_whitespace_opening_braces
- void_return
- weak_delegate
- xct_specific_matcher
- xctfail_message
- yoda_condition
opt_in_rules:
- all

disabled_rules:
- anonymous_argument_in_multiline_closure
- balanced_xctest_lifecycle
- discouraged_none_name
- discouraged_object_literal
- discouraged_optional_collection # Too many false positives in implementations of system protocols.
- empty_count # Too many false positives for variables named 'count'.
- explicit_acl
- explicit_enum_raw_value # Disabled in favor of 'redundant_string_enum_value'.
- explicit_top_level_acl
- explicit_type_interface
- extension_access_modifier
- file_header
- file_length
- file_name
- file_types_order
- force_cast
- force_try
- force_unwrapping
- function_body_length
- implicitly_unwrapped_optional
- indentation_width
- legacy_objc_type
- line_length
- missing_docs
- no_extension_access_modifier
- no_grouping_extension
- no_magic_numbers # Causes a lot of violations in tests.
- number_separator # Contradicts with SwiftFormat rule 'decimalgrouping'. There are not many numbers anyway in the source code.
- prefer_nimble
- prefixed_toplevel_constant # Violations are mostly in test code.
- private_outlet
- prohibited_interface_builder
- prohibited_super_call
- required_deinit
- self_binding
- sorted_imports # Managed by SwiftFormat.
- type_body_length
- type_contents_order
- unowned_variable_capture
- vertical_whitespace_between_cases # Additional whitespace not needed because of visible indentation.

## Configuration for specific rules

Expand Down
5 changes: 1 addition & 4 deletions pass/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

lazy var passcodeLockPresenter: PasscodeLockPresenter = {
let presenter = PasscodeLockPresenter(mainWindow: self.window)
return presenter
}()
lazy var passcodeLockPresenter: PasscodeLockPresenter = .init(mainWindow: self.window)

func application(_: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Expand Down
5 changes: 1 addition & 4 deletions pass/Controllers/AboutRepositoryTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController {
private static let VALUE_NOT_AVAILABLE = "ValueNotAvailable".localize()

private var needRefresh = false
private var indicator: UIActivityIndicatorView = {
let indicator = UIActivityIndicatorView(style: .medium)
return indicator
}()
private var indicator: UIActivityIndicatorView = .init(style: .medium)

private let passwordStore = PasswordStore.shared

Expand Down
2 changes: 1 addition & 1 deletion pass/Controllers/AdvancedSettingsTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class AdvancedSettingsTableViewController: UITableViewController {
present(alert, animated: true, completion: nil)
} else if tableView.cellForRow(at: indexPath) == clearSuggestionsTableViewCell {
ASCredentialIdentityStore.shared.removeAllCredentialIdentities { _, error in
if let error = error {
if let error {
SVProgressHUD.showError(withStatus: "FailedToClearQuickTypeSuggestions".localize(error))
SVProgressHUD.dismiss(withDelay: 1)
} else {
Expand Down
4 changes: 2 additions & 2 deletions pass/Controllers/PGPKeyFIleImportTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,10 @@ extension PGPKeyFileImportTableViewController: PGPKeyImporter {
}

func importKeys() throws {
if let publicKey = publicKey {
if let publicKey {
try KeyFileManager.PublicPGP.importKey(from: publicKey)
}
if let privateKey = privateKey {
if let privateKey {
try KeyFileManager.PrivatePGP.importKey(from: privateKey)
}
}
Expand Down
4 changes: 2 additions & 2 deletions pass/Controllers/PGPKeyURLImportTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ extension PGPKeyURLImportTableViewController: PGPKeyImporter {
}

func importKeys() throws {
if let pgpPrivateKeyURL = pgpPrivateKeyURL {
if let pgpPrivateKeyURL {
Defaults.pgpPrivateKeyURL = pgpPrivateKeyURL
try KeyFileManager.PrivatePGP.importKey(from: pgpPrivateKeyURL)
}

if let pgpPublicKeyURL = pgpPublicKeyURL {
if let pgpPublicKeyURL {
Defaults.pgpPublicKeyURL = pgpPublicKeyURL
try KeyFileManager.PublicPGP.importKey(from: pgpPublicKeyURL)
}
Expand Down
11 changes: 4 additions & 7 deletions pass/Controllers/PasswordDetailTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
// preserve path so it can be reloaded even if the passwordEntity is deleted during the update process
private var passwordPath: String?

private lazy var editUIBarButtonItem: UIBarButtonItem = {
let uiBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(pressEdit))
return uiBarButtonItem
}()
private lazy var editUIBarButtonItem: UIBarButtonItem = .init(barButtonSystemItem: .edit, target: self, action: #selector(pressEdit))

private struct TableSection {
var type: PasswordDetailTableViewControllerSectionType
Expand Down Expand Up @@ -112,7 +109,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
}

private func decryptThenShowPasswordLocalKey(keyID: String? = nil) {
guard let passwordEntity = passwordEntity else {
guard let passwordEntity else {
Utils.alert(title: "CannotShowPassword".localize(), message: "PasswordDoesNotExist".localize(), controller: self, completion: {
self.navigationController!.popViewController(animated: true)
})
Expand Down Expand Up @@ -259,7 +256,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni

// main section
section = TableSection(type: .main)
let password = self.password!
let password = password!
if let username = password.username {
section.item.append(Constants.USERNAME_KEYWORD => username)
}
Expand Down Expand Up @@ -607,7 +604,7 @@ extension PasswordDetailTableViewController {
}

private func decryptThenShowPasswordYubiKey() {
guard let passwordEntity = passwordEntity else {
guard let passwordEntity else {
handleError(error: AppError.other(message: "PasswordDoesNotExist"))
return
}
Expand Down
4 changes: 2 additions & 2 deletions pass/Controllers/PasswordNavigationViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ class PasswordNavigationViewController: UIViewController {
if gesture.state == UIGestureRecognizer.State.began {
let touchPoint = gesture.location(in: tableView)
if let indexPath = tableView.indexPathForRow(at: touchPoint) {
guard let dataSource = dataSource else {
guard let dataSource else {
return
}
let passwordTableEntry = dataSource.getPasswordTableEntry(at: indexPath)
Expand Down Expand Up @@ -283,7 +283,7 @@ class PasswordNavigationViewController: UIViewController {
extension PasswordNavigationViewController: UITableViewDelegate {
func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
guard let dataSource = dataSource else {
guard let dataSource else {
return
}
let entry = dataSource.getPasswordTableEntry(at: indexPath)
Expand Down
2 changes: 1 addition & 1 deletion pass/Controllers/QRScannerController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class QRScannerController: UIViewController, AVCaptureMetadataOutputObjectsDeleg
// Initialize QR Code Frame to highlight the QR code
qrCodeFrameView = UIView()

if let qrCodeFrameView = qrCodeFrameView {
if let qrCodeFrameView {
qrCodeFrameView.layer.borderColor = UIColor.green.cgColor
qrCodeFrameView.layer.borderWidth = 2
view.addSubview(qrCodeFrameView)
Expand Down
Loading

0 comments on commit d9bd0f3

Please sign in to comment.