class
   Ameba::Rule::Lint::TrailingRescueException
   
  - Ameba::Rule::Lint::TrailingRescueException
- Ameba::Rule::Base
- Reference
- Object
Overview
A rule that prohibits the misconception about how trailing rescue statements work,
preventing Paths (exception class names or otherwise) from being used as the
trailing value. The value after the trailing rescue statement is the value
to use if an exception occurs, not the exception class to rescue from.
For example, this is considered invalid - if an exception occurs,
response will be assigned with the value of IO::Error instead of nil:
response = HTTP::Client.get("http://www.example.com") rescue IO::ErrorAnd should instead be written as this in order to capture only IO::Error exceptions:
response = begin
  HTTP::Client.get("http://www.example.com")
rescue IO::Error
  "default value"
endOr to rescue all exceptions (instead of just IO::Error):
response = HTTP::Client.get("http://www.example.com") rescue "default value"YAML configuration example:
Lint/TrailingRescueException:
  Enabled: trueIncluded Modules
- YAML::Serializable
- YAML::Serializable::Strict
Defined in:
ameba/rule/lint/trailing_rescue_exception.crConstant Summary
- 
        MSG = "Use a block variant of `rescue` to filter by the exception type"
Constructors
- .new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
- 
        .new(config = nil)
        
          A rule that prohibits the misconception about how trailing rescuestatements work, preventing Paths (exception class names or otherwise) from being used as the trailing value.
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::ExceptionHandler)
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 prohibits the misconception about how trailing rescue statements work,
preventing Paths (exception class names or otherwise) from being used as the
trailing value. The value after the trailing rescue statement is the value
to use if an exception occurs, not the exception class to rescue from.
For example, this is considered invalid - if an exception occurs,
response will be assigned with the value of IO::Error instead of nil:
response = HTTP::Client.get("http://www.example.com") rescue IO::ErrorAnd should instead be written as this in order to capture only IO::Error exceptions:
response = begin
  HTTP::Client.get("http://www.example.com")
rescue IO::Error
  "default value"
endOr to rescue all exceptions (instead of just IO::Error):
response = HTTP::Client.get("http://www.example.com") rescue "default value"YAML configuration example:
Lint/TrailingRescueException:
  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."