class YJCocoa::UnusedClass
Usage
Public Class Methods
options()
click to toggle source
Calls superclass method
YJCocoa::Command::options
# File lib/yjcocoa/unused/unused_class.rb, line 21 def self.options [['--match-o', 'Match O 文件地址'], ['--match', '指定的字符串匹配,多字符串用 "," 分隔'], ['--ignore', '忽略的字符串匹配, 多字符串用 "," 分隔'], ['--output', '日志存放路径,默认当前路径']] + super end
Public Instance Methods
match_o_section()
click to toggle source
# File lib/yjcocoa/unused/unused_class.rb, line 63 def match_o_section lines = `otool -oV #{self.matcho}`.split("\n") section = Hash.new key = nil lines.each {|line| line = line#.strip if line.include?("Contents of (__DATA,") key = line elsif (key) if section.include?(key) section[key] << line else section[key] = [line] end end } return section end
objc_classlist(classlist)
click to toggle source
# File lib/yjcocoa/unused/unused_class.rb, line 93 def objc_classlist(classlist) result = [] classlist.each { |line| line_scan = line.scan(/_OBJC_CLASS_\$_(.+)/) if line_scan.count > 0 && !line.include?("superclass") result << line_scan[0][0] end } return result end
objc_super_classlist(classlist)
click to toggle source
# File lib/yjcocoa/unused/unused_class.rb, line 82 def objc_super_classlist(classlist) result = [] classlist.each { |line| line_scan = line.scan(/_OBJC_CLASS_\$_(.+)/) if line_scan.count > 0 && line.include?("superclass") result << line_scan[0][0] end } return result end
run()
click to toggle source
# File lib/yjcocoa/unused/unused_class.rb, line 37 def run unused_class = self.unreferenced_class fetch_class = unused_class.reject {|m| !(check_match(m) && !check_ignore(m))} puts "分析完毕,打开日志:#{self.output}".green File.write(self.output, fetch_class.join("\n")) `open #{self.output}` end
unreferenced_class()
click to toggle source
# File lib/yjcocoa/unused/unused_class.rb, line 45 def unreferenced_class section = match_o_section unless section.count puts "#{self.matcho} can't find classlist".red self.banner! end classlist = section["Contents of (__DATA,__objc_classlist) section"] classrefs = section["Contents of (__DATA,__objc_classrefs) section"] superrefs = section["Contents of (__DATA,__objc_superrefs) section"] all_classlist = objc_classlist(classlist) used_classlist = objc_super_classlist(classlist) + objc_classlist(classrefs) + objc_classlist(superrefs) unused_classlist = [] all_classlist.each {|item| unused_classlist << item unless used_classlist.include?(item) } return unused_classlist.sort end
validate!()
click to toggle source
businrss
Calls superclass method
# File lib/yjcocoa/unused/unused_class.rb, line 29 def validate! super unless self.matcho && self.matcho.length > 0 puts "Match O 文件地址为空".red self.banner! end end