1#!/usr/bin/perl -w
2
3use strict;
4use Getopt::Long;
5use File::Copy qw/move/;
6use File::Temp qw/tempfile/;
7
8our $inputScriptFilename;
9our $outputScriptFilename;
10
11GetOptions('input-script=s' => \$inputScriptFilename,
12           'output-script=s' => \$outputScriptFilename);
13
14unless (defined $inputScriptFilename and defined $outputScriptFilename) {
15    print "Usage: $0 --input-script <path> --output-script <path>\n";
16    exit;
17}
18
19open IN, $inputScriptFilename or die "Couldn't open $inputScriptFilename: $!";
20our ($out, $tempFilename) = tempfile(UNLINK => 0) or die;
21
22our $previousLine = "";
23while (<IN>) {
24    # Warn about console.assert in control flow statement without braces. Can change logic when stripped.
25    if (/console\.assert/) {
26        if ($previousLine =~ /^\s*(for|if|else|while|do)\b/ && $previousLine !~ /\{\s*$/) {
27            print "WARNING: console.assert inside control flow statement without braces on line: $.: $_";
28        }
29    }
30
31    s/\s*console\.assert\(.*\);\s*//g;
32    print $out $_;
33    $previousLine = $_ if $_ !~ /^\s*$/;
34
35    # If console.assert is still on the line, either we missed a semicolon or it is multi-line. These did not get stripped.
36    if ($_ =~ /\s*console\.assert\(/) {
37        if ($_ =~ /\)\s*$/) {
38            print "WARNING: console.assert missing trailing semicolon on line $.: $_" ;
39        } else {
40            print "WARNING: Multi-line console.assert on line $.: $_" ;
41        }
42    }
43}
44
45close $out;
46close IN;
47
48move $tempFilename, $outputScriptFilename or die "$!";
49