{"id":872,"url":"https://github.com/sleekbyte/tailor","last_synced_at":"2025-04-08T04:16:01.406Z","repository":{"id":32619029,"uuid":"36204628","full_name":"sleekbyte/tailor","owner":"sleekbyte","description":"Cross-platform static analyzer and linter for Swift.","archived":false,"fork":false,"pushed_at":"2021-02-27T09:28:34.000Z","size":2792,"stargazers_count":1402,"open_issues_count":27,"forks_count":47,"subscribers_count":35,"default_branch":"master","last_synced_at":"2024-10-29T17:50:18.149Z","etag":null,"topics":["apple","linter","static-analyzer","swift"],"latest_commit_sha":null,"homepage":"https://sleekbyte.github.io/tailor","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sleekbyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-25T02:11:10.000Z","updated_at":"2024-09-23T14:01:12.000Z","dependencies_parsed_at":"2022-07-17T03:30:30.751Z","dependency_job_id":null,"html_url":"https://github.com/sleekbyte/tailor","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleekbyte%2Ftailor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleekbyte%2Ftailor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleekbyte%2Ftailor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleekbyte%2Ftailor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sleekbyte","download_url":"https://codeload.github.com/sleekbyte/tailor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773719,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","linter","static-analyzer","swift"],"created_at":"2024-01-05T20:15:33.502Z","updated_at":"2025-04-08T04:16:01.374Z","avatar_url":"https://github.com/sleekbyte.png","language":"Java","funding_links":[],"categories":["Code Quality","Libs","Java","Quality [🔝](#readme)","静态分析"],"sub_categories":["Quality","Other free courses","Getting Started"],"readme":"[![Tailor](https://cloud.githubusercontent.com/assets/1350704/9867389/18ae2e06-5b3b-11e5-9b37-72a3e9621b9c.png)](https://tailor.sh)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://travis-ci.org/sleekbyte/tailor\"\u003e\n    \u003cimg src=\"https://travis-ci.org/sleekbyte/tailor.svg?branch=master\" alt=\"Build Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/sleekbyte/tailor\"\u003e\n    \u003cimg src=\"https://coveralls.io/repos/github/sleekbyte/tailor/badge.svg\" alt=\"Code Coverage\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/sleekbyte/tailor\"\u003e\n    \u003cimg src=\"https://codeclimate.com/github/sleekbyte/tailor/badges/gpa.svg\" alt=\"Code Climate\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sleekbyte/tailor/wiki\"\u003eWiki\u003c/a\u003e\n  •\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\n  •\n  \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\n  •\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\n  •\n  \u003ca href=\"#developers\"\u003eDevelopers\u003c/a\u003e\n  •\n  \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n[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.\n\n[static analysis]: https://en.wikipedia.org/wiki/Static_program_analysis\n[lint]: https://en.wikipedia.org/wiki/Lint_(software)\n\n## [Tailor][]. Cross-platform static analyzer and linter for [Swift][].\n\n[Tailor]: https://tailor.sh\n[Swift]: https://swift.org\n\nTailor supports Swift 3.0.1 out of the box and helps enforce style guidelines outlined in the [The Swift Programming Language][], [GitHub][], [Ray Wenderlich][], 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.\n\n[The Swift Programming Language]: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/\n[GitHub]: https://github.com/github/swift-style-guide\n[Ray Wenderlich]: https://github.com/raywenderlich/swift-style-guide\n[Coursera]: https://github.com/coursera/swift-style-guide\n\nTailor parses Swift source code using the primary Java target of [ANTLR](http://www.antlr.org):\n\n\u003e ANTLR is a powerful parser generator [ . . . ] widely used in academia and industry to build all sorts of languages, tools, and frameworks.\n\n— [About the ANTLR Parser Generator](http://www.antlr.org/about.html)\n\n# Getting Started\n\n## Installation\n\nRequires Java (JRE or JDK) Version 8 or above: [Java SE Downloads](http://www.oracle.com/technetwork/java/javase/downloads/index.html)\n\n### [Homebrew](http://brew.sh), [Linuxbrew](http://linuxbrew.sh)\n\n\n```bash\nbrew install tailor\n```\n\n### Mac OS X (10.10+), Linux\n\n```bash\ncurl -fsSL https://tailor.sh/install.sh | sh\n```\n\n### Windows (10+)\n\n```powershell\niex (new-object net.webclient).downloadstring('https://tailor.sh/install.ps1')\n```\n\n### Manually\n\nYou may also download Tailor via [GitHub Releases](https://github.com/sleekbyte/tailor/releases), extract the archive, and symlink the `tailor/bin/tailor` shell script to a location in your `$PATH`.\n\n### Continuous Integration\n\nIf your continuous integration server supports [Homebrew](http://brew.sh) installation, you may use the following snippet:\n\n```yaml\nbefore_install:\n  - brew update\n  - brew install tailor\n```\n\nIn other cases, use this snippet:\n\nReplace `${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`.\n\n```yaml\nbefore_script:\n  - wget ${TAILOR_RELEASE_ARCHIVE} -O /tmp/tailor.tar\n  - tar -xvf /tmp/tailor.tar\n  - export PATH=$PATH:$PWD/tailor/bin/\n```\n\n## Usage\n\nRun Tailor with a list of files and directories to analyze, or via Xcode.\n\n```bash\n$ tailor [options] [--] [[file|directory] ...]\n```\n\nHelp for Tailor is accessible via the `[-h|--help]` option.\n\n```\n$ tailor -h\nUsage: tailor [options] [--] [[file|directory] ...]\n\nPerform static analysis on Swift source files.\n\nInvoking Tailor with at least one file or directory will analyze all Swift files at those paths. If\nno paths are provided, Tailor will analyze all Swift files found in '$SRCROOT' (if defined), which\nis set by Xcode when run in a Build Phase. Tailor may be set up as an Xcode Build Phase\nautomatically with the --xcode option.\n\nOptions:\n -c,--config=\u003cpath/to/.tailor.yml\u003e             specify configuration file\n    --debug                                    print ANTLR error messages when parsing error occurs\n    --except=\u003crule1,rule2,...\u003e                 run all rules except the specified ones\n -f,--format=\u003cxcode|json|cc|html\u003e              select an output format\n -h,--help                                     display help\n    --invert-color                             invert colorized console output\n -l,--max-line-length=\u003c0-999\u003e                  maximum Line length (in characters)\n    --list-files                               display Swift source files to be analyzed\n    --max-class-length=\u003c0-999\u003e                 maximum Class length (in lines)\n    --max-closure-length=\u003c0-999\u003e               maximum Closure length (in lines)\n    --max-file-length=\u003c0-999\u003e                  maximum File length (in lines)\n    --max-function-length=\u003c0-999\u003e              maximum Function length (in lines)\n    --max-name-length=\u003c0-999\u003e                  maximum Identifier name length (in characters)\n    --max-severity=\u003cerror|warning (default)\u003e   maximum severity\n    --max-struct-length=\u003c0-999\u003e                maximum Struct length (in lines)\n    --min-name-length=\u003c1-999\u003e                  minimum Identifier name length (in characters)\n    --no-color                                 disable colorized console output\n    --only=\u003crule1,rule2,...\u003e                   run only the specified rules\n    --purge=\u003c1-999\u003e                            reduce memory usage by clearing DFA cache after\n                                               specified number of files are parsed\n    --show-rules                               show description for each rule\n -v,--version                                  display version\n    --xcode=\u003cpath/to/project.xcodeproj\u003e        add Tailor Build Phase Run Script to Xcode Project\n```\n\n# Features\n\n* [Enabling and Disabling Rules](#enabling-and-disabling-rules)\n* [Cross-Platform](#cross-platform)\n* [Automatic Xcode Integration](#automatic-xcode-integration)\n* [Colorized Output](#colorized-output)\n* [Warnings, Errors, and Failing the Build](#warnings-errors-and-failing-the-build)\n* [Disable Violations within Source Code](#disable-violations-within-source-code)\n* [Configuration](#configuration)\n* [Formatters](#formatters)\n\n## Enabling and Disabling Rules\n\nRule identifiers and \"preferred/not preferred\" code samples may be found on the [Rules](https://github.com/sleekbyte/tailor/wiki/Rules) page.\n\nRules may be individually disabled (blacklist) or enabled (whitelist) via the `--except` and `--only` command-line flags.\n\n### Except\n\n```bash\ntailor --except=brace-style,trailing-whitespace main.swift\n```\n\n### Only\n\n```bash\ntailor --only=redundant-parentheses,terminating-semicolon main.swift\n```\n\n## Cross-Platform\n\nTailor may be used on Mac OS X via your shell or integrated with Xcode, as well as on Linux and Windows.\n\n### Linux\n\n![Tailor on Ubuntu](https://cloud.githubusercontent.com/assets/1350704/9894130/2b959794-5bee-11e5-9ed2-84d035895239.png)\n\n### Windows\n\n![Tailor on Windows](https://cloud.githubusercontent.com/assets/1791760/9913016/2ff0e9a8-5cc8-11e5-8722-d5a6f9d84027.PNG)\n\n## Automatic Xcode Integration\n\nTailor can be integrated with Xcode projects using the `--xcode` option.\n\n```bash\ntailor --xcode /path/to/demo.xcodeproj/\n```\n\nThis adds the following Build Phase Run Script to your project's default target.\n![Run Script](https://cloud.githubusercontent.com/assets/1350704/11074861/5bae6b24-87f2-11e5-8167-4328b9b01174.png)\n\nTailor's output will be displayed inline within the Xcode Editor Area and as a list in the Log Navigator.\n![Xcode messages](https://cloud.githubusercontent.com/assets/1350704/11017260/b79cb162-8599-11e5-94fa-e7cf77fdc657.png)\n\n### Configure Xcode to Analyze Code Natively (⇧⌘B)\n\n1. Add a new configuration, say `Analyze`,  to the project\n\u003cimg width=\"1020\" alt=\"screen shot 2016-11-30 at 12 29 34 am\" src=\"https://cloud.githubusercontent.com/assets/1791760/20745188/fba98222-b694-11e6-8212-038333b259b3.png\"\u003e\n\n2. Modify the active scheme's `Analyze` phase to use the new build configuration created above\n\u003cimg width=\"899\" alt=\"screen shot 2016-11-30 at 12 37 08 am\" src=\"https://cloud.githubusercontent.com/assets/1791760/20745259/57e71acc-b695-11e6-9671-092f89029467.png\"\u003e\n\n3. Tweak the build phase run script to run Tailor **only** when analyzing the project (⇧⌘B)\n```bash\nif [ \"${CONFIGURATION}\" = \"Analyze\" ]; then\n    if hash tailor 2\u003e/dev/null; then\n        tailor\n    else\n        echo \"warning: Please install Tailor from https://tailor.sh\"\n    fi\nfi\n```\n\n## Colorized Output\n\nTailor uses the following color schemes to format CLI output:\n\n* **Dark theme** (enabled by default)\n  ![Dark theme](https://cloud.githubusercontent.com/assets/1791760/9807444/fde82de6-5870-11e5-9e20-05a9d736e136.png)\n\n* **Light theme** (enabled via `--invert-color` option)\n  ![Light theme](https://cloud.githubusercontent.com/assets/1791760/9807312/129ce45e-586f-11e5-8e26-fe818af0ec09.png)\n\n* **No color theme** (enabled via `--no-color` option)\n  ![No color](https://cloud.githubusercontent.com/assets/1791760/9807318/261811d4-586f-11e5-9010-0e627431bbb9.png)\n\n## Warnings, Errors, and Failing the Build\n\n`--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.\n\nThis 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.\n\n## Disable Violations within Source Code\n\nViolations on a specific line may be disabled with a **trailing** single-line comment.\n\n```swift\nimport Foundation; // tailor:disable\n```\n\nAdditionally, violations in a given block of code can be disabled by **enclosing the block** within `tailor:off` and `tailor:on` comments.\n\n```swift\n// tailor:off\nimport Foundation;\nimport UIKit;\nimport CoreData;\n// tailor:on\n\nclass Demo() {\n  // Define public members here\n}\n```\n\n### Note\n\n* `// tailor:off` and `// tailor:on` comments must be paired\n\n## Configuration\n\nThe behavior of Tailor can be customized via the `.tailor.yml` configuration file. It enables you to\n\n* include/exclude certain files and directories from analysis\n* enable and disable specific analysis rules\n* specify output format\n* specify CLI output color scheme\n\nYou 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.\n\nThe file follows the [YAML 1.1](http://www.yaml.org/spec/1.1/) format.\n\n### Including/Excluding files\n\nTailor 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`.\n\nHere is an example that might be used for an iOS project:\n\n```yaml\ninclude:\n    - Source            # Inspect all Swift files under \"Source/\"\nexclude:\n    - '**Tests.swift'   # Ignore Swift files that end in \"Tests\"\n    - Source/Carthage   # Ignore Swift files under \"Source/Carthage/\"\n    - Source/Pods       # Ignore Swift files under \"Source/Pods/\"\n```\n\n#### Notes\n\n* Files and directories are specified relative to where `tailor` is run from\n* Paths to directories or Swift files provided explicitly via CLI will cause the `include`/`exclude` rules specified in `.tailor.yml` to be ignored\n* *Exclude* is given higher precedence than *Include*\n* Tailor recognizes the [Java Glob](https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob) syntax\n\n### Enabling/Disabling rules\n\nTailor allows you to individually disable (blacklist) or enable (whitelist) rules via the `except` and `only` labels.\n\nHere is an example showcasing how to enable certain rules:\n\n```yaml\n# Tailor will solely check for violations to the following rules\nonly:\n    - upper-camel-case\n    - trailing-closure\n    - forced-type-cast\n    - redundant-parentheses\n```\n\nHere is an example showcasing how to disable certain rules:\n\n```yaml\n# Tailor will check for violations to all rules except for the following ones\nexcept:\n    - parenthesis-whitespace\n    - lower-camel-case\n```\n\n#### Notes\n\n* *only* is given precedence over *except*\n* Rules that are explicitly included/excluded via CLI will cause the `only`/`except` rules specified in `.tailor.yml` to be ignored\n\n### Specifying output format\n\nTailor allows you to specify the output format (`xcode`/`json`) via the `format` label.\n\nHere is an example showcasing how to specify the output format:\n\n```yaml\n# The output format will now be in JSON\nformat: json\n```\n\n#### Note\n\n* The output format explicitly specified via CLI will cause the output format defined in `.tailor.yml` to be ignored\n\n### Specifying CLI output color scheme\n\nTailor allows you to specify the CLI output color schemes  via the `color` label.  To disable colored output, set `color` to `disable`. To invert the color scheme, set `color` to `invert`.\n\nHere is an example showcasing how to specify the CLI output color scheme:\n\n```yaml\n# The CLI output will not be colored\ncolor: disable\n```\n\n#### Note\n\n* The CLI output color scheme explicitly specified via CLI will cause the output color scheme  defined in `.tailor.yml` to be ignored\n\n## Formatters\n\nTailor's output format may be customized via the `-f`/`--format` option. The Xcode formatter is selected by default.\n\n### Xcode Formatter (default)\n\nThe default `xcode` formatter outputs violation messages according to the format expected by Xcode to be displayed inline within the Xcode Editor Area and as a list in the Log Navigator. This format is also as human-friendly as possible on the console.\n\n```\n$ tailor main.swift\n\n********** /main.swift **********\n/main.swift:1:    warning: [multiple-imports] Imports should be on separate lines\n/main.swift:1:18: warning: [terminating-semicolon] Statements should not terminate with a semicolon\n/main.swift:3:05: warning: [constant-naming] Global Constant should be either lowerCamelCase or UpperCamelCase\n/main.swift:5:07: warning: [redundant-parentheses] Conditional clause should not be enclosed within parentheses\n/main.swift:7:    warning: [terminating-newline] File should terminate with exactly one newline character ('\\n')\n\nAnalyzed 1 file, skipped 0 files, and detected 5 violations (0 errors, 5 warnings).\n```\n\n### [JSON](http://www.json.org) Formatter\n\nThe `json` formatter outputs an array of violation messages for each file, and a `summary` object indicating the parsing results and the violation counts.\n\n```\n$ tailor -f json main.swift\n{\n  \"files\": [\n    {\n      \"path\": \"/main.swift\",\n      \"violations\": [\n        {\n          \"severity\": \"warning\",\n          \"rule\": \"constant-naming\",\n          \"location\": {\n            \"line\": 1,\n            \"column\": 5\n          },\n          \"message\": \"Global Constant should be either lowerCamelCase or UpperCamelCase\"\n        }\n      ],\n      \"parsed\": true\n    }\n  ],\n  \"summary\": {\n    \"violations\": 1,\n    \"warnings\": 1,\n    \"analyzed\": 1,\n    \"errors\": 0,\n    \"skipped\": 0\n  }\n}\n```\n\n### HTML Formatter\n\nThe `html` formatter outputs a complete HTML document that should be written to a file.\n\n```\ntailor -f html main.swift \u003e tailor.html\n```\n\n![HTML format](https://cloud.githubusercontent.com/assets/1350704/14971733/236fd5b0-10a3-11e6-9a02-fa1e70702e47.png)\n\n# Developers\n\nPlease review the [guidelines for contributing](https://github.com/sleekbyte/tailor/blob/master/.github/CONTRIBUTING.md) to this repository.\n\n## Development Environment\n\n* [Java Version 8](http://www.oracle.com/technetwork/java/javase/downloads/index.html)\n* [Gradle](https://gradle.org) (optional, `./gradlew` may be used instead)\n* [Ruby 2.0.0+](https://www.ruby-lang.org/en/)\n* [Bundler](http://bundler.io)\n\n# External Tools and Libraries\n\n## Development \u0026 Runtime\n\nTool                                                                    | License\n----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------\n[ANTLR 4.5](https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Home) | [The BSD License](http://www.antlr.org/license.html)\n[Apache Commons CLI](http://commons.apache.org/proper/commons-cli/)     | [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\n[Jansi](https://github.com/fusesource/jansi)                            | [Apache License, Version 2.0](https://github.com/fusesource/jansi/blob/master/license.txt)\n[Xcodeproj](https://github.com/CocoaPods/Xcodeproj)                     | [MIT](https://github.com/CocoaPods/Xcodeproj/blob/master/LICENSE)\n[SnakeYAML](https://bitbucket.org/asomov/snakeyaml)                     | [Apache License, Version 2.0](https://bitbucket.org/asomov/snakeyaml/raw/8939e0aa430d25b3b49b353508b23e072dd02171/LICENSE.txt)\n[Gson](https://github.com/google/gson)                                  | [Apache License, Version 2.0](https://github.com/google/gson/blob/master/LICENSE)\n[Mustache.java](https://github.com/spullara/mustache.java)              | [Apache License, Version 2.0](https://github.com/spullara/mustache.java/blob/master/LICENSE)\n\n## Development Only\n\nTool                                                         | License\n------------------------------------------------------------ | ----------------------------------------------------------------------------------------\n[Gradle](https://gradle.org)                                 | [Apache License, Version 2.0](http://gradle.org/license/)\n[Travis CI](https://travis-ci.org)                           | [Free for Open Source Projects](https://travis-ci.com/plans)\n[Mockito](http://mockito.org)                                | [MIT](https://code.google.com/p/mockito/wiki/License)\n[JUnit](http://junit.org)                                    | [Eclipse Public License 1.0](http://junit.org/license)\n[Java Hamcrest](http://hamcrest.org/JavaHamcrest/)           | [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)\n[FindBugs](http://findbugs.sourceforge.net)                  | [GNU Lesser General Public License](http://findbugs.sourceforge.net/manual/license.html)\n[Checkstyle](http://checkstyle.sourceforge.net)              | [GNU Lesser General Public License](http://checkstyle.sourceforge.net/license.html)\n[PMD](http://pmd.sourceforge.net)                            | [BSD-style](http://pmd.sourceforge.net/pmd-5.3.2/license.html)\n[JaCoCo](http://eclemma.org/jacoco/)                         | [Eclipse Public License v1.0](http://eclemma.org/license.html)\n[Coveralls](https://coveralls.io)                            | [Free for Open Source](https://coveralls.io/pricing)\n[Bundler](http://bundler.io)                                 | [MIT](https://github.com/bundler/bundler/blob/master/LICENSE.md)\n[Codacy](https://www.codacy.com)                             | [Free for Open Source](https://www.codacy.com/pricing)\n[System Rules](http://stefanbirkner.github.io/system-rules/) | [Common Public License 1.0](https://stefanbirkner.github.io/system-rules/license.html)\n[Ronn](https://github.com/rtomayko/ronn)                     | [MIT](https://github.com/rtomayko/ronn/blob/master/COPYING)\n\n# License\n\nTailor is released under the MIT license. See [LICENSE.md](https://github.com/sleekbyte/tailor/blob/master/LICENSE.md) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsleekbyte%2Ftailor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsleekbyte%2Ftailor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsleekbyte%2Ftailor/lists"}