22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/hind/cli.rb', line 22
def lsif(dir = options[:directory] || '.')
validate_directory(dir)
validate_output_file(options[:output], options[:force])
files = find_files(dir, options[:glob], options[:exclude])
abort "No files found matching pattern '#{options[:glob]}' in #{dir}" if files.empty?
say "Found #{files.length} files to process in #{dir}", :green if options[:verbose]
begin
generate_lsif(files, dir, options)
if options[:verbose]
debug_info = LSIF::GlobalState.instance.debug_info
say "\nGlobal State Summary:", :cyan
say " Classes: #{debug_info[:classes_count]} (#{debug_info[:open_classes_count]} open classes)", :cyan
say " Modules: #{debug_info[:modules_count]} (#{debug_info[:open_modules_count]} open modules)", :cyan
say " Constants: #{debug_info[:constants_count]}", :cyan
say " References: #{debug_info[:references_count]}", :cyan
say " Result Sets: #{debug_info[:result_sets_count]}", :cyan
if debug_info[:open_classes_count] > 0
most_opened_classes = LSIF::GlobalState.instance.classes
.map { |name, data| [name, data[:definitions].size] }
.select { |_, count| count > 1 }
.sort_by { |_, count| -count }
.take(5)
say "\nMost frequently reopened classes:", :cyan
most_opened_classes.each do |name, count|
say " #{name}: #{count} definitions", :cyan
end
end
if debug_info[:open_modules_count] > 0
most_opened_modules = LSIF::GlobalState.instance.modules
.map { |name, data| [name, data[:definitions].size] }
.select { |_, count| count > 1 }
.sort_by { |_, count| -count }
.take(5)
say "\nMost frequently reopened modules:", :cyan
most_opened_modules.each do |name, count|
say " #{name}: #{count} definitions", :cyan
end
end
end
say "\nLSIF data has been written to: #{options[:output]}", :green if options[:verbose]
rescue => e
handle_error(e, options[:verbose])
end
end
|