+

+ + class Ameba::Rule::Performance::ExcessiveAllocations + +

+ + + + + + + +

+ + + + Overview +

+ +

This rule is used to identify excessive collection allocations, +that can be avoided by using each_<member> instead of <collection>.each.

+

For example, this is considered inefficient:

+
"Alice".chars.each { |c| puts c }
+"Alice\nBob".lines.each { |l| puts l }
+

And can be written as this:

+
"Alice".each_char { |c| puts c }
+"Alice\nBob".each_line { |l| puts l }
+

YAML configuration example:

+
Performance/ExcessiveAllocations:
+  Enabled: true
+  CallNames:
+    codepoints: each_codepoint
+    graphemes: each_grapheme
+    chars: each_char
+    lines: each_line
+ + + + + +

+ + + + Included Modules +

+
    + +
  • Ameba::AST::Util
  • + +
  • YAML::Serializable
  • + +
  • YAML::Serializable::Strict
  • + +
+ + + + + + + + + + +

+ + + + Defined in: +

+ + + + ameba/rule/performance/excessive_allocations.cr + + +
+ + + + + +

+ + + + Constant Summary +

+ +
+ +
+ MSG = "Use `%s {...}` instead of `%s.each {...}` to avoid excessive allocation" +
+ + +
+ + + +

+ + + + Constructors +

+
    + +
  • + .new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) + +

    This rule is used to identify excessive collection allocations, that can be avoided by using each_<member> instead of <collection>.each.

    + +
  • + +
  • + .new(config = nil) + +

    This rule is used to identify excessive collection allocations, that can be avoided by using each_<member> instead of <collection>.each.

    + +
  • + +
+ + + +

+ + + + Class Method Summary +

+ + + + +

+ + + + Instance Method Summary +

+ + + + + + +
+ + + +

Instance methods inherited from module Ameba::AST::Util

+ + + + abort?(node) + abort?, + + + + control_exp_code(node : Crystal::ControlExpression, code_lines) + control_exp_code, + + + + dynamic_literal?(node) : Bool + dynamic_literal?, + + + + exit?(node) + exit?, + + + + flow_command?(node, in_loop) + flow_command?, + + + + flow_expression?(node, in_loop = false) + flow_expression?, + + + + literal?(node) : Bool + literal?, + + + + loop?(node) + loop?, + + + + name_end_location(node) + name_end_location, + + + + name_location(node) + name_location, + + + + name_size(node) + name_size, + + + + node_source(node, code_lines) + node_source, + + + + path_named?(node, name) : Bool + path_named?, + + + + raise?(node) + raise?, + + + + source_between(loc, end_loc, code_lines) : String | Nil + source_between, + + + + static_literal?(node) : Bool + static_literal? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Instance methods inherited from class Ameba::Rule::Performance::Base

+ + + + catch(source : Source) + catch + + + + + + +

Constructor methods inherited from class Ameba::Rule::Performance::Base

+ + + + new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
new(config = nil)
+ new
+ + + + + + +

Class methods inherited from class Ameba::Rule::Performance::Base

+ + + + parsed_doc : String | Nil + parsed_doc + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Instance methods inherited from class Ameba::Rule::Base

+ + + + ==(other) + ==, + + + + catch(source : Source) + catch, + + + + excluded?(source) + excluded?, + + + + group + group, + + + + hash + hash, + + + + name + name, + + + + special? + special?, + + + + test(source : Source, node : Crystal::ASTNode, *opts)
test(source : Source)
+ test
+ + + + + + + + + +

Class methods inherited from class Ameba::Rule::Base

+ + + + default_severity : Ameba::Severity + default_severity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

+ + + + Constructor Detail +

+ +
+
+ + def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) + + # +
+ +
+ +

This rule is used to identify excessive collection allocations, +that can be avoided by using each_<member> instead of <collection>.each.

+

For example, this is considered inefficient:

+
"Alice".chars.each { |c| puts c }
+"Alice\nBob".lines.each { |l| puts l }
+

And can be written as this:

+
"Alice".each_char { |c| puts c }
+"Alice\nBob".each_line { |l| puts l }
+

YAML configuration example:

+
Performance/ExcessiveAllocations:
+  Enabled: true
+  CallNames:
+    codepoints: each_codepoint
+    graphemes: each_grapheme
+    chars: each_char
+    lines: each_line
+
+ +
+
+ +
+
+ +
+
+ + def self.new(config = nil) + + # +
+ +
+ +

This rule is used to identify excessive collection allocations, +that can be avoided by using each_<member> instead of <collection>.each.

+

For example, this is considered inefficient:

+
"Alice".chars.each { |c| puts c }
+"Alice\nBob".lines.each { |l| puts l }
+

And can be written as this:

+
"Alice".each_char { |c| puts c }
+"Alice\nBob".each_line { |l| puts l }
+

YAML configuration example:

+
Performance/ExcessiveAllocations:
+  Enabled: true
+  CallNames:
+    codepoints: each_codepoint
+    graphemes: each_grapheme
+    chars: each_char
+    lines: each_line
+
+ +
+
+ + [View source] + +
+
+ + + + +

+ + + + Class Method Detail +

+ +
+
+ + def self.parsed_doc : String | Nil + + # +
+ +
+ +

Returns documentation for this rule, if there is any.

+
module Ameba
+  # This is a test rule.
+  # Does nothing.
+  class MyRule < Ameba::Rule::Base
+    def test(source)
+    end
+  end
+end
+
+MyRule.parsed_doc # => "This is a test rule.\nDoes nothing."
+
+ +
+
+ +
+
+ + + + +

+ + + + Instance Method Detail +

+ +
+
+ + def call_names : Hash(String, String) + + # +
+ +
+
+ +
+
+ +
+
+ + def call_names=(call_names : Hash(String, String)) + + # +
+ +
+
+ +
+
+ +
+
+ + def description : String + + # +
+ +
+
+ +
+
+ +
+
+ + def description=(description : String) + + # +
+ +
+
+ +
+
+ +
+
+ + def enabled=(enabled : Bool) + + # +
+ +
+
+ +
+
+ +
+
+ + def enabled? : Bool + + # +
+ +
+
+ +
+
+ +
+
+ + def excluded : Array(String) | Nil + + # +
+ +
+
+ +
+
+ +
+
+ + def excluded=(excluded : Array(String) | Nil) + + # +
+ +
+
+ +
+
+ +
+
+ + def severity : Ameba::Severity + + # +
+ +
+
+ +
+
+ +
+
+ + def severity=(severity : Ameba::Severity) + + # +
+ +
+
+ +
+
+ +
+
+ + def test(source, node : Crystal::Call) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def test(source) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +