const fs=require('fs'); const path='d:/Sites/Work/RadioCast/src/main.js'; const s=fs.readFileSync(path,'utf8'); const lines=s.split(/\r?\n/); const stack=[]; for(let i=0;i0) stack.pop(); else console.log('Unmatched closing } at',i+1,j+1); } } } console.log('Unmatched openings left:', stack.length); if(stack.length>0) console.log('First unmatched opening at', stack[0]); if(stack.length>0) console.log('Last unmatched opening at', stack[stack.length-1]); if(stack.length>0){ const sidx=Math.max(1, stack[stack.length-1].line-5); const eidx=Math.min(lines.length, stack[stack.length-1].line+5); console.log('\nContext:'); for(let i=sidx;i<=eidx;i++) console.log(i+': '+lines[i-1]); }