class RSpec::Core::RakeTask

def file_inclusion_specification

def file_inclusion_specification
  if ENV['SPEC']
    FileList[ ENV['SPEC']].sort
  elsif Array === pattern || File.exist?(pattern)
    # Before RSpec 3.1, we used `FileList` to get the list of matched files, and
    # then pass that along to the `rspec` command. Starting with 3.1, we prefer to
    # pass along the pattern as-is to the `rspec` command, for 3 reasons:
    #
    #   * It's *much* less verbose to pass one `--pattern` option than a long list of files.
    #   * It ensures `task.pattern` and `--pattern` have the same behavior.
    #   * It fixes a bug, where `task.pattern = pattern_that_matches_no_files` would run
    #     *all* files because it would cause no pattern or file args to get passed to `rspec`,
    #     which causes all files to get run.
    #
    # However, `FileList` is *far* more flexible than the `--pattern` option. Specifically, it
    # supports individual files and directories, as well as arrays of files, directories and globs.
    #
    # For backwards compatibility, we have to fall back to using FileList if the user has passed
    # a `pattern` option that will not work with `--pattern`.
    #
    # TODO: consider deprecating support for this and removing it in RSpec 4.
    FileList[pattern].sort.map(&:shellescape)
  else
    "--pattern #{pattern.shellescape}"
  end
end