# Opt-In Rules
opt_in_rules:
    - anonymous_argument_in_multiline_closure
    - array_init
    - attributes
    - closure_body_length
    - closure_end_indentation
    - closure_spacing
    - collection_alignment
    - comma_inheritance
    - conditional_returns_on_newline
    - contains_over_filter_count
    - contains_over_filter_is_empty
    - contains_over_first_not_nil
    - contains_over_range_nil_comparison
    - convenience_type
    - discouraged_none_name
    - discouraged_object_literal
    - discouraged_optional_boolean
    - discouraged_optional_collection
    - empty_collection_literal
    - empty_count
    - empty_string
    - enum_case_associated_values_count
    - explicit_init
    - fallthrough
    - file_header
    - file_name
    - file_name_no_space
    - first_where
    - flatmap_over_map_reduce
    - force_unwrapping
    - function_default_parameter_at_end
    - identical_operands
    - implicit_return
    - implicitly_unwrapped_optional
    - joined_default_parameter
    - last_where
    - legacy_multiple
    - let_var_whitespace
    - literal_expression_end_indentation
    - local_doc_comment
    - lower_acl_than_parent
    - missing_docs
    - modifier_order
    - multiline_arguments
    - multiline_arguments_brackets
    - multiline_function_chains
    - multiline_literal_brackets
    - multiline_parameters
    - multiline_parameters_brackets
    - no_extension_access_modifier
    - no_grouping_extension
    - no_magic_numbers
    - number_separator
    - operator_usage_whitespace
    - optional_enum_case_matching
    - prefer_self_in_static_references
    - prefer_self_type_over_type_of_self
    - prefer_zero_over_explicit_init
    - prohibited_interface_builder
    - redundant_nil_coalescing
    - redundant_type_annotation
    - return_value_from_void_function
    - shorthand_optional_binding
    - sorted_first_last
    - sorted_imports
    - static_operator
    - strict_fileprivate
    - switch_case_on_newline
    - toggle_bool
    - trailing_closure
    - type_contents_order
    - unneeded_parentheses_in_closure_argument
    - yoda_condition

# Disabled Rules
disabled_rules:
    - block_based_kvo
    - class_delegate_protocol
    - dynamic_inline
    - is_disjoint
    - no_fallthrough_only
    - notification_center_detachment
    - ns_number_init_as_function_reference
    - nsobject_prefer_isequal
    - private_over_fileprivate
    - redundant_objc_attribute
    - self_in_property_initialization
    - todo
    - unavailable_condition
    - valid_ibinspectable
    - xctfail_message

# Custom Rules
custom_rules:
    github_issue:
        name: 'GitHub Issue'
        regex: '//.(TODO|FIXME):.(?!.*(https://github\.com/AparokshaUI/Adwaita/issues/\d))'
        message: 'The related GitHub issue must be included in a TODO or FIXME.'
        severity: warning
    
    fatal_error:
        name: 'Fatal Error'
        regex: 'fatalError.*\(.*\)'
        message: 'Fatal error should not be used.'
        severity: error

    enum_case_parameter:
        name: 'Enum Case Parameter'
        regex: 'case [a-zA-Z0-9]*\([a-zA-Z0-9\.<>?,\n\t =]+\)'
        message: 'The associated values of an enum case should have parameters.'
        severity: warning

    tab:
        name: 'Whitespaces Instead of Tab'
        regex: '\t'
        message: 'Spaces should be used instead of tabs.'
        severity: warning

    # Thanks to the creator of the SwiftLint rule
    # "empty_first_line"
    # https://github.com/coteditor/CotEditor/blob/main/.swiftlint.yml
    # in the GitHub repository
    # "CotEditor"
    # https://github.com/coteditor/CotEditor
    empty_first_line:
        name: 'Empty First Line'
        regex: '(^[ a-zA-Z ]*(?:protocol|extension|class|struct) (?!(?:var|let))[ a-zA-Z:]*\{\n *\S+)'
        message: 'There should be an empty line after a declaration'
        severity: error

# Analyzer Rules
analyzer_rules:
    - unused_declaration
    - unused_import

# Options
file_header:
    required_pattern: '(//  swift-tools-version: .+)?//\n//  .*.swift\n//  Adwaita\n//\n//  Created by .* on .*\.(\n//  Edited by (.*,)+\.)*\n(\n//  Thanks to .* for the .*:\n//  ".*"\n//  https://.* \(\d\d.\d\d.\d\d\))*//\n'
missing_docs:
    warning: [internal, private]
    error: [open, public]
    excludes_extensions: false
    excludes_inherited_types: false
type_contents_order:
    order:
        - case
        - type_alias
        - associated_type
        - type_property
        - instance_property
        - ib_inspectable
        - ib_outlet
        - subscript
        - initializer
        - deinitializer
        - subtype
        - type_method
        - view_life_cycle_method
        - ib_action
        - other_method

excluded:
    - Sources/Adwaita/View/Generated/
    - Sources/Adwaita/Adwaita.docc/
