Sha256: 7118ea06a002f70179de0b1edc55b06b9916a11082da6e4fc53aab0a88a16173

Contents?: true

Size: 1.96 KB

Versions: 26

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

# A wrapper to use SwiftLint via a Ruby API.
class Swiftlint
  def initialize(swiftlint_path = nil)
    @swiftlint_path = swiftlint_path
  end

  # Runs swiftlint
  def run(cmd = 'lint', additional_swiftlint_args = '', options = {})
    # change pwd before run swiftlint
    Dir.chdir options.delete(:pwd) if options.key? :pwd

    # run swiftlint with provided options
    `#{swiftlint_path} #{cmd} #{swiftlint_arguments(options, additional_swiftlint_args)}`
  end

  # Shortcut for running the lint command
  def lint(options, additional_swiftlint_args)
    run('lint', additional_swiftlint_args, options)
  end

  # Return true if swiftlint is installed or false otherwise
  def installed?
    File.exist?(swiftlint_path)
  end

  # Return swiftlint execution path
  def swiftlint_path
    @swiftlint_path || default_swiftlint_path
  end

  private

  # Parse options into shell arguments how swift expect it to be
  # more information: https://github.com/Carthage/Commandant
  # @param options (Hash) hash containing swiftlint options
  def swiftlint_arguments(options, additional_swiftlint_args)
    (options.
      # filter not null
      reject { |_key, value| value.nil? }.
      # map booleans arguments equal true
      map { |key, value| value.is_a?(TrueClass) ? [key, ''] : [key, value] }.
      # map booleans arguments equal false
      map { |key, value| value.is_a?(FalseClass) ? ["no-#{key}", ''] : [key, value] }.
      # replace underscore by hyphen
      map { |key, value| [key.to_s.tr('_', '-'), value] }.
      # prepend '--' into the argument
      map { |key, value| ["--#{key}", value] }.
      # reduce everything into a single string
      reduce('') { |args, option| "#{args} #{option[0]} #{option[1]}" } +
      " #{additional_swiftlint_args}").
      # strip leading spaces
      strip
  end

  # Path where swiftlint should be found
  def default_swiftlint_path
    File.expand_path(File.join(File.dirname(__FILE__), 'bin', 'swiftlint'))
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
danger-swiftlint-0.22.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.21.1 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.21.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.20.1 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.20.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.19.2 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.19.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.18.2 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.18.1 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.18.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.5 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.4 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.3 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.2 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.1 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.17.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.16.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.15.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.14.0 ext/swiftlint/swiftlint.rb
danger-swiftlint-0.13.1 ext/swiftlint/swiftlint.rb