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