class Pod::Command::Lib::Lint

Public Class Methods

new(argv) click to toggle source
Calls superclass method Pod::Command::new
# File lib/cocoapods/command/lib/lint.rb, line 45
def initialize(argv)
  @quick               = argv.flag?('quick')
  @allow_warnings      = argv.flag?('allow-warnings')
  @clean               = argv.flag?('clean', true)
  @fail_fast           = argv.flag?('fail-fast', false)
  @subspecs            = argv.flag?('subspecs', true)
  @only_subspec        = argv.option('subspec')
  @use_frameworks      = !argv.flag?('use-libraries')
  @use_modular_headers = argv.flag?('use-modular-headers')
  @use_static_frameworks = argv.flag?('use-static-frameworks')
  @source_urls         = argv.option('sources', Pod::TrunkSource::TRUNK_REPO_URL).split(',')
  @platforms           = argv.option('platforms', '').split(',')
  @private             = argv.flag?('private', false)
  @swift_version       = argv.option('swift-version', nil)
  @include_podspecs    = argv.option('include-podspecs', nil)
  @external_podspecs   = argv.option('external-podspecs', nil)
  @skip_import_validation = argv.flag?('skip-import-validation', false)
  @skip_tests          = argv.flag?('skip-tests', false)
  @test_specs          = argv.option('test-specs', nil)&.split(',')
  @analyze             = argv.flag?('analyze', false)
  @podspecs_paths      = argv.arguments!
  @configuration       = argv.option('configuration', nil)
  @validation_dir      = argv.option('validation-dir', nil)
  super
end
options() click to toggle source
Calls superclass method Pod::Command::options
# File lib/cocoapods/command/lib/lint.rb, line 15
def self.options
  [
    ['--quick', 'Lint skips checks that would require to download and build the spec'],
    ['--allow-warnings', 'Lint validates even if warnings are present'],
    ['--subspec=NAME', 'Lint validates only the given subspec'],
    ['--no-subspecs', 'Lint skips validation of subspecs'],
    ['--no-clean', 'Lint leaves the build directory intact for inspection'],
    ['--fail-fast', 'Lint stops on the first failing platform or subspec'],
    ['--use-libraries', 'Lint uses static libraries to install the spec'],
    ['--use-modular-headers', 'Lint uses modular headers during installation'],
    ['--use-static-frameworks', 'Lint uses static frameworks during installation'],
    ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to pull dependent pods ' \
      "(defaults to #{Pod::TrunkSource::TRUNK_REPO_URL}). Multiple sources must be comma-delimited"],
    ['--platforms=ios,macos', 'Lint against specific platforms (defaults to all platforms supported by the ' \
      'podspec). Multiple platforms must be comma-delimited'],
    ['--private', 'Lint skips checks that apply only to public specs'],
    ['--swift-version=VERSION', 'The `SWIFT_VERSION` that should be used to lint the spec. ' \
     'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file'],
    ['--include-podspecs=**/*.podspec', 'Additional ancillary podspecs which are used for linting via :path'],
    ['--external-podspecs=**/*.podspec', 'Additional ancillary podspecs which are used for linting '\
      'via :podspec. If there are --include-podspecs, then these are removed from them'],
    ['--skip-import-validation', 'Lint skips validating that the pod can be imported'],
    ['--skip-tests', 'Lint skips building and running tests during validation'],
    ['--test-specs=test-spec1,test-spec2,etc', 'List of test specs to run'],
    ['--analyze', 'Validate with the Xcode Static Analysis tool'],
    ['--configuration=CONFIGURATION', 'Build using the given configuration (defaults to Release)'],
    ['--validation-dir', 'The directory to use for validation. If none is specified a temporary directory will be used.'],
  ].concat(super)
end

Public Instance Methods

run() click to toggle source
# File lib/cocoapods/command/lib/lint.rb, line 75
def run
  UI.puts
  podspecs_to_lint.each do |podspec|
    validator                = Validator.new(podspec, @source_urls, @platforms)
    validator.local          = true
    validator.quick          = @quick
    validator.no_clean       = !@clean
    validator.fail_fast      = @fail_fast
    validator.allow_warnings = @allow_warnings
    validator.no_subspecs    = !@subspecs || @only_subspec
    validator.only_subspec   = @only_subspec
    validator.use_frameworks = @use_frameworks
    validator.use_modular_headers = @use_modular_headers
    validator.use_static_frameworks = @use_static_frameworks
    validator.ignore_public_only_results = @private
    validator.swift_version = @swift_version
    validator.skip_import_validation = @skip_import_validation
    validator.skip_tests = @skip_tests
    validator.test_specs = @test_specs
    validator.analyze = @analyze
    validator.include_podspecs = @include_podspecs
    validator.external_podspecs = @external_podspecs
    validator.configuration = @configuration
    validator.validation_dir = @validation_dir
    validator.validate

    unless @clean
      UI.puts "Pods workspace available at `#{validator.validation_dir}/App.xcworkspace` for inspection."
      UI.puts
    end
    if validator.validated?
      UI.puts "#{validator.spec.name} passed validation.".green
    else
      spec_name = podspec
      spec_name = validator.spec.name if validator.spec
      message = "#{spec_name} did not pass validation, due to #{validator.failure_reason}."

      if @clean
        message << "\nYou can use the `--no-clean` option to inspect " \
          'any issue.'
      end
      raise Informative, message
    end
  end
end
validate!() click to toggle source
Calls superclass method
# File lib/cocoapods/command/lib/lint.rb, line 71
def validate!
  super
end

Private Instance Methods

podspecs_to_lint() click to toggle source

@return [Pathname] The path of the podspec found in the current

working directory.

@raise If no podspec is found. @raise If multiple podspecs are found.

# File lib/cocoapods/command/lib/lint.rb, line 133
def podspecs_to_lint
  if !@podspecs_paths.empty?
    Array(@podspecs_paths)
  else
    podspecs = Pathname.glob(Pathname.pwd + '*.podspec{.json,}')
    if podspecs.count.zero?
      raise Informative, 'Unable to find a podspec in the working ' \
        'directory'
    end
    podspecs
  end
end