From d327873b1c0b6fbdeb6fd276e523043d51d6de37 Mon Sep 17 00:00:00 2001 From: Tomer Aberbach Date: Thu, 17 Mar 2022 11:59:35 -0400 Subject: [PATCH] fix: improve renderer logic for `--silent` and `FORCE_COLOR` settings --- lib/getRenderer.js | 23 +++++++++++++++++- lib/runAll.js | 1 - test/getRenderer.spec.js | 51 +++++++++++++++++++++++++++++++++------- test/index2.spec.js | 2 +- 4 files changed, 65 insertions(+), 12 deletions(-) diff --git a/lib/getRenderer.js b/lib/getRenderer.js index 91606861c..9841195d3 100644 --- a/lib/getRenderer.js +++ b/lib/getRenderer.js @@ -1,7 +1,28 @@ -export const getRenderer = ({ debug, quiet }, env = process.env) => { +const getMainRendererOptions = ({ debug, quiet }, env) => { if (quiet) return { renderer: 'silent' } // Better support for dumb terminals: https://en.wikipedia.org/wiki/Computer_terminal#Dumb_terminals const isDumbTerminal = env.TERM === 'dumb' if (debug || isDumbTerminal || env.NODE_ENV === 'test') return { renderer: 'verbose' } return { renderer: 'update', rendererOptions: { dateFormat: false } } } + +const getFallbackRenderer = ({ renderer }, { FORCE_COLOR }) => { + if (renderer === 'silent') { + return 'silent' + } + + // If colors are being forced, then also force non-fallback rendering + if (Number(FORCE_COLOR) > 0) { + return renderer + } + + return 'verbose' +} + +export const getRenderer = (options, env = process.env) => { + const mainRendererOptions = getMainRendererOptions(options, env) + return { + ...mainRendererOptions, + nonTTYRenderer: getFallbackRenderer(mainRendererOptions, env), + } +} diff --git a/lib/runAll.js b/lib/runAll.js index db2d1c830..c82e1cb30 100644 --- a/lib/runAll.js +++ b/lib/runAll.js @@ -143,7 +143,6 @@ export const runAll = async ( const listrOptions = { ctx, exitOnError: false, - nonTTYRenderer: 'verbose', registerSignalListeners: false, ...getRenderer({ debug, quiet }), } diff --git a/test/getRenderer.spec.js b/test/getRenderer.spec.js index 27f19c15f..dc9c57235 100644 --- a/test/getRenderer.spec.js +++ b/test/getRenderer.spec.js @@ -1,28 +1,61 @@ import { getRenderer } from '../lib/getRenderer' describe('getRenderer', () => { - it('should return silent renderer when quiet', () => { - expect(getRenderer({ quiet: true }, {})).toEqual({ renderer: 'silent' }) + it('should return silent renderers when quiet', () => { + expect(getRenderer({ quiet: true }, {})).toEqual({ + renderer: 'silent', + nonTTYRenderer: 'silent', + }) }) - it('should return verbose renderer when NODE_ENV=test', () => { - expect(getRenderer({}, { NODE_ENV: 'test' })).toEqual({ renderer: 'verbose' }) + it('should return verbose renderers when NODE_ENV=test', () => { + expect(getRenderer({}, { NODE_ENV: 'test' })).toEqual({ + renderer: 'verbose', + nonTTYRenderer: 'verbose', + }) }) - it('should return test renderer when TERM=dumb', () => { - expect(getRenderer({}, { TERM: 'dumb' })).toEqual({ renderer: 'verbose' }) + it('should return test renderers when TERM=dumb', () => { + expect(getRenderer({}, { TERM: 'dumb' })).toEqual({ + renderer: 'verbose', + nonTTYRenderer: 'verbose', + }) }) - it('should return verbose renderer when debug', () => { - expect(getRenderer({ debug: true }, {})).toEqual({ renderer: 'verbose' }) + it('should return verbose renderers when debug', () => { + expect(getRenderer({ debug: true }, {})).toEqual({ + renderer: 'verbose', + nonTTYRenderer: 'verbose', + }) }) - it('should return update renderer by default', () => { + it('should return update main renderer and verbose fallback renderer by default', () => { expect(getRenderer({}, {})).toEqual({ renderer: 'update', rendererOptions: { dateFormat: false, }, + nonTTYRenderer: 'verbose', + }) + }) + + it('should return update main renderer and verbose fallback renderer when colors are not forced', () => { + expect(getRenderer({}, { FORCE_COLOR: '0' })).toEqual({ + renderer: 'update', + rendererOptions: { + dateFormat: false, + }, + nonTTYRenderer: 'verbose', + }) + }) + + it('should return update renderers when colors are forced', () => { + expect(getRenderer({}, { FORCE_COLOR: '1' })).toEqual({ + renderer: 'update', + rendererOptions: { + dateFormat: false, + }, + nonTTYRenderer: 'update', }) }) }) diff --git a/test/index2.spec.js b/test/index2.spec.js index 41de135f3..94cb47126 100644 --- a/test/index2.spec.js +++ b/test/index2.spec.js @@ -43,7 +43,7 @@ describe('lintStaged', () => { "shouldBackup": true, }, "exitOnError": false, - "nonTTYRenderer": "verbose", + "nonTTYRenderer": "silent", "registerSignalListeners": false, "renderer": "silent", }