fix: add scoped error logging for lexer/parser errors

- Add std.log.scoped(.pugz) to template.zig and view_engine.zig
- Log detailed error info (code, line, column, message) when parsing fails
- Log template path context in ViewEngine on parse errors
- Remove debug print from lexer, use proper scoped logging instead
- Move benchmarks, docs, examples, playground, tests out of src/ to project root
- Update build.zig and documentation paths accordingly
- Bump version to 0.3.1
This commit is contained in:
2026-01-25 17:10:02 +05:30
parent 9d3b729c6c
commit aaf6a1af2d
1148 changed files with 57 additions and 330 deletions

View File

@@ -0,0 +1,43 @@
const assert = require('assert');
const fs = require('fs');
const runUtils = require('./run-utils');
const pug = require('../');
const anti = runUtils.findCases(__dirname + '/anti-cases');
describe('certain syntax is not allowed and will throw a compile time error', function() {
anti.forEach(function(test) {
var name = test.replace(/[-.]/g, ' ');
it(name, function() {
var path = __dirname.replace(/\\/g, '/') + '/anti-cases/' + test + '.pug';
var str = fs.readFileSync(path, 'utf8');
try {
var fn = pug.compile(str, {
filename: path,
pretty: true,
basedir: __dirname + '/anti-cases',
filters: runUtils.filters,
});
} catch (ex) {
if (!ex.code) {
throw ex;
}
assert(ex instanceof Error, 'Should throw a real Error');
assert(
ex.code.indexOf('PUG:') === 0,
'It should have a code of "PUG:SOMETHING"'
);
assert(
ex.message.replace(/\\/g, '/').indexOf(path) === 0,
'it should start with the path'
);
assert(
/:\d+$/m.test(ex.message.replace(/\\/g, '/')),
'it should include a line number.'
);
return;
}
throw new Error(test + ' should have thrown an error');
});
});
});