function pad(num, len) { let result = String(num); return result + repeat(' ', len - result.length); } function repeat(str, times) { let result = ''; while (times--) result += str; return result; } export default function getSnippet(source, loc, length = 1) { const first = Math.max(loc.line - 5, 0); const last = loc.line; const numDigits = String(last).length; const lines = source.split('\n').slice(first, last); const lastLine = lines[lines.length - 1]; const offset = lastLine.slice(0, loc.column).replace(/\t/g, ' ').length; let snippet = lines .map((line, i) => `${pad(i + first + 1, numDigits)} : ${line.replace(/\t/g, ' ')}`) .join('\n'); snippet += '\n' + repeat(' ', numDigits + 3 + offset) + repeat('^', length); return snippet; }