ViM plug-in to visualize your code coverage in real time line-by-line.

umbrella.pl 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/perl
  2. require 5.6.1;
  3. use strict;
  4. use warnings;
  5. use Devel::Cover::DB;
  6. use Config;
  7. use File::Spec;
  8. use File::Find ();
  9. use File::Path;
  10. use Getopt::Long;
  11. my $Options =
  12. {
  13. add_uncoverable_point => [],
  14. annotation => [],
  15. coverage => [],
  16. delete => undef,
  17. gcov => $Config{gccversion},
  18. ignore => [],
  19. ignore_re => [],
  20. launch => 0,
  21. make => $Config{make},
  22. report => "",
  23. report_c0 => 75,
  24. report_c1 => 90,
  25. report_c2 => 100,
  26. select => [],
  27. select_re => [],
  28. summary => 1,
  29. uncoverable_file => [".uncoverable", glob("~/.uncoverable")],
  30. };
  31. sub main
  32. {
  33. my $dbname = File::Spec->rel2abs("cover_db");
  34. die "Can't open database $dbname\n"
  35. if !-d $dbname;
  36. $Options->{outputdir} = File::Spec->rel2abs($dbname);
  37. mkpath($Options->{outputdir}) unless -d $Options->{outputdir};
  38. my $db = Devel::Cover::DB->new
  39. (
  40. db => $dbname,
  41. uncoverable_file => $Options->{uncoverable_file},
  42. );
  43. $db = $db->merge_runs;
  44. $db->add_uncoverable($Options->{add_uncoverable_point});
  45. $db->delete_uncoverable($Options->{delete_uncoverable_point});
  46. $db->clean_uncoverable
  47. if $Options->{clean_uncoverable_points};
  48. $db->calculate_summary(map { $_ => 1 } @{$Options->{coverage}});
  49. my $lines = "";
  50. # Loop through the coverage and output for each file.
  51. for my $file (sort keys %{$db->{summary}})
  52. {
  53. my $line = "$file;";
  54. my $numbers = "";
  55. for my $n (sort keys %{$db->cover->{$file}->{statement}})
  56. {
  57. my $hits = $db->cover->{$file}->{statement}->{$n}->[0]->[0];
  58. my $errs = $db->cover->{$file}->{statement}->{$n}->[0]->[1];
  59. if ($hits > 0 && length($errs // '') == 0)
  60. {
  61. $numbers .= $n . ",";
  62. }
  63. }
  64. chop($numbers);
  65. $line .= $numbers . ";";
  66. $numbers = "";
  67. for my $n (sort keys %{$db->cover->{$file}->{statement}})
  68. {
  69. my $hits = $db->cover->{$file}->{statement}->{$n}->[0]->[0];
  70. my $errs = $db->cover->{$file}->{statement}->{$n}->[0]->[1];
  71. if ($hits > 0 && length($errs // '') > 0)
  72. {
  73. $numbers .= $n . ",";
  74. }
  75. }
  76. chop($numbers);
  77. $line .= $numbers . ";";
  78. $numbers = "";
  79. for my $n (sort keys %{$db->cover->{$file}->{statement}})
  80. {
  81. my $hits = $db->cover->{$file}->{statement}->{$n}->[0]->[0];
  82. my $errs = $db->cover->{$file}->{statement}->{$n}->[0]->[1];
  83. if ($hits == 0 && length($errs // '') == 0)
  84. {
  85. $numbers .= $n . ",";
  86. }
  87. }
  88. chop($numbers);
  89. $line .= $numbers . ";";
  90. $lines .= $line . "\n";
  91. print $lines;
  92. }
  93. # Write to our coverage file.
  94. open(MYFILE, ">.umbrella-coverage");
  95. print MYFILE $lines;
  96. close(MYFILE);
  97. }
  98. main