class YJCocoa::UnusedMethod

Usage

Public Class Methods

options() click to toggle source
Calls superclass method YJCocoa::Command::options
# File lib/yjcocoa/unused/unused_method.rb, line 21
def self.options
    [['--match-o', 'Match O 文件地址'],
    ['--match', '指定的字符串匹配,多字符串用 "," 分隔'],
    ['--ignore', '忽略的字符串匹配, 多字符串用 "," 分隔'],
    ['--output', '日志存放路径,默认当前路径']] + super
end

Public Instance Methods

implemented_methods() click to toggle source
# File lib/yjcocoa/unused/unused_method.rb, line 58
def implemented_methods
    lines = `otool -oV #{self.matcho}`.split("\n")
    methods = Hash.new
    lines.each {|line|
        line_scan = line.scan(/\s*imp 0x\w+ ([+|-]\[.+\s(.+)\])/)
        if line_scan.count > 0
            imp = line_scan[0][0]
            sel = line_scan[0][1]
            if methods.include?(sel)
                methods[sel] << imp
            else
                methods[sel] = [imp]
            end
        end
    }
    return methods
end
referenced_selectors() click to toggle source
# File lib/yjcocoa/unused/unused_method.rb, line 76
def referenced_selectors
    lines = `otool -v -s __DATA __objc_selrefs #{self.matcho}`.split("\n")
    refs = []
    lines.each { |line|
        line_scan = line.scan(/__TEXT:__objc_methname:(.+)/)
        if line_scan.count > 0
            refs << line_scan[0][0]
        end
    }
    return refs
end
run() click to toggle source
# File lib/yjcocoa/unused/unused_method.rb, line 37
def run
    unused_methods = self.unreferenced_methods
    fetch_methods = unused_methods.reject {|m| !(check_match(m) && !check_ignore(m))}
    puts "分析完毕,打开日志:#{self.output}".green
    File.write(self.output, fetch_methods.join("\n"))
    `open #{self.output}`
end
unreferenced_methods() click to toggle source
# File lib/yjcocoa/unused/unused_method.rb, line 45
def unreferenced_methods
    methods = self.implemented_methods
    unless methods.count
        puts "#{self.matcho} can't find implemented methods".red
        self.banner!
    end
    sels = self.referenced_selectors
    sels.each {|sel| methods.delete(sel)}
    result = []
    methods.values.each {|value| result += value}
    return result.sort
end
validate!() click to toggle source

businrss

Calls superclass method
# File lib/yjcocoa/unused/unused_method.rb, line 29
def validate!
    super
    unless self.matcho && self.matcho.length > 0
        puts "Match O 文件地址为空".red
        self.banner!
    end
end