From a01007a3d32ae39c892f498bcd425272637bc3e2 Mon Sep 17 00:00:00 2001 From: Steven Hargrove Date: Thu, 8 Feb 2018 16:52:12 -0500 Subject: [PATCH] Allow falsey, yet valid options for codeFrameColumns() (#7341) Allow for overriding default linesAbove/linesBelow values. --- packages/babel-code-frame/src/index.js | 4 +- packages/babel-code-frame/test/index.js | 51 +++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) 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;