4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
|
# File 'lib/dbt/ios.rb', line 4
def analyze(app)
debugger_cmds_output = ''
dependers = Hash.new { |hash,key| hash[key] = [] }
providers = {}
default_providers = {}
files = app.files.flatten.uniq
files.flatten.each do |filename|
File.open(filename, 'r:UTF-8') do |file|
file.each_line do |line|
command = false
if line =~ /^#--+>/
command, dep = line.rstrip.sub(/^#--+> */, '').split(' ', 2)
elsif line =~ /^[ \t]*#[ \t]*@(provides|requires)/
command, dep = line.rstrip.sub(/^[ \t]*#[ \t]*@/, '').split(' ', 2)
end
if command
case command
when 'break'
dep ||= file.lineno + 1
debugger_cmds_output += "breakpoint set --file #{File.basename filename} --line #{dep}\n"
when 'provides'
if providers.key? dep
puts "\033[1m!HAY DEMASIADOS!\033[0m \033[1;31m#{dep}\033[0m"
end
providers[dep] = filename
when 'requires'
dependers[filename] << dep
else
puts "\033[1m!NO COMPRENDO!\033[0m \"#{command} #{dep}\""
puts "\033[1;31m#{filename}:#{file.lineno}\033[0m"
end
elsif line =~ /^[ \t]*class[ \t]+(\w+)/
dep = "class:#{$1}"
default_providers[dep] = filename
elsif line =~ /^[ \t]*module[ \t]+(\w+)/
dep = "module:#{$1}"
default_providers[dep] = filename
end
end
end
end
default_providers.each do |dep, filename|
providers[dep] ||= filename
end
dependers.each do |filename, dependencies|
if dep = dependencies.find { |dep| ! providers.include? dep }
puts "\033[1m!NO HAY!\033[0m \033[1;31m#{dep}\033[0m"
raise "#{filename} could not find a provider for #{dep}"
else
app.files_dependencies filename => dependencies.map { |dep| providers[dep] }
end
end
unless debugger_cmds_output.empty?
File.open('debugger_cmds', 'w') do |file|
file.write "#------> Creado por el DBT <------#\n"
file.write debugger_cmds_output
end
end
end
|