Skip to content

Releases: realm/SwiftLint

0.59.1: Crisp Spring Clean

15 Apr 15:46
Compare
Choose a tag to compare

Breaking

  • Remove opaque_over_existential opt-in rule as it causes too many false positives
    that can even lead to wrong-compilable code when any is required by a protocol the
    type conforms to. In this case, using some can be totally valid even though the
    protocol requirement is not reimplemented for the type causing behavioral changes.
    SimplyDanny

Experimental

  • None.

Enhancements

Bug Fixes

  • None.

Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "5c7aa164801b766bd19aa0968ee7cf07c8d89c9813a63e8cfb0fec9dbb6cd788",
    url = "https://github.com/realm/SwiftLint/releases/download/0.59.1/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:

bazel run @SwiftLint//:swiftlint -- --help

0.59.0: Crisp Spring Clean

05 Apr 11:52
Compare
Choose a tag to compare

Breaking

  • Remove tracking of correction positions. Print the number of corrections applied instead.
    SimplyDanny

Experimental

  • Introduce swiftlint-dev command line tool that's intended to help to develop SwiftLint by encapsulating repetitive
    tasks. It can already be used to generate templates for new rules including optional configurations and tests. Run
    swift run swiftlint-dev rules template -h to get an overview of the command's usage and the available
    customization options. To register new rules, run swift run swiftlint-dev rules register.
    SimplyDanny

Enhancements

  • Add new option ignores_multiline_strings to line_length rule. It allows to ignore too long
    lines inside of multiline strings.
    thisIsTheFoxe
    #2689

  • Ignore UIColor initializers in no_magic_numbers rule.
    suojae
    hyeffie
    #5183

  • Exclude types with a @Suite attribute and functions annotated with @Test from no_magic_numbers rule.
    Also treat a type as a @Suite if it contains @Test functions.
    SimplyDanny
    #5964

  • Add new opaque_over_existential opt-in rule that triggers when the existential any type of a
    function parameter can be replaced with an opaque some type.
    SimplyDanny

  • Add a new rationale property to rule descriptions, providing a more expansive
    description of the motivation behind each rule.
    Martin Redington
    #5681

  • Add new allowed_types option to legacy_objc_type rule to ignore certain types.
    kapitoshka438
    #3723

  • Add excluded_methods configuration option to unneeded_override to opt out checking methods with a given name.
    For example, this helps avoid a conflict with balanced_xctest_lifecycle where one of setUp/tearDown
    is empty but the other is not.
    jaredgrubb

Bug Fixes

  • Fix issue referencing the Tests package from another Bazel workspace.
    jszumski

  • Fix crash when a disable command is preceded by a unicode character.
    SimplyDanny
    #5945

  • Allow severity of duplicate_imports rule to be configurable.
    SimplyDanny
    #5978

  • Silence no_magic_numbers rule in conditions of #if directives.
    SimplyDanny
    #6000

  • Consider types restricting a protocol to classes in composed inherited types in class_delegate_protocol rule.
    SimplyDanny
    #5982

  • Rewrite type_contents_order rule with SwiftSyntax fixing an issue with experimental availability macros.
    SimplyDanny
    #5999

  • Update file_name rule to consider macro types.
    fraioli
    #6026


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "e2ddd07deaa0473ba557ce51c3f4fb87f737f43c87fd01d1c05d8f8ac143a876",
    url = "https://github.com/realm/SwiftLint/releases/download/0.59.0/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:

bazel run @SwiftLint//:swiftlint -- --help

0.58.2: New Year’s Fresh Fold

16 Jan 22:30
Compare
Choose a tag to compare

Breaking

  • None.

Experimental

  • None.

Enhancements

  • None.

Bug Fixes

  • Fix version being reported by the binary consumed from the Docker image.
    SimplyDanny
    #5966

Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "3377c9115221a14a52fa7533c065e48d7de729114cc534c10dcf61036dc59807",
    url = "https://github.com/realm/SwiftLint/releases/download/0.58.2/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:

bazel run @SwiftLint//:swiftlint -- --help

0.58.1: New Year’s Fresh Fold

15 Jan 18:50
Compare
Choose a tag to compare

Breaking

  • If you are referring to the swiftlint binary from an Artifact Bundle consumed via Swift Package Manager
    in an Xcode Run Script Build Phase, make sure to update the path from

    "$SWIFT_PACKAGE_DIR"/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/swiftlint-*/bin/swiftlint

    to

    "$SWIFT_PACKAGE_DIR"/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/swiftlint-*-macos/bin/swiftlint

    in order to make Xcode use the binary built for macOS.
    SimplyDanny
    #5954

  • Revert changes to improve performance when exclude patterns resolve to a large set of files. While resolving files
    indeed got much faster in certain setups, it leads to missed exclusions for nested configurations and when the linted
    folder is not the current folder.
    SimplyDanny
    #5953

