Sha256: bb9eb2f5d2a4c7b8a02e7d541f6096c1f4223d6b915a8988842acb121d34fcc2
Contents?: true
Size: 1.76 KB
Versions: 9
Compression:
Stored size: 1.76 KB
Contents
#!/usr/bin/env ruby require 'open3' class String unless method_defined?(:lines) def lines self end end end MARKER = "!XMP#{Time.new.to_i}_#{rand(1000000)}!" XMPRE = Regexp.new("^" + Regexp.escape(MARKER) + '\[([0-9]+)\] => (.*)') VAR = "_xmp_#{Time.new.to_i}_#{rand(1000000)}" WARNING_RE = /-:([0-9]+): warning: (.*)/ interpreter = ARGV interpreter << 'ruby' << '-w' if interpreter.empty? IO.popen(interpreter.first, 'w') do |script| script.write <<-TEST begin require 'rubygems' rescue LoadError exit 1 end exit 0 TEST end if $?.exitstatus == 1 ENV['RUBYOPT'] = ENV['RUBYOPT'].gsub(/-rr?ubygems/i, '') end code = STDIN.read idx = 0 newcode = code.gsub(/^(.*) # =>.*/) do |l| expr = $1 (/^\s*#/ =~ l) ? l : %!((#{VAR} = (#{expr}); $stderr.puts("#{MARKER}[#{idx+=1}] => " + #{VAR}.inspect) || #{VAR}))! end stdin, stdout, stderr = Open3::popen3(*interpreter) stdin.puts newcode stdin.close output = stderr.readlines results = Hash.new{|h,k| h[k] = []} output.grep(XMPRE).each do |line| result_id, result = XMPRE.match(line).captures results[result_id.to_i] << result end idx = 0 annotated = code.gsub(/^(.*) # =>.*/) do |l| expr = $1 (/^\s*#/ =~ l) ? l : "#{expr} # => " + (results[idx+=1] || []).join(", ") end.gsub(/ # !>.*/, '').gsub(/# (>>|~>)[^\n]*\n/m, ""); warnings = {} output.join.lines.grep(WARNING_RE).map do |x| md = WARNING_RE.match(x) warnings[md[1].to_i] = md[2] end idx = 0 annotated = annotated.lines.map do |line| w = warnings[idx+=1] w ? (line.chomp + " # !> #{w}") : line end puts annotated output.reject!{|x| /^-:[0-9]+: warning/.match(x)} if exception = /^-:[0-9]+:.*/m.match(output.join) puts exception[0].map{|line| "# ~> " + line } end if (s = stdout.read) != "" puts "# >> #{s.inspect}" end
Version data entries
9 entries across 9 versions & 1 rubygems
Version | Path |
---|---|
utils-0.0.10 | bin/xmp |
utils-0.0.8 | bin/xmp |
utils-0.0.7 | bin/xmp |
utils-0.0.6 | bin/xmp |
utils-0.0.5 | bin/xmp |
utils-0.0.4 | bin/xmp |
utils-0.0.3 | bin/xmp |
utils-0.0.2 | bin/xmp |
utils-0.0.0 | bin/xmp |