Sha256: f64e8d10c6a89a0bb24e23b3da42345b63fd3b545b671b5dffbc07a4cfaca616

Contents?: true

Size: 1.82 KB

Versions: 10

Compression:

Stored size: 1.82 KB

Contents

require 'find'

module SCSSLint
  # Finds all SCSS files that should be linted given a set of paths, globs, and
  # configuration.
  class FileFinder
    # List of extensions of files to include when only a directory is specified
    # as a path.
    VALID_EXTENSIONS = %w[.css .scss]

    # Create a {FileFinder}.
    #
    # @param config [SCSSLint::Config]
    def initialize(config)
      @config = config
    end

    # Find all files that match given the specified options.
    #
    # @param patterns [Array<String>] a list of file paths and glob patterns
    def find(patterns)
      # If no explicit patterns given, use patterns listed in config
      patterns = @config.scss_files if patterns.empty?

      matched_files = extract_files_from(patterns)
      if matched_files.empty?
        raise SCSSLint::Exceptions::NoFilesError,
              "No SCSS files matched by the patterns: #{patterns.join(' ')}"
      end

      filtered_files = matched_files.reject { |file| @config.excluded_file?(file) }
      if filtered_files.empty?
        raise SCSSLint::Exceptions::AllFilesFilteredError,
              "All files matched by the patterns [#{patterns.join(', ')}] " \
              "were excluded by the patterns: [#{@config.exclude_patterns.join(', ')}]"
      end

      filtered_files
    end

  private

    # @param list [Array]
    def extract_files_from(list)
      files = []

      list.each do |file|
        if File.directory?(file)
          Find.find(file) do |f|
            files << f if scssish_file?(f)
          end
        else
          files << file # Otherwise include file as-is
        end
      end

      files.uniq
    end

    # @param file [String]
    # @return [true,false]
    def scssish_file?(file)
      return false unless FileTest.file?(file)

      VALID_EXTENSIONS.include?(File.extname(file))
    end
  end
end

Version data entries

10 entries across 10 versions & 3 rubygems

Version Path
scss_lint-0.41.0 lib/scss_lint/file_finder.rb
scss_lint-0.40.1 lib/scss_lint/file_finder.rb
scss_lint-0.40.0 lib/scss_lint/file_finder.rb
scss_lint-0.39.0 lib/scss_lint/file_finder.rb
scss_lint-0.38.0 lib/scss_lint/file_finder.rb
scss-lint-0.38.0 lib/scss_lint/file_finder.rb
scss-lint-bliss-1.0.0 lib/scss_lint/file_finder.rb
scss-lint-0.37.0 lib/scss_lint/file_finder.rb
scss-lint-0.36.1 lib/scss_lint/file_finder.rb
scss-lint-0.36.0 lib/scss_lint/file_finder.rb