chiark / gitweb /
Show line number in tokenizer error messages
authorJeff Ober <jober@ziprecruiter.com>
Mon, 6 Jan 2020 12:57:11 +0000 (07:57 -0500)
committerJeff Ober <jober@ziprecruiter.com>
Mon, 6 Jan 2020 12:57:11 +0000 (07:57 -0500)
lib/TOML/Tiny/Tokenizer.pm

index 06e62bd4854223a140f94e908f25d36cd7ed916a..a991d12d5ee4632cc1fed20aacc388f1a532a4f8 100644 (file)
@@ -61,9 +61,10 @@ sub tokenize {
       }
 
       default{
-        my $prev = JSON::PP->new->pretty->encode($tokens[ scalar(@tokens) - 1 ]);
-        my $substr = substr($toml, pos($toml), 30) // 'undef';
-        die "syntax error at:\n-->$substr\n\nprevious token was: $prev\n";
+        my $pos    = pos $toml;
+        my $line   = line_number($toml, $pos);
+        my $substr = substr($toml, $pos, 30) // 'undef';
+        die "toml syntax error on line $line:\n\t--> $substr\n";
       }
     }
   }
@@ -218,4 +219,11 @@ sub tokenize_float {
   return 0 + $toml;
 }
 
+sub line_number {
+  my ($toml, $pos) = @_;
+  my $substr = substr $toml, 0, $pos + 1;
+  my @lines = $substr =~ /((?&NL)) $TOML/g;
+  return scalar @lines;
+}
+
 1;