Class: RuboCop::Cop::Utils::FormatString::FormatSequence

Inherits:
Object
  • Object
show all
Defined in:
lib/rubocop/cop/utils/format_string.rb

Overview

The syntax of a format sequence is as follows.

%[flags][width][.precision]type

A format sequence consists of a percent sign, followed by optional flags, width, and precision indicators, then terminated with a field type character.

For more complex formatting, Ruby supports a reference by name.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(match) ⇒ FormatSequence

Returns a new instance of FormatSequence.



46
47
48
49
50
51
52
53
54
55
# File 'lib/rubocop/cop/utils/format_string.rb', line 46

def initialize(match)
  @source = match[0]
  @begin_pos = match.begin(0)
  @end_pos = match.end(0)
  @flags = match[:flags].to_s + match[:more_flags].to_s
  @width = match[:width]
  @precision = match[:precision]
  @name = match[:name]
  @type = match[:type]
end

Instance Attribute Details

#begin_posObject (readonly)

Returns the value of attribute begin_pos.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def begin_pos
  @begin_pos
end

#end_posObject (readonly)

Returns the value of attribute end_pos.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def end_pos
  @end_pos
end

#flagsObject (readonly)

Returns the value of attribute flags.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def flags
  @flags
end

#nameObject (readonly)

Returns the value of attribute name.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def name
  @name
end

#precisionObject (readonly)

Returns the value of attribute precision.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def precision
  @precision
end

#typeObject (readonly)

Returns the value of attribute type.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def type
  @type
end

#widthObject (readonly)

Returns the value of attribute width.



44
45
46
# File 'lib/rubocop/cop/utils/format_string.rb', line 44

def width
  @width
end

Instance Method Details

#annotated?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/rubocop/cop/utils/format_string.rb', line 61

def annotated?
  name && @source.include?('<')
end

#arityObject

Number of arguments required for the format sequence



70
71
72
# File 'lib/rubocop/cop/utils/format_string.rb', line 70

def arity
  @source.scan('*').count + 1
end

#max_digit_dollar_numObject



74
75
76
# File 'lib/rubocop/cop/utils/format_string.rb', line 74

def max_digit_dollar_num
  @source.scan(DIGIT_DOLLAR).map { |(digit_dollar_num)| digit_dollar_num.to_i }.max
end

#percent?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/rubocop/cop/utils/format_string.rb', line 57

def percent?
  type == '%'
end

#styleObject



78
79
80
81
82
83
84
85
86
# File 'lib/rubocop/cop/utils/format_string.rb', line 78

def style
  if annotated?
    :annotated
  elsif template?
    :template
  else
    :unannotated
  end
end

#template?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/rubocop/cop/utils/format_string.rb', line 65

def template?
  name && @source.include?('{')
end