leftovers 0.2.3 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/README.md +65 -49
  4. data/docs/Configuration.md +627 -0
  5. data/exe/leftovers +2 -2
  6. data/leftovers.gemspec +13 -6
  7. data/lib/config/attr_encrypted.yml +3 -4
  8. data/lib/config/audited.yml +9 -4
  9. data/lib/config/datagrid.yml +1 -1
  10. data/lib/config/flipper.yml +1 -3
  11. data/lib/config/graphql.yml +15 -13
  12. data/lib/config/okcomputer.yml +1 -3
  13. data/lib/config/parser.yml +89 -91
  14. data/lib/config/rails.yml +126 -107
  15. data/lib/config/redcarpet.yml +35 -38
  16. data/lib/config/rollbar.yml +1 -3
  17. data/lib/config/rspec.yml +18 -10
  18. data/lib/config/ruby.yml +42 -49
  19. data/lib/config/selenium-webdriver.yml +19 -0
  20. data/lib/config/sidekiq.yml +4 -8
  21. data/lib/config/will_paginate.yml +12 -14
  22. data/lib/leftovers.rb +66 -54
  23. data/lib/leftovers/ast.rb +8 -0
  24. data/lib/leftovers/ast/builder.rb +6 -3
  25. data/lib/leftovers/ast/node.rb +66 -107
  26. data/lib/leftovers/backports.rb +24 -40
  27. data/lib/leftovers/cli.rb +27 -15
  28. data/lib/leftovers/collector.rb +8 -11
  29. data/lib/leftovers/config.rb +38 -13
  30. data/lib/leftovers/config_validator.rb +60 -0
  31. data/lib/leftovers/config_validator/error_processor.rb +196 -0
  32. data/lib/leftovers/config_validator/schema_hash.rb +496 -0
  33. data/lib/leftovers/definition.rb +16 -41
  34. data/lib/leftovers/definition_node.rb +36 -0
  35. data/lib/leftovers/definition_set.rb +17 -24
  36. data/lib/leftovers/dynamic_processors.rb +11 -0
  37. data/lib/leftovers/dynamic_processors/call.rb +25 -0
  38. data/lib/leftovers/dynamic_processors/call_definition.rb +31 -0
  39. data/lib/leftovers/dynamic_processors/definition.rb +26 -0
  40. data/lib/leftovers/dynamic_processors/each.rb +19 -0
  41. data/lib/leftovers/dynamic_processors/null.rb +9 -0
  42. data/lib/leftovers/erb.rb +2 -2
  43. data/lib/leftovers/file.rb +3 -5
  44. data/lib/leftovers/file_collector.rb +79 -61
  45. data/lib/leftovers/file_list.rb +9 -15
  46. data/lib/leftovers/haml.rb +9 -12
  47. data/lib/leftovers/matcher_builders.rb +24 -0
  48. data/lib/leftovers/matcher_builders/and.rb +19 -0
  49. data/lib/leftovers/matcher_builders/and_not.rb +14 -0
  50. data/lib/leftovers/matcher_builders/argument_node_value.rb +21 -0
  51. data/lib/leftovers/matcher_builders/name.rb +29 -0
  52. data/lib/leftovers/matcher_builders/node.rb +40 -0
  53. data/lib/leftovers/matcher_builders/node_has_argument.rb +71 -0
  54. data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +22 -0
  55. data/lib/leftovers/matcher_builders/node_has_positional_argument.rb +24 -0
  56. data/lib/leftovers/matcher_builders/node_name.rb +15 -0
  57. data/lib/leftovers/matcher_builders/node_pair_name.rb +18 -0
  58. data/lib/leftovers/matcher_builders/node_pair_value.rb +16 -0
  59. data/lib/leftovers/matcher_builders/node_path.rb +14 -0
  60. data/lib/leftovers/matcher_builders/node_type.rb +28 -0
  61. data/lib/leftovers/matcher_builders/or.rb +73 -0
  62. data/lib/leftovers/matcher_builders/path.rb +15 -0
  63. data/lib/leftovers/matcher_builders/string.rb +11 -0
  64. data/lib/leftovers/matcher_builders/string_pattern.rb +19 -0
  65. data/lib/leftovers/matcher_builders/unless.rb +13 -0
  66. data/lib/leftovers/matchers.rb +26 -0
  67. data/lib/leftovers/matchers/all.rb +25 -0
  68. data/lib/leftovers/matchers/and.rb +24 -0
  69. data/lib/leftovers/matchers/any.rb +27 -0
  70. data/lib/leftovers/matchers/node_has_any_keyword_argument.rb +28 -0
  71. data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +25 -0
  72. data/lib/leftovers/matchers/node_has_positional_argument.rb +23 -0
  73. data/lib/leftovers/matchers/node_has_positional_argument_with_value.rb +25 -0
  74. data/lib/leftovers/matchers/node_name.rb +23 -0
  75. data/lib/leftovers/matchers/node_pair_value.rb +23 -0
  76. data/lib/leftovers/matchers/node_path.rb +23 -0
  77. data/lib/leftovers/matchers/node_scalar_value.rb +25 -0
  78. data/lib/leftovers/matchers/node_type.rb +23 -0
  79. data/lib/leftovers/matchers/not.rb +23 -0
  80. data/lib/leftovers/matchers/or.rb +26 -0
  81. data/lib/leftovers/merged_config.rb +29 -14
  82. data/lib/leftovers/parser.rb +1 -4
  83. data/lib/leftovers/processor_builders.rb +22 -0
  84. data/lib/leftovers/processor_builders/action.rb +63 -0
  85. data/lib/leftovers/processor_builders/add_prefix.rb +20 -0
  86. data/lib/leftovers/processor_builders/add_suffix.rb +20 -0
  87. data/lib/leftovers/processor_builders/argument.rb +25 -0
  88. data/lib/leftovers/processor_builders/dynamic.rb +27 -0
  89. data/lib/leftovers/processor_builders/each.rb +36 -0
  90. data/lib/leftovers/processor_builders/each_action.rb +51 -0
  91. data/lib/leftovers/processor_builders/each_dynamic.rb +54 -0
  92. data/lib/leftovers/processor_builders/each_for_definition_set.rb +36 -0
  93. data/lib/leftovers/processor_builders/itself.rb +13 -0
  94. data/lib/leftovers/processor_builders/keyword.rb +24 -0
  95. data/lib/leftovers/processor_builders/keyword_argument.rb +14 -0
  96. data/lib/leftovers/processor_builders/transform.rb +55 -0
  97. data/lib/leftovers/processor_builders/transform_chain.rb +24 -0
  98. data/lib/leftovers/processor_builders/transform_set.rb +47 -0
  99. data/lib/leftovers/processor_builders/value.rb +13 -0
  100. data/lib/leftovers/rake_task.rb +4 -4
  101. data/lib/leftovers/reporter.rb +56 -4
  102. data/lib/leftovers/todo_reporter.rb +124 -0
  103. data/lib/leftovers/value_processors.rb +40 -0
  104. data/lib/leftovers/value_processors/add_dynamic_prefix.rb +31 -0
  105. data/lib/leftovers/value_processors/add_dynamic_suffix.rb +31 -0
  106. data/lib/leftovers/value_processors/add_prefix.rb +20 -0
  107. data/lib/leftovers/value_processors/add_suffix.rb +20 -0
  108. data/lib/leftovers/value_processors/camelize.rb +24 -0
  109. data/lib/leftovers/value_processors/capitalize.rb +19 -0
  110. data/lib/leftovers/value_processors/deconstantize.rb +24 -0
  111. data/lib/leftovers/value_processors/delete_after.rb +22 -0
  112. data/lib/leftovers/value_processors/delete_before.rb +22 -0
  113. data/lib/leftovers/value_processors/delete_prefix.rb +26 -0
  114. data/lib/leftovers/value_processors/delete_suffix.rb +26 -0
  115. data/lib/leftovers/value_processors/demodulize.rb +24 -0
  116. data/lib/leftovers/value_processors/downcase.rb +19 -0
  117. data/lib/leftovers/value_processors/each.rb +21 -0
  118. data/lib/leftovers/value_processors/each_for_definition_set.rb +29 -0
  119. data/lib/leftovers/value_processors/each_keyword.rb +27 -0
  120. data/lib/leftovers/value_processors/each_keyword_argument.rb +27 -0
  121. data/lib/leftovers/value_processors/each_positional_argument.rb +24 -0
  122. data/lib/leftovers/value_processors/itself.rb +17 -0
  123. data/lib/leftovers/value_processors/keyword.rb +36 -0
  124. data/lib/leftovers/value_processors/keyword_argument.rb +36 -0
  125. data/lib/leftovers/value_processors/parameterize.rb +24 -0
  126. data/lib/leftovers/value_processors/placeholder.rb +18 -0
  127. data/lib/leftovers/value_processors/pluralize.rb +24 -0
  128. data/lib/leftovers/value_processors/positional_argument.rb +26 -0
  129. data/lib/leftovers/value_processors/replace_value.rb +18 -0
  130. data/lib/leftovers/value_processors/return_definition.rb +26 -0
  131. data/lib/leftovers/value_processors/return_string.rb +14 -0
  132. data/lib/leftovers/value_processors/singularize.rb +24 -0
  133. data/lib/leftovers/value_processors/split.rb +22 -0
  134. data/lib/leftovers/value_processors/swapcase.rb +19 -0
  135. data/lib/leftovers/value_processors/titleize.rb +24 -0
  136. data/lib/leftovers/value_processors/underscore.rb +24 -0
  137. data/lib/leftovers/value_processors/upcase.rb +19 -0
  138. data/lib/leftovers/version.rb +1 -1
  139. metadata +201 -25
  140. data/lib/config/selenium.yml +0 -21
  141. data/lib/leftovers/argument_rule.rb +0 -219
  142. data/lib/leftovers/core_ext.rb +0 -13
  143. data/lib/leftovers/hash_rule.rb +0 -40
  144. data/lib/leftovers/name_rule.rb +0 -53
  145. data/lib/leftovers/rule.rb +0 -74
  146. data/lib/leftovers/transform_rule.rb +0 -171
  147. data/lib/leftovers/value_rule.rb +0 -56
