class RuboCop::Cop::Lint::ScriptPermission

This cop checks if a file which has a shebang line as its first line is granted execute permission.

Constants

MSG
SHEBANG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/lint/script_permission.rb, line 21
def autocorrect(node)
  lambda do |_corrector|
    FileUtils.chmod('+x', node.loc.expression.source_buffer.name)
  end
end
investigate(processed_source) click to toggle source
# File lib/rubocop/cop/lint/script_permission.rb, line 12
def investigate(processed_source)
  return if Platform.windows?
  return unless start_with_shebang?(processed_source)
  return if executable?(processed_source)
  comment = processed_source.comments[0]
  message = format_message_from(processed_source)
  add_offense(comment, message: message)
end

Private Instance Methods

executable?(processed_source) click to toggle source
# File lib/rubocop/cop/lint/script_permission.rb, line 34
def executable?(processed_source)
  # Returns true if stat is executable or if the operating system
  # doesn't distinguish executable files from nonexecutable files.
  # See at: https://github.com/ruby/ruby/blob/ruby_2_4/file.c#L5362
  File.stat(processed_source.buffer.name).executable?
end
format_message_from(processed_source) click to toggle source
# File lib/rubocop/cop/lint/script_permission.rb, line 41
def format_message_from(processed_source)
  basename = File.basename(processed_source.buffer.name)
  format(MSG, basename)
end
start_with_shebang?(processed_source) click to toggle source
# File lib/rubocop/cop/lint/script_permission.rb, line 29
def start_with_shebang?(processed_source)
  return false if processed_source[0].nil?
  processed_source[0].start_with?(SHEBANG)
end