module StaticSourceLoc

Constants

Parser
SourceLoc
VERSION

Public Class Methods

analyze(dir, file_test=nil, dir_test=nil, ignore_errors=true) click to toggle source
# File lib/static_source_loc.rb, line 128
def analyze(dir, file_test=nil, dir_test=nil, ignore_errors=true)
        file_test ||= /\.rb\Z/
        dir_test  ||= proc {true}
        sexprs = load_sexprs(dir, file_test, dir_test, ignore_errors)
        toplevel = ModuleSource.new :Object, nil
        sexprs.each &toplevel.method(:process_code)
        submodules = toplevel.submodules
        submodules.values.each {|ms| ms.instance_variable_set :@parent, nil}
        submodules.merge toplevel.methods
end

Private Class Methods

load_sexprs(dir, file_test, dir_test, ignore_errors) click to toggle source
# File lib/static_source_loc.rb, line 141
def load_sexprs(dir, file_test, dir_test, ignore_errors)
        files = Find.to_enum(:find, dir).each_with_object([]) do |path, files|
                if File.file? path
                        next unless file_test === path
                        files << path
                else
                        Find.prune unless dir_test === path
                end
        end
        sexprs = files.map do |fn|
                File.open fn do |file|
                        begin
                                Parser.reset
                                Parser.parse file.read, fn
                        rescue RubyParser::SyntaxError, Racc::ParseError
                                raise unless ignore_errors
                        end
                end
        end
        sexprs.compact!
        sexprs
end