Swiftlint: How to skip the unmodified swift files

Created on 7 Mar 2017  Â·  5Comments  Â·  Source: realm/SwiftLint

I have 100+ files, run cmd,
swiftlint autocorrect --format

but, Every time is slow。I want to hurry up, how to do?
For example, filter for modified files. Thanks..

question

Most helpful comment

This isn't really SwiftLint feature.
Are you using git?

This is an example of shell script we have integrated as part of our Xcode project

#!/bin/bash

# Run SwiftLint
START_DATE=$(date +"%s")

SWIFT_LINT=/usr/local/bin/swiftlint

# Run SwiftLint for given filename
run_swiftlint() {
    local filename="${1}"
    # Ignore Pods/ paths
    [[ "${filename}" =~ Pods/ ]] && return
    if [[ "${filename##*.}" == "swift" ]]; then
        ${SWIFT_LINT} autocorrect --path "${filename}"
        ${SWIFT_LINT} lint --path "${filename}"
    fi
}

if [[ -e "${SWIFT_LINT}" ]]; then
    echo "SwiftLint version: $(${SWIFT_LINT} version)"
    # Run for both staged and unstaged files
    git diff --name-only | while read -r filename; do run_swiftlint "${filename}"; done
    git diff --cached --name-only | while read -r filename; do run_swiftlint "${filename}"; done
else
    echo "Error: ${SWIFT_LINT} is not installed."
    exit 1
fi

END_DATE=$(date +"%s")

DIFF=$((END_DATE - START_DATE))
echo "SwiftLint took $((DIFF / 60)) minutes and $((DIFF % 60)) seconds to complete."

All 5 comments

This isn't really SwiftLint feature.
Are you using git?

This is an example of shell script we have integrated as part of our Xcode project

#!/bin/bash

# Run SwiftLint
START_DATE=$(date +"%s")

SWIFT_LINT=/usr/local/bin/swiftlint

# Run SwiftLint for given filename
run_swiftlint() {
    local filename="${1}"
    # Ignore Pods/ paths
    [[ "${filename}" =~ Pods/ ]] && return
    if [[ "${filename##*.}" == "swift" ]]; then
        ${SWIFT_LINT} autocorrect --path "${filename}"
        ${SWIFT_LINT} lint --path "${filename}"
    fi
}

if [[ -e "${SWIFT_LINT}" ]]; then
    echo "SwiftLint version: $(${SWIFT_LINT} version)"
    # Run for both staged and unstaged files
    git diff --name-only | while read -r filename; do run_swiftlint "${filename}"; done
    git diff --cached --name-only | while read -r filename; do run_swiftlint "${filename}"; done
else
    echo "Error: ${SWIFT_LINT} is not installed."
    exit 1
fi

END_DATE=$(date +"%s")

DIFF=$((END_DATE - START_DATE))
echo "SwiftLint took $((DIFF / 60)) minutes and $((DIFF % 60)) seconds to complete."

@snice Did @mgrebenets's comment solve your issue?

I'd like to state that with SwiftLint's caching (minus current bugs we're dealing with), only modified files should be re-linted.

@jpsim That means "modified" in the SwiftTerms terms, right?

For our team it was important to use the git's meaning of "modified" and only lint the files which developer has touched, since there's no mechanism to share same cache between multiple developers.

For CI builds we lint the whole project - this is where cache becomes more important for us.

What's "SwiftTerms terms"? By modified I mean different since the last run persisted in the cache.

Was this page helpful?
0 / 5 - 0 ratings