mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
19c370aee0
* Optimize Severity#symbol * Remove empty else branches * Optimize map+compact/flatten calls * Misc stylistic refactors
37 lines
939 B
Crystal
37 lines
939 B
Crystal
module Ameba
|
|
# Helper module that is utilizes helpers for working with globs.
|
|
module GlobUtils
|
|
# Returns all files that match specified globs.
|
|
# Globs can have wildcards or be rejected:
|
|
#
|
|
# ```
|
|
# find_files_by_globs(["**/*.cr", "!lib"])
|
|
# ```
|
|
#
|
|
def find_files_by_globs(globs)
|
|
rejected = rejected_globs(globs)
|
|
selected = globs - rejected
|
|
|
|
expand(selected) - expand(rejected.map! { |p| p[1..-1] })
|
|
end
|
|
|
|
# Expands globs. Globs can point to files or even directories.
|
|
#
|
|
# ```
|
|
# expand(["spec/*.cr", "src"]) # => all files in src folder + first level specs
|
|
# ```
|
|
#
|
|
def expand(globs)
|
|
globs.flat_map do |glob|
|
|
glob += "/**/*.cr" if File.directory?(glob)
|
|
Dir[glob]
|
|
end.uniq!
|
|
end
|
|
|
|
private def rejected_globs(globs)
|
|
globs.select do |glob|
|
|
glob.starts_with?('!') && !File.exists?(glob)
|
|
end
|
|
end
|
|
end
|
|
end
|