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) ⇒ FileParser

Returns a new instance of FileParser.



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

def initialize tracker
  @tracker = tracker
  @timeout = @tracker.options[:parser_timeout]
  @app_tree = @tracker.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



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

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

#parse_ruby(input, path) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/brakeman/file_parser.rb', line 36

def parse_ruby input, path
  begin
    Brakeman.debug "Parsing #{path}"
    RubyParser.new.parse input, path, @timeout
  rescue Racc::ParseError => e
    @tracker.error e, "Could not parse #{path}"
    nil
  rescue Timeout::Error => e
    @tracker.error Exception.new("Parsing #{path} took too long (> #{@timeout} seconds). Try increasing the limit with --parser-timeout"), caller
    nil
  rescue => e
    @tracker.error e.exception(e.message + "\nWhile processing #{path}"), e.backtrace
    nil
  end
end

#read_files(list, type) ⇒ Object



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

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

  list.each do |path|
    file = @app_tree.file_path(path)

    result = yield file, file.read
    if result
      @file_list[type] << result
    end
  end
end