# # This source file is part of the Apodini open source project # # SPDX-FileCopyrightText: 2021 Paul Schmiedmayer and the project authors (see CONTRIBUTORS.md) <paul.schmiedmayer@tum.de> # # SPDX-License-Identifier: MIT # # Apodini SwiftLint file Apodini # 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 - .swiftpm closure_body_length: # Closure bodies should not span too many lines. - 35 # 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. - 50 # 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 - 2 # error - default: 3 line_length: # Lines should not span too many characters. warning: 150 # 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