# Project configuration
excluded:
  - Pods
  - Scripts
  - vendor

# Rules
whitelist_rules:
  # Colons should be next to the identifier when specifying a type.
  - colon

  # There should be no space before and one after any comma.
  - comma

  # if,for,while,do statements shouldn't wrap their conditionals in parentheses.
  - control_statement

  # Arguments can be omitted when matching enums with associated types if they
  # are not used.
  - empty_enum_arguments

  # Prefer `() -> ` over `Void -> `.
  - empty_parameters

  # MARK comment should be in valid format.
  - mark

  # Opening braces should be preceded by a single space and on the same line as
  # the declaration.
  - opening_brace

  # Files should have a single trailing newline.
  - trailing_newline

  # Lines should not have trailing semicolons.
  - trailing_semicolon

  # Lines should not have trailing whitespace.
  - trailing_whitespace

  - custom_rules

# Rules configuration

control_statement: 
  severity: error 

custom_rules:

  natural_content_alignment:
    name: "Natural Content Alignment"
    regex: '\.contentHorizontalAlignment(\s*)=(\s*)(\.left|\.right)'
    message: "Forcing content alignment left or right can affect the Right-to-Left layout. Use naturalContentHorizontalAlignment instead."
    severity: warning

  natural_text_alignment:
    name: "Natural Text Alignment"
    regex: '\.textAlignment(\s*)=(\s*).left'
    message: "Forcing text alignment to left can affect the Right-to-Left layout. Consider setting it to `natural`"
    severity: warning

  inverse_text_alignment:
    name: "Inverse Text Alignment"
    regex: '\.textAlignment(\s*)=(\s*).right'
    message: "When forcing text alignment to the right, be sure to handle the Right-to-Left layout case properly, and then silence this warning with this line `// swiftlint:disable:next inverse_text_alignment`"
    severity: warning

  localization_comment:
    name: "Localization Comment"
    regex: 'NSLocalizedString([^,]+,\s+comment:\s*"")'
    message: "Localized strings should include a description giving context for how the string is used."
    severity: warning

  string_interpolation_in_localized_string:
    name: "String Interpolation in Localized String"
    regex: 'NSLocalizedString\("[^"]*\\\(\S*\)'
    message: "Localized strings must not use interpolated variables. Instead, use `String(format:`"
    severity: error

  swiftui_localization:
    name: "SwiftUI Localization"
    regex: 'LocalizedStringKey'
    message: "Using `LocalizedStringKey` is incompatible with our tooling and doesn't allow you to provide a hint/context comment for translators either. Please use `NSLocalizedString` instead, even with SwiftUI code."
    severity: error
    excluded: '.*Widgets/.*'