Experimental

  • None.

Enhancements

  • None.

Bug Fixes

  • Fix redundant_sendable correction by removing a remaining trailing comma as well when Sendable was last.
    SimplyDanny
    #5952

  • Remove lints for redundant_sendable on protocols, where Sendable is not redundant.
    riley-williams
    #5958

  • Add ib_segue_action to default configuration of type_contents_order rule on the same level as ib_action to define and document a standard position.
    SimplyDanny
    #5524


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "94b2c63592859e0fc60f53ff4002b9ceb87fb712106ce250548261860d8a9575",
    url = "https://github.com/realm/SwiftLint/releases/download/0.58.1/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:

bazel run @SwiftLint//:swiftlint -- --help

0.58.0: New Year’s Fresh Fold

12 Jan 12:51
Compare
Choose a tag to compare

Breaking

  • The command plugin now requires write permissions so that it works with the --fix option without an error.
    SimplyDanny

  • The artifact bundle name has changed. SwiftLintBinary-macos.artifactbundle.zip is now called
    SwiftLintBinary.artifactbundle.zip. It now includes an AMD64 Linux binary.
    Bradley Mackey
    #5514

  • The inert_defer and unused_capture_list rules have completely been removed after being deprecated for 2 years.
    SimplyDanny

  • SwiftLint now requires a Swift 5.10 or higher compiler to build. The Swift Package Manager plugins continue to work with Swift 5.9.
    SimplyDanny

  • The private_unit_test rule's deprecated regex configuration option has been removed after 2 years.
    Martin Redington
    #5912

Experimental

  • None.

Enhancements

  • Add Xcode command plugin allowing to run SwiftLint from within Xcode.
    SimplyDanny

  • Add new async_without_await opt-in rule that checks if an async declaration contains at least one await.
    Jan Kolarik
    #5082

  • Support replacing identity expressions with \.self in prefer_key_path rule from Swift 6 on.
    SimplyDanny

  • Support linting only provided file paths with command plugins.
    DanSkeel

  • Add new category for @IBSegueAction to type_contents_order rule.
    dk-talks
    SimplyDanny

  • Add option to disable redundant_discardable_let rule in SwiftUI view bodies.
    SimplyDanny
    #3855

  • Add new redundant_sendable rule that triggers on Sendable conformances of
    types that are implicitly already Sendable due to being actor-isolated. It
    is enabled by default.
    SimplyDanny

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

Bug Fixes

  • Ignore TipKit's #Rule macro in empty_count rule.
    Ueeek
    #5883

  • Ignore super calls with trailing closures in unneeded_override rule.
    SimplyDanny
    #5886

  • If violations are detected by lint or analyze, still perform an update
    check for new versions of SwiftLint if requested.
    Martin Redington
    #5904


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "7f069bc44c548896f78b80cdf223643f6f6da5093a934e834dd7f68eaf1d1940",
    url = "https://github.com/realm/SwiftLint/releases/download/0.58.0/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:

bazel run @SwiftLint//:swiftlint -- --help

0.57.1: Squeaky Clean Cycle

24 Nov 15:10
Compare
Choose a tag to compare

Breaking

  • None.

Experimental

  • None.

Enhancements

  • Suggest failable String(bytes:encoding:) initializer in
    optional_data_string_conversion rule as it accepts all Sequence
    types.
    Jordan Rose
    SimplyDanny

  • Support reading files to lint from Input File Lists provided
    by Run Script Build Phases in Xcode using the command-line
    argument --use-script-input-file-lists.
    BlueVirusX

  • Adds a lenient configuration file setting, equivalent to the --lenient
    command line option.
    Martin Redington
    #5801

  • Support type casting on configuration option values defined by environment variables.
    Without a cast, these values would always be treated as strings leading to a potentially
    invalid configuration.
    SimplyDanny
    #5774

  • Add new option max_number_of_single_line_parameters that allows only the specified maximum
    number of parameters to be on one line when allows_single_line = true. If the limit is
    exceeded, the rule will still trigger. Confusing option combinations like allows_single_line = false
    together with max_number_of_single_line_parameters > 1 will be reported.
    kimdv
    SimplyDanny
    #5781

  • The redundant_type_annotation rule gains a new option,
    ignore_properties, that skips enforcement on members in a
    type declaration (like a struct). This helps the rule coexist with
    the explicit_type_interface rule that requires such redundancy.
    jaredgrubb
    #3750

  • Allow inherited isolation parameter to be first in function signatures
    depending on the new option ignore_first_isolation_inheritance_parameter
    which is true by default.
    SimplyDanny
    #5793

