Download Latest Version SwiftLint.amd64.msi (20.5 MB) Google Add to Preferred Sources
Home / 0.63.3
Name Modified Size InfoDownloads / Week
Parent folder
swiftlint_linux_amd64.zip 2026-05-26 65.8 MB
swiftlint_linux_arm64.zip 2026-05-26 62.5 MB
bazel.tar.gz 2026-05-26 460.0 kB
bazel.tar.gz.sha256 2026-05-26 116 Bytes
portable_swiftlint.zip 2026-05-26 11.0 MB
SwiftLint.pkg 2026-05-26 11.0 MB
SwiftLintBinary.artifactbundle.zip 2026-05-26 73.5 MB
0.63.3_ High-Speed Extraction source code.tar.gz 2026-05-26 962.9 kB
0.63.3_ High-Speed Extraction source code.zip 2026-05-26 1.4 MB
README.md 2026-05-26 14.8 kB
Totals: 10 Items   226.8 MB 0

Enhancements

  • Treat extensions like classes in the prefer_self_in_static_references rule.
    itsybitsybootsy #3993

  • Print fixed code read from stdin to stdout.
    SimplyDanny #6501

  • Add new redundant_final rule that detects final modifiers on declarations where they are redundant due to the containing context, such as final classes or actors. Final actors are themselves implicitly final, so the final modifier is redundant on them as well.
    william-laverty SimplyDanny #6407

  • Add discouraged_default_parameter opt-in rule that flags default parameter values in functions with configurable access levels.
    William-Laverty #6488

  • Add ignored_literal_argument_functions option to the force_unwrapping rule to skip violations for configurable function calls when all arguments are literal values (e.g. URL(string: "https://example.com")!). Defaults include URL(string:), NSURL(string:), UIImage(named:), NSImage(named:), and Data(hexString:). claudeaceae #6487

  • Add rules array to SARIF reporter output, providing metadata for all built-in rules in accordance with the SARIF specification.
    ahmadalfy #6499

  • Add allow_underscore_prefixed_names option to unused_parameter so underscore-prefixed parameter names can be treated as intentionally unused when configured.
    theamodhshetty #5741

  • Add detection of cases such as String.init(decoding: data, as: UTF8.self) and let text: String = .init(decoding: data, as: UTF8.self) to optional_data_string_conversion rule.
    nadeemnali #6359

  • Add new default invisible_character rule that detects invisible characters like zero-width space (U+200B), zero-width non-joiner (U+200C), and FEFF formatting character (U+FEFF) in string literals, which can cause hard-to-debug issues.
    kapitoshka438 #6045

  • Add variable_shadowing rule that flags when a variable declaration shadows an identifier from an outer scope.
    nadeemnali #6228

  • Add legacy_uigraphics_function rule to encourage the use of modern UIGraphicsImageRenderer instead of the legacy UIGraphics{Begin|End}ImageContext. The modern replacement is safer, cleaner, Retina-aware and more performant.
    Dimitri Dupuis-Latour #6268

  • Support access level modifiers on imports in unused_imports rule.
    SimplyDanny #6620

  • Add name="SwiftLint" to JUnit testsuites and testsuite output for better CI parser compatibility.
    theamodhshetty #6161

  • Improve the opt-in pattern_matching_keywords rule by extending support beyond switch case and refining nested pattern handling.
    GandaLF2006

Bug Fixes

  • Detect and autocorrect missing whitespace before else in guard statements for the statement_position rule.
    theamodhshetty #6153

  • Avoid false positives from unused_enumerated when higher-order calls on .enumerated() use result members like ?.offset after the closure.
    theamodhshetty #5881

  • Add an ignore_attributes option to implicit_optional_initialization so wrappers/attributes that require explicit = nil can be excluded from style checks for both style: always and style: never.
    theamodhshetty #3998

  • Skip @TestState properties in quick_discouraged_call rule, matching existing @TestInjected and @TestWeakly exclusions.
    William-Laverty #5803

  • Fix explicit_self false positives around string interpolation.
    jffmrk SimplyDanny #6611

  • Properly taint variables in tuples for unneeded_escaping rule.
    SimplyDanny #6621

  • Ensure that disable commands work for redundant_nil_coalescing rule.
    SimplyDanny #6465

  • Take try expressions in call parameters into account even if the call has trailing closures as well, so that an outer throws is not considered unneeded in the unneeded_throws_rethrows rule.
    SimplyDanny #6491

  • Ensure that disable commands work for prefer_key_path rule when the trailing closure starts on a different line than the function call as a whole.
    SimplyDanny #6466

  • Track identifiers declared in tuples to avoid false positives in the redundant_self rule.
    SimplyDanny #6553

  • Respect existing environment variables when setting BUILD_WORKSPACE_DIRECTORY in build tool plugins.
    SimplyDanny #6080

  • Fix false positives in indentation_width rule for continuation lines of multi-line guard/if/while conditions. A new option include_multiline_conditions (default: false) skips these lines by default. When enabled, it validates that continuation lines are aligned with the first condition after the keyword.
    tanaev #4961

  • multiline_call_arguments no longer reports violations for enum-case patterns in pattern matching (e.g. if case, switch case, for case, catch).
    GandaLF2006

  • Avoid false positives in prefer_self_in_static_references when a nested type shadows its enclosing type name.
    theamodhshetty #5917

