Module: RuboCop::PathUtil
- Included in:
- Config, Cop::Util, Formatter::DisabledLinesFormatter, Formatter::HTMLFormatter::ERBContext, Formatter::JSONFormatter, Formatter::SimpleTextFormatter
- Defined in:
- lib/rubocop/path_util.rb
Overview
Common methods and behaviors for dealing with paths.
Class Method Summary collapse
-
.absolute?(path) ⇒ Boolean
Returns true for an absolute Unix or Windows path.
- .hidden?(path_component) ⇒ Boolean
- .issue_deprecation_warning(basename, pattern, config_path) ⇒ Object
-
.match_path?(pattern, path, config_path) ⇒ Boolean
TODO: The old way of matching patterns is flawed, so a new one has been introduced.
- .relative_path(path, base_dir = Dir.pwd) ⇒ Object
Class Method Details
.absolute?(path) ⇒ Boolean
Returns true for an absolute Unix or Windows path.
60 61 62 |
# File 'lib/rubocop/path_util.rb', line 60 def absolute?(path) path =~ %r{\A([A-Z]:)?/} end |
.hidden?(path_component) ⇒ Boolean
55 56 57 |
# File 'lib/rubocop/path_util.rb', line 55 def hidden?(path_component) path_component =~ /^\.[^.]/ end |
.issue_deprecation_warning(basename, pattern, config_path) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/rubocop/path_util.rb', line 45 def issue_deprecation_warning(basename, pattern, config_path) instruction = if basename == pattern ". Change to '**/#{pattern}'." elsif pattern.end_with?('**') ". Change to '#{pattern}/*'." end warn("Warning: Deprecated pattern style '#{pattern}' in " \ "#{config_path}#{instruction}") end |
.match_path?(pattern, path, config_path) ⇒ Boolean
TODO: The old way of matching patterns is flawed, so a new one has been introduced. We keep supporting the old way for a while and issue deprecation warnings when a pattern is used that produced a match with the old way but doesn’t match with the new.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rubocop/path_util.rb', line 22 def match_path?(pattern, path, config_path) case pattern when String basename = File.basename(path) old_match = basename == pattern || File.fnmatch?(pattern, path) new_match = File.fnmatch?(pattern, path, File::FNM_PATHNAME) if old_match && !new_match # Patterns like dir/**/* will produce an old match for files # beginning with dot, but not a new match. That's a special case, # though. Not what we want to handle here. And this is a match that # we overrule. Only patterns like dir/**/.* can be used to match dot # files. Hidden directories (starting with a dot) will also produce # an old match, just like hidden files. return false if path.split(File::SEPARATOR).any? { |s| hidden?(s) } issue_deprecation_warning(basename, pattern, config_path) end old_match || new_match when Regexp path =~ pattern end end |
.relative_path(path, base_dir = Dir.pwd) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/rubocop/path_util.rb', line 9 def relative_path(path, base_dir = Dir.pwd) # Optimization for the common case where path begins with the base # dir. Just cut off the first part. return path[(base_dir.length + 1)..-1] if path.start_with?(base_dir) path_name = Pathname.new(File.(path)) path_name.relative_path_from(Pathname.new(base_dir)).to_s end |