-
Notifications
You must be signed in to change notification settings - Fork 48
Home
Installation • Usage • Features • Developers • License
Tailor is a cross-platform static analysis and lint tool for source code written in Apple's Swift programming language. It analyzes your code to ensure consistent styling and help avoid bugs.
Tailor supports Swift 2 out of the box and helps enforce style guidelines outlined in the The Swift Programming Language, GitHub, Ray Wenderlich, Jamie Forrest, and Coursera style guides. It supports cross-platform usage and can be run on Mac OS X via your shell or integrated with Xcode, as well as on Linux and Windows.
Tailor parses Swift source code using the primary Java target of ANTLR:
ANTLR is a powerful parser generator [ . . . ] widely used in academia and industry to build all sorts of languages, tools, and frameworks.
— About the ANTLR Parser Generator
Requires Java (JRE or JDK) Version 8 or above: Java SE Downloads
brew install tailor
curl -fsSL https://tailor.sh/install.sh | sh
iex (new-object net.webclient).downloadstring('https://tailor.sh/install.ps1')
You may also download Tailor via GitHub Releases, extract the archive, and symlink the tailor/bin/tailor
shell script to a location in your $PATH
.
If your continuous integration server supports Homebrew installation, you may use the following snippet:
before_install:
- brew update
- brew install tailor
In other cases, use this snippet:
Replace ${TAILOR_RELEASE_ARCHIVE}
with the URL of the release you would like to install, e.g. https://github.com/sleekbyte/tailor/releases/download/v0.1.0/tailor.tar
.
before_script:
- wget ${TAILOR_RELEASE_ARCHIVE} -O /tmp/tailor.tar
- tar -xvf /tmp/tailor.tar
- export PATH=$PATH:$PWD/tailor/bin/
Run Tailor with a list of files and directories to analyze, or via Xcode.
$ tailor [options] [--] [[file|directory] ...]
Help for Tailor is accessible via the [-h|--help]
option.
$ tailor -h
Usage: tailor [options] [--] [[file|directory] ...]
Perform static analysis on Swift source files.
Invoking Tailor with at least one file or directory will analyze all Swift files at those paths. If
no paths are provided, Tailor will analyze all Swift files found in '$SRCROOT' (if defined), which
is set by Xcode when run in a Build Phase. Tailor may be set up as an Xcode Build Phase
automatically with the --xcode option.
Options:
-c,--config=<path/to/.tailor.yml> specify configuration file
--debug print ANTLR error messages when parsing error occurs
--except=<rule1,rule2,...> run all rules except the specified ones
-h,--help display help
--invert-color invert colorized console output
-l,--max-line-length=<0-999> maximum Line length (in characters)
--list-files display Swift source files to be analyzed
--max-class-length=<0-999> maximum Class length (in lines)
--max-closure-length=<0-999> maximum Closure length (in lines)
--max-file-length=<0-999> maximum File length (in lines)
--max-function-length=<0-999> maximum Function length (in lines)
--max-name-length=<0-999> maximum Identifier name length (in characters)
--max-severity=<error|warning (default)> maximum severity
--max-struct-length=<0-999> maximum Struct length (in lines)
--min-name-length=<1-999> minimum Identifier name length (in characters)
--no-color disable colorized console output
--only=<rule1,rule2,...> run only the specified rules
--show-rules show description for each rule
-v,--version display version
--xcode=<path/to/project.xcodeproj> add Tailor Build Phase Run Script to Xcode Project
- Enabling and Disabling Rules
- Cross-Platform
- Automatic Xcode Integration
- Colorized Output
- Warnings, Errors, and Failing the Build
- Disable Violations within Source Code
- Configuration
Rule identifiers and "preferred/not preferred" code samples may be found on the Rules page.
Rules may be individually disabled (blacklist) or enabled (whitelist) via the --except
and --only
command-line flags.
tailor --except=brace-style,trailing-whitespace main.swift
tailor --only=redundant-parentheses,terminating-semicolon main.swift
Tailor may be used on Mac OS X via your shell or integrated with Xcode, as well as on Linux and Windows.
Tailor can be integrated with Xcode projects using the --xcode
option.
tailor --xcode /path/to/demo.xcodeproj/
This adds the following Build Phase Run Script to your project's default target.
Tailor's output will be displayed inline within the Xcode Editor Area and as a list in the Log Navigator.
Tailor uses the following color schemes to format CLI output:
- Dark theme (enabled by default)
-
Light theme (enabled via
--invert-color
option) -
No color theme (enabled via
--no-color
option)
--max-severity
can be used to control the maximum severity of violation messages. It can be set to error
or warning
(by default, it is set to warning
). Setting it to error
allows you to distinguish between lower and higher priority messages. It also fails the build in Xcode, if any errors are reported (similar to how a compiler error fails the build in Xcode). With max-severity
set to warning
, all violation messages are warnings and the Xcode build will never fail.
This setting also affects Tailor's exit code on the command-line, a failing build will exit 1
whereas having warnings only will exit 0
, allowing Tailor to be easily integrated into pre-commit hooks.
Violations on a specific line may be disabled with a trailing single-line comment.
import Foundation; // tailor:disable
The behavior of Tailor can be customized via the .tailor.yml
configuration file. It enables you to include/exclude certain files and directories from analysis. You can tell Tailor which configuration file to use by specifying its file path via the --config
CLI option. By default, Tailor will look for the configuration file in the directory where you will run Tailor from.
The file follows the YAML 1.1 format.
Tailor checks all files found by a recursive search starting from the directories given as command line arguments. However, it only analyzes Swift files that end in .swift
. If you would like Tailor to analyze specific files and directories, you will have to add entries for them under include
. Files and directories can also be ignored through exclude
.
Here is an example that might be used for an iOS project:
include:
- Source # Inspect all Swift files under "Source/"
exclude:
- '**Tests.swift' # Ignore Swift files that end in "Tests"
- Source/Carthage # Ignore Swift files under "Source/Carthage/"
- Source/Pods # Ignore Swift files under "Source/Pods/"
- Files and directories are specified relative to where
tailor
is run from - Paths to directories or Swift files provided explicitly via CLI will cause the
include
/exclude
rules specified in.tailor.yml
to be ignored - Exclude is given higher precedence than Include
- Tailor recognizes the Java Glob syntax
Please review the guidelines for contributing to this repository.
- Java Version 8
-
Gradle (optional,
./gradlew
may be used instead)
Tool | License |
---|---|
ANTLR 4.5 | The BSD License |
Apache Commons CLI | Apache License, Version 2.0 |
Jansi | Apache License, Version 2.0 |
Xcodeproj | MIT |
SnakeYAML | Apache License, Version 2.0 |
Tailor is released under the MIT license. See LICENSE.md for details.
Questions or need help? Get in touch via email or open an Issue!