Skip to content

Instantly share code, notes, and snippets.

@aplr
Created June 13, 2022 13:10
Show Gist options
  • Save aplr/5877fa9fbc3ce32229ccca56476c6981 to your computer and use it in GitHub Desktop.
Save aplr/5877fa9fbc3ce32229ccca56476c6981 to your computer and use it in GitHub Desktop.
# The whitelist_rules configuration also includes rules that are enabled by default to provide a good overview of all rules.
only_rules:
- attributes
- anyobject_protocol
# Prefer using AnyObject over class for class-only protocols.
- array_init
# Prefer using Array(seq) over seq.map { $0 } to convert a sequence into an Array.
- block_based_kvo
# Prefer the new block based KVO API with keypaths when using Swift 3.2 or later.
- class_delegate_protocol
# Delegate protocols should be class-only so they can be weakly referenced.
- closing_brace
# Closing brace with closing parenthesis should not have any whitespaces in the middle.
- closure_body_length
# Closure bodies should not span too many lines.
- closure_end_indentation
# Closure end should have the same indentation as the line that started it.
- closure_parameter_position
# Closure parameters should be on the same line as opening brace.
- closure_spacing
# Closure expressions should have a single space inside each brace.
- collection_alignment
# All elements in a collection literal should be vertically aligned
- colon
# Colons should be next to the identifier when specifying a type and next to the key in dictionary literals.
- comma
# There should be no space before and one after any comma.
- compiler_protocol_init
# The initializers declared in compiler protocols such as ExpressibleByArrayLiteral shouldn't be called directly.
- computed_accessors_order
# Getter and setters in computed properties and subscripts should be in a consistent order.
- conditional_returns_on_newline
# Conditional statements should always return on the next line
- contains_over_filter_count
# Prefer contains over comparing filter(where:).count to 0.
- contains_over_filter_is_empty
# Prefer contains over using filter(where:).isEmpty
- contains_over_first_not_nil
# Prefer `contains` over `first(where:) != nil`
- contains_over_range_nil_comparison
# Prefer contains over range(of:) != nil and range(of:) == nil
- control_statement
# if, for, guard, switch, while, and catch statements shouldn't unnecessarily wrap their conditionals or arguments in parentheses.
- convenience_type
# Types used for hosting only static members should be implemented as a caseless enum to avoid instantiation.
- cyclomatic_complexity
# Complexity of function bodies should be limited.
- discarded_notification_center_observer
# When registering for a notification using a block, the opaque observer that is returned should be stored so it can be removed later.
- discouraged_direct_init
# Discouraged direct initialization of types that can be harmful. e.g. UIDevice(), Bundle()
- discouraged_optional_boolean
# Prefer non-optional booleans over optional booleans.
- discouraged_optional_collection
# Prefer empty collection over optional collection.
- duplicate_imports
# Duplicate Imports
- dynamic_inline
# Avoid using 'dynamic' and '@inline(__always)' together.
- empty_collection_literal
# Prefer checking isEmpty over comparing collection to an empty array or dictionary literal.
- empty_count
# Prefer checking `isEmpty` over comparing `count` to zero.
- empty_enum_arguments
# Arguments can be omitted when matching enums with associated types if they are not used.
- empty_parameters
# Prefer () -> over Void ->.
- empty_parentheses_with_trailing_closure
# When using trailing closures, empty parentheses should be avoided after the method call.
- empty_string
# Prefer checking `isEmpty` over comparing string to an empty string literal.
- empty_xctest_method
# Empty XCTest method should be avoided.
- enum_case_associated_values_count
# Number of associated values in an enum case should be low
- explicit_init
# Explicitly calling .init() should be avoided.
- fatal_error_message
# A fatalError call should have a message.
- file_length
# Files should not span too many lines.
# See file_length below for the exact configuration.
- first_where
# Prefer using ``.first(where:)`` over ``.filter { }.first` in collections.
- flatmap_over_map_reduce
# Prefer flatMap over map followed by reduce([], +).
- for_where
# where clauses are preferred over a single if inside a for.
- force_cast
# Force casts should be avoided.
- force_try
# Force tries should be avoided.
- force_unwrapping
# Force unwrapping should be avoided.
- function_body_length
# Functions bodies should not span too many lines.
# See function_body_length below for the exact configuration.
- function_parameter_count
# Number of function parameters should be low.
# See function_parameter_count below for the exact configuration.
- generic_type_name
# Generic type name should only contain alphanumeric characters, start with an uppercase character and span between 1 and 20 characters in length.
- identical_operands
# Comparing two identical operands is likely a mistake.
- identifier_name
# Identifier names should only contain alphanumeric characters and start with a lowercase character or should only contain capital letters.
# In an exception to the above, variable names may start with a capital letter when they are declared static and immutable.
# Variable names should not be too long or too short. Excluded names are listed below.
- implicit_getter
# Computed read-only properties and subscripts should avoid using the get keyword.
- implicit_return
# Prefer implicit returns in closures.
- implicitly_unwrapped_optional
# Implicitly unwrapped optionals should be avoided when possible.
- inclusive_language
# Identifiers should use inclusive language that avoids discrimination against groups of people based on race, gender, or socioeconomic status
- inert_defer
# If defer is at the end of its parent scope, it will be executed right where it is anyway.
- is_disjoint
# Prefer using Set.isDisjoint(with:) over Set.intersection(_:).isEmpty.
- joined_default_parameter
# Discouraged explicit usage of the default separator.
- large_tuple
# Tuples shouldn't have too many members. Create a custom type instead.
# See large_tuple below for the exact configuration.
- last_where
# Prefer using .last(where:) over .filter { }.last in collections.
- leading_whitespace
# Files should not contain leading whitespace.
- legacy_cggeometry_functions
# CGGeometry: Struct extension properties and methods are preferred over legacy functions
- legacy_constant
# Struct-scoped constants are preferred over legacy global constants (CGSize, CGRect, NSPoint, ...).
- legacy_constructor
# Swift constructors are preferred over legacy convenience functions (CGPointMake, CGSizeMake, UIOffsetMake, ...).
- legacy_hashing
# Prefer using the hash(into:) function instead of overriding hashValue
- legacy_multiple
# Prefer using the isMultiple(of:) function instead of using the remainder operator (%).
- legacy_nsgeometry_functions
# Struct extension properties and methods are preferred over legacy functions
- legacy_random
# Prefer using type.random(in:) over legacy functions.
- line_length
# Lines should not span too many characters.
# See line_length below for the exact configuration.
- literal_expression_end_indentation
# Array and dictionary literal end should have the same indentation as the line that started it.
- lower_acl_than_parent
# Ensure definitions have a lower access control level than their enclosing parent
- mark
# MARK comment should be in valid format. e.g. '// MARK: ...' or '// MARK: - ...'
- missing_docs
# Declarations should be documented.
- modifier_order
# Modifier order should be consistent.
- multiline_arguments
# Arguments should be either on the same line, or one per line.
- multiline_function_chains
# Chained function calls should be either on the same line, or one per line.
- multiline_literal_brackets
# Multiline literals should have their surrounding brackets in a new line.
- multiline_parameters
# Functions and methods parameters should be either on the same line, or one per line.
- nesting
# Types and functions should only be nested to a certain level deep.
# See nesting below for the exact configuration.
- nimble_operator
# Prefer Nimble operator overloads over free matcher functions.
- no_fallthrough_only
# Fallthroughs can only be used if the case contains at least one other statement.
- no_space_in_method_call
# Don’t add a space between the method name and the parentheses.
- notification_center_detachment
# An object should only remove itself as an observer in deinit.
- nslocalizedstring_key
# Static strings should be used as key in NSLocalizedString in order to genstrings work.
- nsobject_prefer_isequal
# NSObject subclasses should implement isEqual instead of ==.
- object_literal
# Prefer object literals over image and color inits.
- opening_brace
# Opening braces should be preceded by a single space and on the same line as the declaration.
- operator_usage_whitespace
# Operators should be surrounded by a single whitespace when they are being used.
- operator_whitespace
# Operators should be surrounded by a single whitespace when defining them.
- optional_enum_case_matching
# Matching an enum case against an optional enum without ‘?’ is supported on Swift 5.1 and above.
- orphaned_doc_comment
# A doc comment should be attached to a declaration.
- overridden_super_call
# Some overridden methods should always call super
- pattern_matching_keywords
# Combine multiple pattern matching bindings by moving keywords out of tuples.
- prefer_self_type_over_type_of_self
# Prefer Self over type(of: self) when accessing properties or calling methods.
- private_action
# IBActions should be private.
- private_outlet
# IBOutlets should be private to avoid leaking UIKit to higher layers.
- private_over_fileprivate
# Prefer private over fileprivate declarations.
- private_unit_test
# Unit tests marked private are silently skipped.
- prohibited_super_call
# Some methods should not call super (
# NSFileProviderExtension: providePlaceholder(at:completionHandler:)
# NSTextInput doCommand(by:)
# NSView updateLayer()
# UIViewController loadView())
- protocol_property_accessors_order
# When declaring properties in protocols, the order of accessors should be get set.
- reduce_boolean
# Prefer using .allSatisfy() or .contains() over reduce(true) or reduce(false)
- reduce_into
# Prefer reduce(into:_:) over reduce(_:_:) for copy-on-write types
- redundant_discardable_let
# Prefer _ = foo() over let _ = foo() when discarding a result from a function.
- redundant_nil_coalescing
# nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant
- redundant_objc_attribute
# Objective-C attribute (@objc) is redundant in declaration.
- redundant_optional_initialization
# Initializing an optional variable with nil is redundant.
- redundant_set_access_control
# Property setter access level shouldn't be explicit if it's the same as the variable access level.
- redundant_string_enum_value
# String enum values can be omitted when they are equal to the enumcase name.
- redundant_type_annotation
# Variables should not have redundant type annotation
- redundant_void_return
# Returning Void in a function declaration is redundant.
- return_arrow_whitespace
# Return arrow and return type should be separated by a single space or on a separate line.
- shorthand_operator
# Prefer shorthand operators (+=, -=, *=, /=) over doing the operation and assigning.
- single_test_class
# Test files should contain a single QuickSpec or XCTestCase class.
- sorted_first_last
# Prefer using `min()`` or `max()`` over `sorted().first` or `sorted().last`
- statement_position
# Else and catch should be on the same line, one space after the previous declaration.
- static_operator
# Operators should be declared as static functions, not free functions.
- superfluous_disable_command
# SwiftLint ‘disable’ commands are superfluous when the disabled rule would not have triggered a violation in the disabled region. Use “ - ” if you wish to document a command.
- switch_case_alignment
# Case statements should vertically align with their enclosing switch statement, or indented if configured otherwise.
- syntactic_sugar
# Shorthand syntactic sugar should be used, i.e. [Int] instead of Array.
- todo
# TODOs and FIXMEs should be resolved.
- toggle_bool
# Prefer someBool.toggle() over someBool = !someBool.
- trailing_closure
# Trailing closure syntax should be used whenever possible.
- trailing_comma
# Trailing commas in arrays and dictionaries should be avoided/enforced.
- trailing_newline
# Files should have a single trailing newline.
- trailing_semicolon
# Lines should not have trailing semicolons.
- trailing_whitespace
# Lines should not have trailing whitespace.
# Ignored lines are specified below.
- type_body_length
# Type bodies should not span too many lines.
# See large_tuple below for the exact configuration.
- type_name
# Type name should only contain alphanumeric characters, start with an uppercase character and span between 3 and 40 characters in length.
# Excluded types are listed below.
- unneeded_break_in_switch
# Avoid using unneeded break statements.
- unneeded_parentheses_in_closure_argument
# Parentheses are not needed when declaring closure arguments.
- untyped_error_in_catch
# Catch statements should not declare error variables without type casting.
- unused_capture_list
# Unused reference in a capture list should be removed.
- unused_closure_parameter
# Unused parameter in a closure should be replaced with _.
- unused_control_flow_label
# Unused control flow label should be removed.
- unused_declaration
# Declarations should be referenced at least once within all files linted.
- unused_enumerated
# When the index or the item is not used, .enumerated() can be removed.
- unused_import
# All imported modules should be required to make the file compile.
- unused_optional_binding
# Prefer != nil over let _ =
- unused_setter_value
# Setter value is not used.
- valid_ibinspectable
# @IBInspectable should be applied to variables only, have its type explicit and be of a supported type
- vertical_parameter_alignment
# Function parameters should be aligned vertically if they're in multiple lines in a declaration.
- vertical_parameter_alignment_on_call
# Function parameters should be aligned vertically if they're in multiple lines in a method call.
- vertical_whitespace
# Limit vertical whitespace to a single empty line.
# See vertical_whitespace below for the exact configuration.
- vertical_whitespace_closing_braces
# Don’t include vertical whitespace (empty line) before closing braces.
- vertical_whitespace_opening_braces
# Don’t include vertical whitespace (empty line) after opening braces.
- void_return
# Prefer -> Void over -> ().
- xctfail_message
# An XCTFail call should include a description of the assertion.
- yoda_condition
# The variable should be placed on the left, the constant on the right of a comparison operator.
excluded: # paths to ignore during linting. Takes precedence over `included`.
- .build
- .xcodebuild
- .swiftpm
- .gem
- .DerivedData
- .SwiftPackages
- fastlane/SnapshotHelper.swift
closure_body_length: # Closure bodies should not span too many lines.
- 20 # warning - default: 20
- 35 # error - default: 100
enum_case_associated_values_count: # Number of associated values in an enum case should be low
- 5 # warning - default: 5
- 5 # error - default: 6
file_length: # Files should not span too many lines.
- 500 # warning - default: 400
- 500 # error - default: 1000
function_body_length: # Functions bodies should not span too many lines.
- 20 # warning - default: 40
- 50 # error - default: 100
function_parameter_count: # Number of function parameters should be low.
- 5 # warning - default: 5
- 5 # error - default: 8
identifier_name:
excluded: # excluded names
- id
- ok
- or
- p8
- of
- s3
- at
- to
- in
large_tuple: # Tuples shouldn't have too many members. Create a custom type instead.
- 2 # warning - default: 2
- 3 # error - default: 3
line_length: # Lines should not span too many characters.
warning: 120 # default: 120
error: 150 # default: 200
ignores_comments: true # default: false
ignores_urls: true # default: false
ignores_function_declarations: false # default: false
ignores_interpolated_strings: true # default: false
nesting: # Types should be nested at most 2 level deep, and functions should be nested at most 5 levels deep.
type_level:
warning: 2 # warning - default: 1
function_level:
warning: 5 # warning - default: 5
trailing_closure:
only_single_muted_parameter: true
type_body_length: # Type bodies should not span too many lines.
- 250 # warning - default: 200
- 250 # error - default: 200
type_name:
excluded: # excluded names
- ID
trailing_whitespace:
ignores_empty_lines: true # default: false
ignores_comments: true # default: false
unused_optional_binding:
ignore_optional_try: true
vertical_whitespace: # Limit vertical whitespace to a single empty line.
max_empty_lines: 2 # warning - default: 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment