A static source code analysis tool to improve quality and reduce defects for Swift.
Swift Lint (swift-lint
) is a static code analysis tool for improving quality and reducing
defects by inspecting Swift code and looking for
potential problems, such as possible bugs, unused code, complicated code, redundant
code, code smells, bad practices, and so on.
Swift Lint relies on Swift Abstract Syntax Tree (swift-ast
)
of the source code for better accuracy and efficiency.
Swift Lint is part of Yanagiba Project. Yanagiba umbrella project is a toolchain of compiler modules, libraries, and utilities, written in Swift and for Swift.
Both Swift Abstract Syntax Tree and Swift Lint are in active development.
Though many features are implemented, some are with limitations.
Swift Lint doesn’t modify your code, therefore,
the tool is safe to be deployed in production environment while we are working hard towards 1.0 release.
Please be cautious with bugs, edge cases and false positives (issues and pull requests are welcomed).
Please also check out the status from swift-ast.
To use it as a standalone tool, clone this repository to your local machine by
git clone https://github.com/yanagiba/swift-lint
Go to the repository folder, run the following command:
swift build -c release
This will generate a swift-lint
executable inside .build/release
folder.
swift
Path (Recommended, but Optional)It is recommended to copy the swift-lint
to the same folder that your swift
binary resides.
For example, if swift
is installed at (Linux) or the toolchain (macOS)'s bin
path is
/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Then copy swift-lint
to it by
cp .build/release/swift-lint /Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-lint
Once you have done this, you can invoke swift-lint
by
calling swift lint
in your terminal directly.
Add the swift-lint
dependency to your Swift Package Manager (SPM) dependencies in Package.swift
:
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://github.com/yanagiba/swift-lint.git", from: "0.19.9")
],
targets: [
.target(name: "MyTarget", dependencies: ["SwiftMetric", "SwiftLint"]),
],
swiftLanguageVersions: [.v5]
)
An example project will be added in the future.
Simply provide the file paths to swift-lint
:
swift-lint path/to/Awesome.swift
swift-lint path1/to1/foo.swift path2/to2/bar.swift ... path3/to3/main.swift
Run swift-lint --help
to get the updated command line options.
Go to Documentation for details.
Building the entire project can be done by simply calling:
make
This is equivalent to
swift build
The dev version of the tool will be generated to .build/debug/swift-lint
.
Compile and run the entire tests by:
make test
Ryuichi Sai
Swift Lint is available under the Apache License 2.0.
See the LICENSE file for more info.