Sha256: aafe3fa5150a2fb730b3fd4a00a79b6977df504d1b409d07cae705972311e4a8

Contents?: true

Size: 922 Bytes

Versions: 1

Compression:

Stored size: 922 Bytes

Contents

# frozen_string_literal: true

require 'pathname'

module RuboCop
  # Common methods for finding files.
  module FileFinder
    def self.root_level=(level)
      @root_level = level
    end

    def self.root_level?(path)
      @root_level == path.to_s
    end

    def find_file_upwards(filename, start_dir)
      traverse_files_upwards(filename, start_dir) do |file|
        # minimize iteration for performance
        return file if file
      end
    end

    def find_last_file_upwards(filename, start_dir)
      last_file = nil
      traverse_files_upwards(filename, start_dir) do |file|
        last_file = file
      end
      last_file
    end

    private

    def traverse_files_upwards(filename, start_dir)
      Pathname.new(start_dir).expand_path.ascend do |dir|
        break if FileFinder.root_level?(dir)

        file = dir + filename
        yield(file.to_s) if file.exist?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbhint-0.87.1.rc1 lib/rubocop/file_finder.rb