Class: Brakeman::FileParser

Inherits:
Object
  • Object
show all
Defined in:
lib/brakeman/file_parser.rb

Overview

This class handles reading and parsing files.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracker, app_tree) ⇒ FileParser

Returns a new instance of FileParser.



8
9
10
11
12
# File 'lib/brakeman/file_parser.rb', line 8

def initialize tracker, app_tree
  @tracker = tracker
  @app_tree = app_tree
  @file_list = {}
end

Instance Attribute Details

#file_listObject (readonly)

Returns the value of attribute file_list.



6
7
8
# File 'lib/brakeman/file_parser.rb', line 6

def file_list
  @file_list
end

Instance Method Details

#parse_files(list, type) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/brakeman/file_parser.rb', line 14

def parse_files list, type
  read_files list, type do |path, contents|
    if ast = parse_ruby(contents, path)
      ASTFile.new(path, ast)
    end
  end
end

#parse_ruby(input, path) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/brakeman/file_parser.rb', line 33

def parse_ruby input, path
  begin
    Brakeman.debug "Parsing #{path}"
    RubyParser.new.parse input, path
  rescue Racc::ParseError => e
    @tracker.error e, "Could not parse #{path}"
    nil
  rescue => e
    @tracker.error e.exception(e.message + "\nWhile processing #{path}"), e.backtrace
    nil
  end
end

#read_files(list, type) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/brakeman/file_parser.rb', line 22

def read_files list, type
  @file_list[type] ||= []

  list.each do |path|
    result = yield path, read_path(path)
    if result
      @file_list[type] << result
    end
  end
end

#read_path(path) ⇒ Object



46
47
48
# File 'lib/brakeman/file_parser.rb', line 46

def read_path path
  @app_tree.read_path path
end