@@ -14,7 +14,14 @@ import { formatOutput, writeOutput } from '../services/output';
1414import { FailSeverity , ILintConfig , OutputFormat } from '../services/config' ;
1515
1616import { CLIError } from '../errors' ;
17- import { getScoringConfig } from '../formatters/utils/getScoring' ;
17+ import { ScoringConfig } from "./../formatters/types" ;
18+ import {
19+ getScoringConfig ,
20+ getScoringLevel ,
21+ groupBySource ,
22+ getCountsBySeverity ,
23+ uniqueErrors
24+ } from '../formatters//utils' ;
1825
1926const formatOptions = Object . values ( OutputFormat ) ;
2027
@@ -204,18 +211,22 @@ const lintCommand: CommandModule = {
204211 results = filterResultsBySeverity ( results , failSeverity ) ;
205212 }
206213
214+ const scoringConfigData = getScoringConfig ( scoringConfig ) ;
215+
207216 await Promise . all (
208217 format . map ( f => {
209218 const formattedOutput = formatOutput ( results , f , {
210219 failSeverity : getDiagnosticSeverity ( failSeverity ) ,
211- scoringConfig : getScoringConfig ( scoringConfig ) ,
220+ scoringConfig : scoringConfigData ,
212221 } ) ;
213222 return writeOutput ( formattedOutput , output ?. [ f ] ?? '<stdout>' ) ;
214223 } ) ,
215224 ) ;
216-
225+ //process.stdout.write(`${scoringThresholdNotEnough(results, scoringConfigData)}\n`);
217226 if ( results . length > 0 ) {
218- process . exit ( severeEnoughToFail ( results , failSeverity ) ? 1 : 0 ) ;
227+ process . exit (
228+ scoringThresholdNotEnough ( results , scoringConfigData ) ? 1 : severeEnoughToFail ( results , failSeverity ) ? 1 : 0 ,
229+ ) ;
219230 } else if ( config . quiet !== true ) {
220231 const isErrorSeverity = getDiagnosticSeverity ( failSeverity ) === DiagnosticSeverity . Error ;
221232 process . stdout . write (
@@ -283,6 +294,25 @@ const filterResultsBySeverity = (results: IRuleResult[], failSeverity: FailSever
283294 return results . filter ( r => r . severity <= diagnosticSeverity ) ;
284295} ;
285296
297+ const scoringThresholdNotEnough = ( results : IRuleResult [ ] , scoringConfig : ScoringConfig | undefined ) : boolean => {
298+ if ( scoringConfig !== void 0 ) {
299+ const groupedResults = groupBySource ( results ) ;
300+ let groupedUniqueResults = { ...groupedResults } ;
301+ if ( scoringConfig . uniqueErrors ) {
302+ groupedUniqueResults = { ...groupBySource ( uniqueErrors ( results ) ) } ;
303+ }
304+ return (
305+ scoringConfig . threshold >
306+ getScoringLevel (
307+ getCountsBySeverity ( groupedUniqueResults ) ,
308+ scoringConfig . scoringSubtract ,
309+ scoringConfig . warningsSubtract ,
310+ )
311+ ) ;
312+ }
313+ return false ;
314+ } ;
315+
286316export const severeEnoughToFail = ( results : IRuleResult [ ] , failSeverity : FailSeverity ) : boolean => {
287317 const diagnosticSeverity = getDiagnosticSeverity ( failSeverity ) ;
288318 return results . some ( r => r . severity <= diagnosticSeverity ) ;
0 commit comments