123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::MagicComment Abstract

Relationships & Source Files
Namespace Children
Classes:
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/rubocop/magic_comment.rb

Overview

This class is abstract.

parent of three different magic comment handlers

Parse different formats of magic comments.

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(comment) ⇒ MagicComment

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 32

def initialize(comment)
  @comment = comment
end

Class Method Details

.parse(comment) ⇒ MagicComment

Detect magic comment format and pass it to the appropriate wrapper.

Parameters:

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 23

def self.parse(comment)
  case comment
  when EmacsComment::REGEXP then EmacsComment.new(comment)
  when VimComment::REGEXP   then VimComment.new(comment)
  else
    SimpleComment.new(comment)
  end
end

Instance Attribute Details

#any?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 36

def any?
  frozen_string_literal_specified? ||
    encoding_specified? ||
    shareable_constant_value_specified? ||
    typed_specified?
end

#encoding_specified?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 104

def encoding_specified?
  specified?(encoding)
end

#frozen_string_literal?Boolean (readonly)

Does the magic comment enable the frozen string literal feature.

Test whether the frozen string literal value is true. Cannot just return #frozen_string_literal since an invalid magic comment like # frozen_string_literal: yes is possible and the truthy value 'yes' does not actually enable the feature

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 55

def frozen_string_literal?
  frozen_string_literal == true
end

#frozen_string_literal_specified?Boolean (readonly)

Was a magic comment for the frozen string literal found?

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 70

def frozen_string_literal_specified?
  specified?(frozen_string_literal)
end

#shareable_constant_value_specified?Boolean (readonly)

Was a shareable_constant_value specified?

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 77

def shareable_constant_value_specified?
  specified?(shareable_constant_value)
end

#typed_specified?Boolean (readonly)

Was the Sorbet #typed sigil specified?

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 111

def typed_specified?
  specified?(extract_typed)
end

#valid?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 43

def valid?
  @comment.start_with?('#') && any?
end

#valid_literal_value?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 59

def valid_literal_value?
  [true, false].include?(frozen_string_literal)
end

#valid_shareable_constant_value?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 63

def valid_shareable_constant_value?
  %w[none literal experimental_everything experimental_copy].include?(shareable_constant_value)
end

Instance Method Details

#extract(pattern) ⇒ String? (private)

Match the entire comment string with a pattern and take the first capture.

Parameters:

  • pattern (Regexp)

Returns:

  • (String)

    if pattern matched

  • (nil)

    otherwise

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 131

def extract(pattern)
  @comment[pattern, :token]
end

#frozen_string_literalBoolean, ... (readonly)

Expose the frozen_string_literal value coerced to a boolean if possible.

Returns:

  • (Boolean)

    if value is true or false

  • (nil)

    if frozen_string_literal comment isn’t found

  • (String)

    if comment is found but isn’t true or false

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 86

def frozen_string_literal
  return unless (setting = extract_frozen_string_literal)

  case setting
  when 'true'  then true
  when 'false' then false
  else
    setting
  end
end

#shareable_constant_valueString

Expose the shareable_constant_value value coerced to a boolean if possible.

Returns:

  • (String)

    for shareable_constant_value config

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 100

def shareable_constant_value
  extract_shareable_constant_value
end

#specified?(value) ⇒ Boolean (private)

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 121

def specified?(value)
  !value.nil?
end

#typed

[ GitHub ]

  
# File 'lib/rubocop/magic_comment.rb', line 115

def typed
  extract_typed
end