Bug Fixes

  • Run command plugin in whole package if no targets are defined in the
    package manifest.
    SimplyDanny
    #5787

  • Silence superfluous_else rule on if expressions with only a single
    availability condition.
    SimplyDanny
    #5833

  • Stop triggering the control_statement rule on closures being directly
    called as conditions.
    SimplyDanny
    #5846

  • Do not trigger self_in_property_initialization rule on self in
    key paths expressions.
    SimplyDanny
    #5835

  • Allow to specify transitive modules to be taken into account by
    unused_import rule. This avoids that required imports are removed.
    Paul Taykalo
    SimplyDanny
    #5167

  • Only pass cache path and directory paths to commands that accept these arguments
    in the command plugin.
    SimplyDanny
    #5848

  • Do not throw deprecation warning if deprecated property is not
    presented in configuration.
    chipp
    #5791

  • The prefer_type_checking rule will no longer trigger for non-optional
    type casting (as), or for comparisons to optional types.
    Martin Redington
    #5802

  • Fixes an issue where the superfluous_disable_command rule could generate
    false positives for nested disable commands for custom rules.
    Martin Redington
    #5788

  • Fixes the --only-rule command line option, when a default .swiftlint.yml
    is absent. Additionally rules specified with --only-rule on the command
    line can now be disabled in a child configuration, to allow specific
    directories to be excluded from the rule (or from being auto-corrected by
    the rule), and --only-rule can now be specified multiple times
    to run multiple rules.
    Martin Redington
    #5711


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "78f9a8dfd3cb4b6b5ff173892c7f273cae0b67f3a0a1bd8651fe10029693f5f4",
    url = "https://github.com/realm/SwiftLint/releases/download/0.57.1/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:

bazel run @SwiftLint//:swiftlint -- --help

0.57.0: Squeaky Clean Cycle

08 Sep 16:02
Compare
Choose a tag to compare

Breaking

  • The deprecated anyobject_protocol rule has now been removed.
    Martin Redington
    #5769

  • Revert the part of the non_optional_string_data_conversion
    rule that enforces non-failable conversions of Data to UTF-8
    String. This is due to the fact that the data to be converted
    can be arbitrary and especially doesn't need to represent a valid
    UTF-8-encoded string.
    Sam Rayner
    #5263

Experimental

  • None.

Enhancements

  • Add ignore_multiline_type_headers and ignore_multiline_statement_conditions
    options to opening_brace rule to allow opening braces to be on a new line after
    multiline type headers or statement conditions. Rename allow_multiline_func to
    ignore_multiline_function_signatures.
    leonardosrodrigues0
    #3720

  • Add new optional_data_string_conversion rule to enforce
    failable conversions of Data to UTF-8 String.
    Sam Rayner
    #5263

  • The no_magic_numbers rule will now ignore violations in
    SwiftUI's Preview macro.
    Martin Redington
    #5778

Bug Fixes


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "82343de268e63d196cf878bd77e88289ec6ea64054d328e92fe1baae18733104",
    url = "https://github.com/realm/SwiftLint/releases/download/0.57.0/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:

bazel run @SwiftLint//:swiftlint -- --help

0.56.2: Heat Pump Dryer

22 Aug 11:22
Compare
Choose a tag to compare

Breaking

  • None.

Experimental

  • None.

Enhancements

  • None.

Bug Fixes

  • Ignore initializers with attributes in unneeded_synthesized_initializer rule.
    SimplyDanny
    #5153

  • Silence prefer_key_path rule on macro expansion expressions.
    SimplyDanny
    #5744

  • Check if expressions nested arbitrarily deep in contrasted_opening_brace rule.
    SimplyDanny
    #5752

  • Align left closure brace with associated parent function call in contrasted_opening_brace rule.
    SimplyDanny
    #5752

  • Align left brace of additional trailing closures with right brace of previous trailing closure
    in contrasted_opening_brace rule.
    SimplyDanny
    #5752

  • Trigger on empty closure blocks in no_empty_block rule.
    SimplyDanny
    #5762

  • Silence unneeded_override rule on methods and initializers with attributes.
    SimplyDanny
    #5753


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "d607223592fb87c67e91d899e8e33b5e0b04da5306afd994c4331c2881b6832d",
    url = "https://github.com/realm/SwiftLint/releases/download/0.56.2/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:

bazel run @SwiftLint//:swiftlint -- --help

0.56.1: Heat Pump Dryer

06 Aug 23:09
Compare
Choose a tag to compare

Breaking

  • None.

Experimental

  • None.

Enhancements

  • None.

