|
1 | | -package WeBWorK::PG::PGProblemCritic; |
2 | | -use parent qw(Exporter); |
3 | | - |
4 | | -use strict; |
5 | | -use warnings; |
6 | | -use experimental 'signatures'; |
7 | | -use feature 'say'; |
8 | | - |
9 | | -use Mojo::File qw(curfile); |
10 | | -use Data::Dumper; |
11 | | - |
12 | | -our @EXPORT_OK = qw(analyzePGfile analyzePGcode getDeprecatedMacros); |
13 | 1 |
|
14 | 2 | =head1 NAME |
15 | 3 |
|
@@ -75,6 +63,19 @@ folder. |
75 | 63 |
|
76 | 64 | =cut |
77 | 65 |
|
| 66 | +package WeBWorK::PG::PGProblemCritic; |
| 67 | +use parent qw(Exporter); |
| 68 | + |
| 69 | +use strict; |
| 70 | +use warnings; |
| 71 | +use experimental 'signatures'; |
| 72 | +use feature 'say'; |
| 73 | + |
| 74 | +use Mojo::File qw(curfile); |
| 75 | +use Mojo::Util qw(dumper); |
| 76 | + |
| 77 | +our @EXPORT_OK = qw(analyzePGfile analyzePGcode getDeprecatedMacros); |
| 78 | + |
78 | 79 | sub analyzePGcode ($code) { |
79 | 80 | # default flags for presence of features in a PG problem |
80 | 81 | my $features = { |
@@ -144,9 +145,17 @@ sub analyzePGcode ($code) { |
144 | 145 | $line =~ s/(.*)#.*/$1/; |
145 | 146 | $macros .= $line; |
146 | 147 | } |
147 | | - # Split by commas and pull out the quotes. |
148 | | - # TODO: handle cases with loadMacros(qw/macro1.pl macro2.pl/); |
149 | | - my @macros = map {s/['"\s]//gr} split(/\s*,\s*/, $macros =~ s/loadMacros\((.*)\)\;$/$1/r); |
| 148 | + |
| 149 | + $macros =~ s/^\s*loadMacros\(\s*(.*)\s*\);\s*$/$1/; |
| 150 | + my @macros; |
| 151 | + # if the arguments of loadMacros is q[qw] form, handle this. |
| 152 | + if ($macros =~ /^q[qw]?[\(\[\{\/](.*)[\)\]\/\}]$/) { |
| 153 | + $macros =~ s/^q[qw]?[\(\[\{\/](.*)[\)\]\/\}]$/$1/; |
| 154 | + @macros = grep { $_ ne '' } split(/\s+/, $macros); |
| 155 | + } else { # arguments are strings separated by commas. |
| 156 | + @macros = map {s/['"\s]//gr} split(/\s*,\s*/, $macros =~ s/loadMacros\((.*)\)\;$/$1/r); |
| 157 | + } |
| 158 | + |
150 | 159 | $features->{macros} = \@macros; |
151 | 160 | for my $macro (@macros) { |
152 | 161 | push(@{ $features->{deprecated_macros} }, $macro) if (grep { $macro eq $_ } @$all_deprecated_macros); |
|
0 commit comments