@@ -0,0 +1,40 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ autoload(:AddDynamicPrefix, "#{__dir__}/value_processors/add_dynamic_prefix")
6
+ autoload(:AddDynamicSuffix, "#{__dir__}/value_processors/add_dynamic_suffix")
7
+ autoload(:AddPrefix, "#{__dir__}/value_processors/add_prefix")
8
+ autoload(:AddSuffix, "#{__dir__}/value_processors/add_suffix")
9
+ autoload(:Camelize, "#{__dir__}/value_processors/camelize")
10
+ autoload(:Capitalize, "#{__dir__}/value_processors/capitalize")
11
+ autoload(:Deconstantize, "#{__dir__}/value_processors/deconstantize")
12
+ autoload(:DeleteAfter, "#{__dir__}/value_processors/delete_after")
13
+ autoload(:DeleteBefore, "#{__dir__}/value_processors/delete_before")
14
+ autoload(:DeletePrefix, "#{__dir__}/value_processors/delete_prefix")
15
+ autoload(:DeleteSuffix, "#{__dir__}/value_processors/delete_suffix")
16
+ autoload(:Demodulize, "#{__dir__}/value_processors/demodulize")
17
+ autoload(:Downcase, "#{__dir__}/value_processors/downcase")
18
+ autoload(:EachForDefinitionSet, "#{__dir__}/value_processors/each_for_definition_set")
19
+ autoload(:EachKeyword, "#{__dir__}/value_processors/each_keyword")
20
+ autoload(:EachKeywordArgument, "#{__dir__}/value_processors/each_keyword_argument")
21
+ autoload(:EachPositionalArgument, "#{__dir__}/value_processors/each_positional_argument")
22
+ autoload(:Each, "#{__dir__}/value_processors/each")
23
+ autoload(:Itself, "#{__dir__}/value_processors/itself")
24
+ autoload(:Keyword, "#{__dir__}/value_processors/keyword")
25
+ autoload(:KeywordArgument, "#{__dir__}/value_processors/keyword_argument")
26
+ autoload(:Parameterize, "#{__dir__}/value_processors/parameterize")
27
+ autoload(:Placeholder, "#{__dir__}/value_processors/placeholder")
28
+ autoload(:Pluralize, "#{__dir__}/value_processors/pluralize")
29
+ autoload(:PositionalArgument, "#{__dir__}/value_processors/positional_argument")
30
+ autoload(:ReplaceValue, "#{__dir__}/value_processors/replace_value")
31
+ autoload(:ReturnDefinition, "#{__dir__}/value_processors/return_definition")
32
+ autoload(:ReturnString, "#{__dir__}/value_processors/return_string")
33
+ autoload(:Singularize, "#{__dir__}/value_processors/singularize")
34
+ autoload(:Split, "#{__dir__}/value_processors/split")
35
+ autoload(:Swapcase, "#{__dir__}/value_processors/swapcase")
36
+ autoload(:Titleize, "#{__dir__}/value_processors/titleize")
37
+ autoload(:Underscore, "#{__dir__}/value_processors/underscore")
38
+ autoload(:Upcase, "#{__dir__}/value_processors/upcase")
39
+ end
40
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddDynamicPrefix
6
+ def initialize(prefix_processor, then_processor)
7
+ @prefix_processor = prefix_processor
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node) # rubocop:disable Metrics/MethodLength
14
+ return unless str
15
+
16
+ prefixes = @prefix_processor.process(nil, method_node, method_node)
17
+ if prefixes.is_a?(Array)
18
+ prefixes.flatten!
19
+ prefixes.compact!
20
+ prefixes.uniq!
21
+
22
+ prefixes.map do |prefix|
23
+ @then_processor.process("#{prefix}#{str}", node, method_node)
24
+ end
25
+ else
26
+ @then_processor.process("#{prefixes}#{str}", node, method_node)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddDynamicSuffix
6
+ def initialize(suffix_processor, then_processor)
7
+ @suffix_processor = suffix_processor
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node) # rubocop:disable Metrics/MethodLength
14
+ return unless str
15
+
16
+ suffixes = @suffix_processor.process(nil, method_node, method_node)
17
+ if suffixes.is_a?(Array)
18
+ suffixes.flatten!
19
+ suffixes.compact!
20
+ suffixes.uniq!
21
+
22
+ suffixes.map do |suffix|
23
+ @then_processor.process("#{str}#{suffix}", node, method_node)
24
+ end
25
+ else
26
+ @then_processor.process("#{str}#{suffixes}", node, method_node)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddPrefix
6
+ def initialize(prefix, then_processor)
7
+ @prefix = prefix
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ @then_processor.process("#{@prefix}#{str}", node, method_node)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddSuffix
6
+ def initialize(suffix, then_processor)
7
+ @suffix = suffix
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ @then_processor.process("#{str}#{@suffix}", node, method_node)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Camelize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.camelize, node, method_node)
16
+ rescue NoMethodError
17
+ Leftovers.error <<~MESSAGE
18
+ Tried using the String#camelize method, but the activesupport gem was not available and/or not required
19
+ `gem install activesupport`, and/or add `requires: 'active_support/core_ext/string'` to your .leftovers.yml
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Capitalize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.capitalize, node, method_node)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Deconstantize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.deconstantize, node, method_node)
16
+ rescue NoMethodError
17
+ Leftovers.error <<~MESSAGE
18
+ Tried using the String#deconstantize method, but the activesupport gem was not available and/or not required
19
+ `gem install activesupport`, and/or add `requires: 'active_support/core_ext/string'` to your .leftovers.yml
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class DeleteAfter
6
+ def initialize(delete_after, then_processor)
7
+ @delete_after = delete_after
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ # TODO: investigate index
17
+ str = str.split(@delete_after, 2).first || str
18
+ @then_processor.process(str, node, method_node)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class DeleteBefore
6
+ def initialize(delete_before, then_processor)
7
+ @delete_before = delete_before
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ # TODO: investigate index
17
+ str = str.split(@delete_before, 2)[1] || str
18
+ @then_processor.process(str, node, method_node)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class DeletePrefix
6
+ # :nocov:
7
+ if defined?(::Leftovers::Backports::StringDeletePrefixSuffix)
8
+ using ::Leftovers::Backports::StringDeletePrefixSuffix
9
+ end
10
+ # :nocov:
11
+
12
+ def initialize(prefix, then_processor)
13
+ @prefix = prefix
14
+ @then_processor = then_processor
15
+
16
+ freeze
17
+ end
18
+
19
+ def process(str, node, method_node)
20
+ return unless str
21
+
22
+ @then_processor.process(str.delete_prefix(@prefix), node, method_node)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class DeleteSuffix
6
+ # :nocov:
7
+ if defined?(::Leftovers::Backports::StringDeletePrefixSuffix)
8
+ using ::Leftovers::Backports::StringDeletePrefixSuffix
9
+ end
10
+ # :nocov:
11
+
12
+ def initialize(suffix, then_processor)
13
+ @suffix = suffix
14
+ @then_processor = then_processor
15
+
16
+ freeze
17
+ end
18
+
19
+ def process(str, node, method_node)
20
+ return unless str
21
+
22
+ @then_processor.process(str.delete_suffix(@suffix), node, method_node)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Demodulize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.demodulize, node, method_node)
16
+ rescue NoMethodError
17
+ Leftovers.error <<~MESSAGE
18
+ Tried using the String#demodulize method, but the activesupport gem was not available and/or not required
19
+ `gem install activesupport`, and/or add `requires: 'active_support/core_ext/string'` to your .leftovers.yml
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Downcase
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.downcase, node, method_node)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Each
6
+ attr_reader :processors
7
+
8
+ def initialize(processors)
9
+ @processors = processors
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(str, node, method_node)
15
+ @processors.flat_map do |processor|
16
+ processor.process(str, node, method_node)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class EachForDefinitionSet
6
+ def initialize(then_processors)
7
+ @then_processors = then_processors
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ definitions = @then_processors.map do |then_processor|
14
+ processed = then_processor.process(str, node, method_node)
15
+ return if processed == :keep # rubocop:disable Lint/NonLocalExitFromIterator
16
+
17
+ processed
18
+ end
19
+
20
+ definitions.flatten!
21
+ definitions.compact!
22
+
23
+ return definitions.first if definitions.length <= 1
24
+
25
+ ::Leftovers::DefinitionSet.new(definitions)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class EachKeyword
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(_str, node, method_node)
13
+ kwargs = node.kwargs
14
+ return unless kwargs
15
+
16
+ kwargs.children.map do |pair|
17
+ next unless pair.type == :pair
18
+
19
+ argument_node = pair.first
20
+ str = argument_node.to_s if argument_node.string_or_symbol?
21
+
22
+ @then_processor.process(str, argument_node, method_node)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end