0.63.2: High-Speed Extraction

Enhancements

  • Add ignore_regex configuration option to the large_tuple rule to silence violations for tuples inside Regex<...> types, which commonly have large tuple type parameters for capture groups.
    Deco354 #6340

Bug Fixes

  • Use start position of closure (in addition to the containing function call) to check if violations are disabled for it in trailing_closure rule.
    SimplyDanny #6451

0.63.1: High-Speed Extraction

Enhancements

  • Add a --disable-sourcekit flag to the lint command to disable SourceKit when needed. The environment variable SWIFTLINT_DISABLE_SOURCEKIT can still be used as well.
    SimplyDanny #6282

Bug Fixes

  • Retain async initializers in actors in async_without_await rule.
    SimplyDanny #6423

  • Inform users about files being skipped due to impossible file system representation instead of crashing.
    SimplyDanny #6419

  • Ignore override functions in async_without_await rule.
    SimplyDanny #6416

  • Avoid infinite recursion for deeply nested symbolic links which is usually the case in node_modules directories managed by pnpm.
    SimplyDanny #6425

  • Fix false positive in unneeded_escaping rule when an escaping closure is used in a nested closure preceded by another closure.
    SimplyDanny #6410

  • Fix non-excluded bool literal in optional_enum_case_name when used inside a tuple.
    tristan-burnside-anz

0.63.0: High-Speed Extraction

Breaking

  • The redundant_self_in_closure rule has been renamed to redundant_self (with redundant_self_in_closure as a deprecated alias) to reflect its now broader scope, while it still maintains the previous behavior of only checking closures by default. To enable checking for all redundant self usages, set the new only_in_closures option to false.
    SimplyDanny

Experimental

  • None.

Enhancements

  • Extend redundant_self_in_closure rule to detect all redundant uses of self, not just in closures. Initializers (which commonly prefer an explicit self prefix) can be ignored by setting keep_in_initializers to true.
    SimplyDanny

  • Add a separation configuration option to the vertical_whitespace_between_cases rule to allow customizing blank line separation between switch cases. The default value is always (require at least one blank line). Setting it to never enforces no blank lines between cases.
    SimplyDanny #6326

  • Rewrite the following rules with SwiftSyntax:

  • vertical_whitespace_between_cases

SimplyDanny

  • Add new opt-in unneeded_throws_rethrows rule that triggers when declarations marked throws/rethrows never actually throw or call any throwing code.
    Tony Ngo

  • Add new unneeded_escaping rule that detects closure parameters marked with @escaping that are never stored or captured escapingly.
    SimplyDanny

  • Add multiline_call_arguments opt-in rule to enforce consistent multiline formatting for function and method call arguments.
    GandaLF2006

  • Improve performance when exclude patterns resolve to a large set of files.
    SimplyDanny #5018 #5207 #5953 #6084 #6259

Bug Fixes

  • Fix line_length rule incorrectly ignoring function bodies when ignores_function_declarations is enabled. The option should only ignore function declarations, not their implementation.
    SimplyDanny #6347

  • Fix false positives in vertical_whitespace_between_cases rule when cases are interleaved with compiler directives like #if/#else/#endif.
    SimplyDanny #6332

  • override_in_extension no longer triggers inside @objc @implementation extensions.
    JaredGrubb

  • Reinstate handling of access level imports in sorted_imports rule.
    Brett-Best #6374


Using Bazel

With bzlmod:

// Pending BCR update
bazel_dep(name = "swiftlint", version = "0.63.3", repo_name = "SwiftLint")

Without bzlmod, put this in your WORKSPACE:

WORKSPACE :::python load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "build_bazel_rules_apple", sha256 = "9e26307516c4d5f2ad4aee90ac01eb8cd31f9b8d6ea93619fc64b3cbc81b0944", url = "https://github.com/bazelbuild/rules_apple/releases/download/2.2.0/rules_apple.2.2.0.tar.gz", ) load( "@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies", ) apple_rules_dependencies() load( "@build_bazel_rules_swift//swift:repositories.bzl", "swift_rules_dependencies", ) swift_rules_dependencies() load( "@build_bazel_rules_swift//swift:extras.bzl", "swift_rules_extra_dependencies", ) swift_rules_extra_dependencies() http_archive( name = "SwiftLint", sha256 = "5a4a1e8395e2a6b54506ebe91fca3a6873af4a10dba3322640b5adac46fe8061", url = "https://github.com/realm/SwiftLint/releases/download/0.63.3/bazel.tar.gz", ) load("@SwiftLint//bazel:repos.bzl", "swiftlint_repos") swiftlint_repos() load("@SwiftLint//bazel:deps.bzl", "swiftlint_deps") swiftlint_deps()

Then you can run SwiftLint in the current directory with this command:

:::console
bazel run @SwiftLint//:swiftlint -- --help
Source: README.md, updated 2026-05-26