class
   Ameba::Source
 
  - Ameba::Source
- Reference
- Object
Overview
An entity that represents a Crystal source file. Has path, lines of code and issues reported by rules.
Included Modules
Defined in:
ameba/source.crameba/source/corrector.cr
ameba/source/rewriter.cr
ameba/spec/support.cr
Constructors
- .new(code : String, path : String = "", normalize = true)
- .new(code : String = "", path : String = "")
Instance Method Summary
- 
        #ast : Crystal::ASTNode
        
          Returns AST nodes constructed by Crystal::Parser.
- 
        #code : String
        
          Crystal code (content of a source file). 
- 
        #correct!
        
          Corrects any correctable issues and updates #code.
- 
        #ecr?
        
          Returns trueif the source is an ECR template,falseotherwise.
- #fullpath : String
- 
        #lines : Array(String)
        
          Returns lines of code split by new line character. 
- 
        #matches_path?(filepath)
        
          Returns trueif filepath matches the source's path,falseotherwise.
- 
        #path : String
        
          Path to the source file. 
- 
        #pos(location : Crystal::Location, end end_pos = false) : Int32
        
          Converts an AST location to a string position. 
- 
        #spec?
        
          Returns trueif the source is a spec file,falseotherwise.
Instance methods inherited from module Ameba::Spec::Util
  
  
    
      normalize_code(code, separator = '\n')
    normalize_code
    
  
      
      
      
    
      
  Instance methods inherited from module Ameba::Reportable
  
  
    
      add_issue(rule, location : Crystal::Location | Nil, end_location : Crystal::Location | Nil, message : String, status : Issue::Status | Nil = nil, block : Source::Corrector ->  | Nil = nil) : Issueadd_issue(rule, location : Crystal::Location | Nil, end_location : Crystal::Location | Nil, message : String, status : Issue::Status | Nil = nil, &block : Source::Corrector -> ) : Issue
add_issue(rule, location : Tuple(Crystal::Location, Crystal::Location), message, status : Issue::Status | Nil = nil, block : Source::Corrector -> | Nil = nil) : Issue
add_issue(rule, token : Crystal::Token, message, status : Issue::Status | Nil = nil, block : Source::Corrector -> | Nil = nil) : Issue
add_issue(rule, location : Tuple(Int32, Int32), message, status : Issue::Status | Nil = nil, block : Source::Corrector -> | Nil = nil) : Issue
add_issue(rule, location : Tuple(Int32, Int32), end_location : Tuple(Int32, Int32), message, status : Issue::Status | Nil = nil, block : Source::Corrector -> | Nil = nil) : Issue
add_issue(rule, node : Crystal::ASTNode, message, status : Issue::Status | Nil = nil, block : Source::Corrector -> | Nil = nil, *, prefer_name_location = false) : Issue
add_issue(rule, location : Tuple(Int32, Int32), message, status : Issue::Status | Nil = nil, &block : Source::Corrector -> ) : Issue
add_issue(rule, token : Crystal::Token, message, status : Issue::Status | Nil = nil, &block : Source::Corrector -> ) : Issue
add_issue(rule, location : Tuple(Int32, Int32), end_location : Tuple(Int32, Int32), message, status : Issue::Status | Nil = nil, &block : Source::Corrector -> ) : Issue
add_issue(rule, node : Crystal::ASTNode, message, status : Issue::Status | Nil = nil, *, prefer_name_location = false, &block : Source::Corrector -> ) : Issue add_issue, issues issues, valid? valid?
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?, 
    
  
    
      has_block?(node) : Bool
    has_block?, 
    
  
    
      literal?(node) : Bool
    literal?, 
    
  
    
      loop?(node)
    loop?, 
    
  
    
      name_end_location(node)
    name_end_location, 
    
  
    
      name_location(node)
    name_location, 
    
  
    
      name_location_or(token : Crystal::Token, name, *, adjust_location_column_number = nil)name_location_or(node : Crystal::ASTNode, *, adjust_location_column_number = nil) name_location_or, name_size(node) name_size, node_source(node, code_lines) node_source, nodoc?(node) nodoc?, path_named?(node, *names : String) : 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 module Ameba::InlineComments
  
  
    
      comment?(line_number : Int32)
    comment?, 
    
  
    
      location_disabled?(location : Crystal::Location | Nil, rule)
    location_disabled?, 
    
  
    
      parse_inline_directive(line)
    parse_inline_directive
    
  
      
      
      
    
      
      
      
      
    
      
      
      
      
    
  Constructor Detail
Creates a new source by #code and #path.
For example:
path = "./src/source.cr"
Ameba::Source.new File.read(path), pathInstance Method Detail
Returns AST nodes constructed by Crystal::Parser.
source = Ameba::Source.new code, path
source.astCorrects any correctable issues and updates #code.
Returns false if no issues were corrected.
Returns lines of code split by new line character.
Since #code is immutable and can't be changed, this
method caches lines in an instance variable, so calling
it second time will not perform a split, but will return
lines instantly.
source = Ameba::Source.new "a = 1\nb = 2", path
source.lines # => ["a = 1", "b = 2"]Converts an AST location to a string position.