Bug Fixes

  • Let contrasted_opening_brace be an opt-in rule.
    SimplyDanny

Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "100aa8cbe1c42b0503d5b0a6c1944b9955c1c1795d59e39a4c1d3a5a3153c5b6",
    url = "https://github.com/realm/SwiftLint/releases/download/0.56.1/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:

bazel run @SwiftLint//:swiftlint -- --help

0.56.0: Heat Pump Dryer

06 Aug 20:37
Compare
Choose a tag to compare

Breaking

  • The deprecated --path and --in-process-sourcekit arguments have now been
    removed completely.
    Martin Redington
    SimplyDanny
    #5614

  • When SwiftLint corrects violations automatically (swiftlint lint --fix)
    it doesn't report the exact location of the fix any longer. The new format
    is <file-path>: Correcting <rule-name> without line and column numbers.
    Reason: Correction positions are likely just incorrect, especially when
    multiple rules apply their rewrites. Fixing that is not trivial and likely
    not worth the effort also considering that there haven't been any bug
    reports about wrong correction positions so far.
    SimplyDanny

Experimental

  • None.

Enhancements

  • Linting got up to 30% faster due to the praisworthy performance
    improvements done in the SwiftSyntax library.

  • Rewrite the following rules with SwiftSyntax:

    • missing_docs

    woxtu
    SimplyDanny

  • Add new prefer_key_path rule that triggers when a trailing closure on a standard
    function call is only hosting a (chained) member access expression since the closure
    can be replaced with a key path argument. Likewise, it triggers on closure arguments.
    SimplyDanny

  • Adds baseline and write_baseline configuration file settings, equivalent
    to the --baseline and --write-baseline command line options.
    Martin Redington
    #5552

  • Add no_empty_block opt-in rule to validate that code blocks are not empty.
    They should at least contain a comment.
    Ueeek
    #5615

  • Add new contrasted_opening_brace rule that enforces opening
    braces to be on a separate line after the preceding declaration.
    SimplyDanny

  • Add new unused_parameter rule that triggers on function/initializer/subscript
    parameters that are not used inside of the function/initializer/subscript.
    SimplyDanny
    #2120

  • Support --target paths being passed to command plugin by Xcode.
    SimplyDanny
    #5603

  • Add modified configurations to examples in rule documentation.
    SimplyDanny

  • Add new option evaluate_effective_access_control_level to missing_docs
    rule. Setting it to true stops the rule from triggering on declarations
    inside of types with lower visibility. These declarations effectively
    have at most the same access level.
    SimplyDanny

  • Add new --check-for-updates command line option for the lint, analyze,
    and version subcommands to check for new versions of SwiftLint, and an
    equivalent check_for_updates configuration file setting.
    Martin Redington
    SimplyDanny
    Ian Leitch
    #5613

  • Add new --only-rule command line option for the lint and analyze,
    subcommands that overrides configuration file rule enablement and
    disablement, in particular to facilitate running --fix for single rules
    without having to temporarily edit the configuration file.
    Martin Redington
    #5666

Bug Fixes

  • Fix a few false positives and negatives by updating the parser to support
    Swift 6 with all its new language constructs.
    SimplyDanny

  • Stop triggering mark rule on "mark" comments in the middle of another
    comment.
    SimplyDanny
    #5592

  • Don't consider specialized imports with attributes as duplicates in
    duplicate_imports rule.
    SimplyDanny
    #5716

  • Use correct types and relative paths in SARIF reporter output. Generally
    avoid escaping slashes in JSON output as well.
    SimplyDanny
    #5598
    #5599

  • Keep initializers with attributed parameters in
    unneeded_synthesized_initializer rule.
    SimplyDanny
    #5153

  • Make vertical_whitespace_between_cases rule work for
    cases ending with a string literal.
    ilendemli
    #5612

  • Ignore access level modifiers restricted to value setting in
    extension_access_modifier rule.
    SimplyDanny
    #5623

  • Fix baseline compare incorrectly reporting some violations
    as new, and also now sorts the violations from baseline compare
    deterministically.
    Martin Redington
    #5606

  • Fix rewriting for implicit_return rule when violations are
    nested within each other.
    Martin Redington
    #5660

  • Fix opening_brace correction and make sure that disable commands
    are taken into account before applying a fix.
    swiftty
    SimplyDanny
    #5598

  • Violations of the typesafe_array_init rule will now be correctly
    reported as such, instead of as violations of the array_init
    rule.
    Martin Redington
    #5709


Using Bazel

With bzlmod:

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

Without bzlmod, put this in your WORKSPACE:

WORKSPACE
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 = "40a7873d54899ace4e485317d172c19507135ae1b3683159d521cc1daa42e196",
    url = "https://github.com/realm/SwiftLint/releases/download/0.56.0/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:

bazel run @SwiftLint//:swiftlint -- --help