class
   Ameba::Rule::Lint::UnusedExpression
   
  - Ameba::Rule::Lint::UnusedExpression
- Ameba::Rule::Base
- Reference
- Object
Overview
A rule that disallows unused expressions.
For example, this is considered invalid:
a = obj.method do |x|
  x == 1 # => Comparison operation has no effect
  puts x
end
Float64 | StaticArray(Float64, 10)
pointerof(foo)And these are considered valid:
a = obj.method do |x|
  x == 1
end
foo : Float64 | StaticArray(Float64, 10) = 0.1
bar = pointerof(foo)This rule currently supports checking for unused:
- comparison operators: <,>=, etc.
- generics and unions: String?,Int32 | Float64, etc.
- literals: strings, bools, chars, hashes, arrays, range, etc.
- pseudo-method calls: sizeof,is_a?etc.
- variable access: local, @ivar,@@cvarandself
YAML configuration example:
Lint/UnusedExpression:
  Enabled: trueIncluded Modules
- YAML::Serializable
- YAML::Serializable::Strict
Defined in:
ameba/rule/lint/unused_expression.crConstant Summary
- 
        COMPARISON_OPERATORS = ["==", "!=", "<", "<=", ">", ">=", "<=>"] of ::String
- 
        MSG_CLASS_VAR = "Class variable access is unused"
- 
        MSG_COMPARISON = "Comparison operation is unused"
- 
        MSG_GENERIC = "Generic type is unused"
- 
        MSG_INSTANCE_VAR = "Instance variable access is unused"
- 
        MSG_LITERAL = "Literal value is unused"
- 
        MSG_LOCAL_VAR = "Local variable access is unused"
- 
        MSG_PSEUDO_METHOD = "Pseudo-method call is unused"
- 
        MSG_SELF = "`self` access is unused"
- 
        MSG_UNION = "Union type is unused"
Constructors
- .new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
- 
        .new(config = nil)
        
          A rule that disallows unused expressions. 
Class Method Summary
- 
        .parsed_doc : String | Nil
        
          Returns documentation for this rule, if there is any. 
Instance Method Summary
- #description : String
- #description=(description : String)
- #enabled=(enabled : Bool)
- #enabled? : Bool
- #excluded : Array(String) | Nil
- #excluded=(excluded : Array(String) | Nil)
- #severity : Ameba::Severity
- #severity=(severity : Ameba::Severity)
- #since_version : SemanticVersion | Nil
- #since_version=(since_version : String)
- #test(source, node : Crystal::ClassVar, in_macro : Bool)
- #test(source, node : Crystal::Call, in_macro : Bool)
- #test(source, node : Crystal::Generic, in_macro : Bool)
- #test(source, node : Crystal::InstanceVar, in_macro : Bool)
- #test(source, node : Crystal::RegexLiteral, in_macro : Bool)
- #test(source, node : Crystal::BoolLiteral | Crystal::CharLiteral | Crystal::HashLiteral | Crystal::ProcLiteral | Crystal::ArrayLiteral | Crystal::RangeLiteral | Crystal::TupleLiteral | Crystal::NumberLiteral | Crystal::StringLiteral | Crystal::SymbolLiteral | Crystal::NamedTupleLiteral | Crystal::StringInterpolation, in_macro : Bool)
- #test(source, node : Crystal::Var, in_macro : Bool)
- #test(source, node : Crystal::PointerOf | Crystal::SizeOf | Crystal::InstanceSizeOf | Crystal::AlignOf | Crystal::InstanceAlignOf | Crystal::OffsetOf | Crystal::IsA | Crystal::NilableCast | Crystal::RespondsTo | Crystal::Not, in_macro : Bool)
- 
        #test(source : Source)
        
          This method is designed to test the source passed in. 
Instance methods inherited from class Ameba::Rule::Base
  
  
    
      ==(other)
    ==, 
    
  
    
      catch(source : Source)
    catch, 
    
  
    
      excluded?(source)
    excluded?, 
    
  
    
      group
    group, 
    
  
    
      hash(hasher)
    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
    
  
      
  Macros inherited from class Ameba::Rule::Base
  
  
    
      issue_for(*args, **kwargs, &block)
    issue_for
    
  
    
      
      
      
      
  Macros inherited from module Ameba::Config::RuleConfig
  
  
    
      properties(&block)
    properties
    
  
    
      
      
      
      
    
      
      
      
      
    
  Constructor Detail
A rule that disallows unused expressions.
For example, this is considered invalid:
a = obj.method do |x|
  x == 1 # => Comparison operation has no effect
  puts x
end
Float64 | StaticArray(Float64, 10)
pointerof(foo)And these are considered valid:
a = obj.method do |x|
  x == 1
end
foo : Float64 | StaticArray(Float64, 10) = 0.1
bar = pointerof(foo)This rule currently supports checking for unused:
- comparison operators: <,>=, etc.
- generics and unions: String?,Int32 | Float64, etc.
- literals: strings, bools, chars, hashes, arrays, range, etc.
- pseudo-method calls: sizeof,is_a?etc.
- variable access: local, @ivar,@@cvarandself
YAML configuration example:
Lint/UnusedExpression:
  Enabled: trueClass Method Detail
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
This method is designed to test the source passed in. If source has issues that are tested by this rule, it should add an issue.
By default it uses a node visitor to traverse all the nodes in the source.
NOTE Must be overridden for other type of rules.