This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
devel/scanprov: Ignore comments in scan
authorKarl Williamson <khw@cpan.org>
Sun, 28 Jul 2019 16:59:01 +0000 (10:59 -0600)
committerNicolas R <atoomic@cpan.org>
Fri, 27 Sep 2019 22:51:27 +0000 (16:51 -0600)
As noted in the comments in scanprov, the results could be thrown off by
something being mentioned in a comment in a scanned hdr.  This commit
removes the comments before scanning.

I'm unsure of what else could throw off the results, but I can imagine
there is something that I (and previous maintainers) haven't thought of.

(cherry picked from commit 413b3996cf5d19cc43357ba714b0662c93d73903)
Signed-off-by: Nicolas R <atoomic@cpan.org>
dist/Devel-PPPort/devel/scanprov

index ceba8d4..5ed3de8 100755 (executable)
@@ -62,8 +62,15 @@ for my $p (@$perls_ref) {
 
   # %sym's keys are every single thing that looks like an identifier
   # (beginning with a non-digit \w, followed by \w*) that occurs in all the
-  # headers, regardless of if they are in a comment, or what.
-  while (<>) { $sym{$_}++ for /(\b[^\W\d]\w*)/g; }
+  # headers, regardless of where (outside of comments).
+  local $/ = undef;
+  while (<>) {  # Read in the next file
+
+    # Strip comments, from perl faq
+    s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
+
+    $sym{$_}++ for /(\b[^\W\d]\w*)/g;
+  }
 
   # @provided is narrowed to include only those identifier-like things that
   # are mentioned in some hdr in this release.  (If it isn't even mentioned,
@@ -72,11 +79,7 @@ for my $p (@$perls_ref) {
   # "todo" release, which is the next higher one.  If we are at version n, we
   # have already done version n+1 and the provided element was mentioned
   # there, and now it no longer is.  We take that to mean that to mean that
-  # the element became provided for in n+1.  (khw notes that it could have
-  # just been in a comment for a bunch of releases above this, like
-  #         /* Oh how I wish we had FOO */
-  # and at some point FOO got added.  The method here is, hence, just a
-  # heuristic.
+  # the element became provided for in n+1.
   @provided = map { $sym{$_} or $v{$p->{todo}}{$_}++;
                     $sym{$_} ? $_ : ()
                   } @provided;