Giter VIP home page Giter VIP logo

danger-ruby-swiftlint's Introduction

Danger SwiftLint Build Status

A Danger Ruby plugin for SwiftLint that runs on macOS.

Installation

Add this line to your Gemfile:

gem 'danger-swiftlint'

SwiftLint also needs to be installed before you run Danger, which you can do via Homebrew or a Brewfile. On CI, this is done for you when the gem is installed.

Usage

The easiest way to use is just add this to your Dangerfile:

swiftlint.lint_files

By default danger-swiftlint will lint added and modified files.

swiftlint.config_file = '.swiftlint.yml'
swiftlint.binary_path = '/path/to/swiftlint'
swiftlint.max_num_violations = 20
swiftlint.lint_files

If you want the lint result shows in diff instead of comment, you can use inline_mode option. Violations that out of the diff will show in danger's fail or warn section.

swiftlint.lint_files inline_mode: true

If you want different configurations on different directories, you can specify the directory. Note: Run swiftlint.lint_files per specified directory then.

swiftlint.directory = "Directory A"

If you want lint errors to fail Danger, you can use fail_on_error option.

swiftlint.lint_files fail_on_error: true

If you need to specify options for swiftlint that can only be specified by command line arguments, use the additional_swiftlint_args option.

swiftlint.lint_files additional_swiftlint_args: '--lenient'

By default, only files that were added or modified are linted.

It's not possible to use nested configurations in that case, because Danger SwiftLint lints each file on it's own, and by doing that the nested configuration is disabled. If you want to learn more details about this, read the whole issue here.

However, you can use the lint_all_files option to lint all the files. In that case, Danger SwiftLint doesn't lint files individually, which makes nested configuration to work. It'd be the same as you were running swiftlint on the root folder:

swiftlint.lint_all_files = true
swiftlint.lint_files

It's also possible to pass a block to filter out any violations after swiftlint has been run. Here's an example filtering out all violations that didn't occur in the current github PR, using the third party gem git_diff_parser:

require 'git_diff_parser'

diff = GitDiffParser::Patches.parse(github.pr_diff)
dir = "#{Dir.pwd}/"
swiftlint.lint_files(inline_mode: true) { |violation|
  diff_filename = violation['file'].gsub(dir, '')
  file_patch = diff.find_patch_by_file(diff_filename)
  file_patch != nil && file_patch.changed_lines.any? { |line| line.number == violation['line']}
}

Or, by passing the no_comment parameter, you can completely manage the commenting of issues, warnings and errors yourself. An example usage might be using GitHub reviews, or custom filtering logic. Note: When this parameter is set to true, all other parameters except files and additional_swiftlint_args are ignored.

swiftlint.lint_files(no_comment: true)

# Now, you can handle the combined warnings + errors, or each separately commenting
swiftlint.issues    # contains combined warnings + errors
swiftlint.warnings  # just warnings
swiftlint.errors    # just errors

You can use the SWIFTLINT_VERSION environment variable to override the default version installed via the rake install task.

Finally, if something's not working correctly, you can debug this plugin by using setting swiftlint.verbose = true.

Attribution

Original structure, sequence, and organization of repo taken from danger-prose by David Grandinetti.

License

MIT

danger-ruby-swiftlint's People

Contributors

ashfurrow avatar austinate avatar avdlee avatar caffeineflo avatar chwo avatar dependabot[bot] avatar dirtyhabits97 avatar giginet avatar gmanojbabu avatar hannesoid avatar johnhammerlund avatar kaspik avatar klaaspieter avatar kylefleming avatar leonhartx avatar liamnichols avatar marcelofabri avatar mfclarke avatar mokagio avatar neilkimmett avatar omirho avatar paweldudek avatar pmwiseman avatar pr0ger avatar ra1028 avatar sxcore avatar taisukeh avatar thii avatar tikidunpon avatar victorg1991 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.