diff --git a/packages/babel-code-frame/src/index.js b/packages/babel-code-frame/src/index.js index c8da91a5ae..17924b5692 100644 --- a/packages/babel-code-frame/src/index.js +++ b/packages/babel-code-frame/src/index.js @@ -127,9 +127,7 @@ function getMarkerLines( loc.start, ); const endLoc: Location = Object.assign({}, startLoc, loc.end); - const linesAbove = opts.linesAbove || 2; - const linesBelow = opts.linesBelow || 3; - + const { linesAbove = 2, linesBelow = 3 } = opts || {}; const startLine = startLoc.line; const startColumn = startLoc.column; const endLine = endLoc.line; diff --git a/packages/babel-code-frame/test/index.js b/packages/babel-code-frame/test/index.js index 7f097ce773..d157ff45d0 100644 --- a/packages/babel-code-frame/test/index.js +++ b/packages/babel-code-frame/test/index.js @@ -184,6 +184,57 @@ describe("@babel/code-frame", function() { ); }); + it("opts.linesAbove no lines above", function() { + const rawLines = [ + "class Foo {", + " constructor() {", + " console.log(arguments);", + " }", + "};", + ].join("\n"); + assert.equal( + codeFrameColumns(rawLines, { start: { line: 2 } }, { linesAbove: 0 }), + [ + "> 2 | constructor() {", + " 3 | console.log(arguments);", + " 4 | }", + " 5 | };", + ].join("\n"), + ); + }); + + it("opts.linesBelow no lines below", function() { + const rawLines = [ + "class Foo {", + " constructor() {", + " console.log(arguments);", + " }", + "};", + ].join("\n"); + assert.equal( + codeFrameColumns(rawLines, { start: { line: 2 } }, { linesBelow: 0 }), + [" 1 | class Foo {", "> 2 | constructor() {"].join("\n"), + ); + }); + + it("opts.linesBelow single line", function() { + const rawLines = [ + "class Foo {", + " constructor() {", + " console.log(arguments);", + " }", + "};", + ].join("\n"); + assert.equal( + codeFrameColumns( + rawLines, + { start: { line: 2 } }, + { linesAbove: 0, linesBelow: 0 }, + ), + ["> 2 | constructor() {"].join("\n"), + ); + }); + it("opts.forceColor", function() { const marker = chalk.red.bold; const gutter = chalk.grey;