Restrinja o que este loop atua testando cada propriedade - Sonar

Tenho esse trecho de código javascript:

for (var j = 0; j < styles[i].stylers.length; j++) {
	for (var p in styles[i].stylers[j]) {          
		var ruleArg = styles[i].stylers[j][p];
		
		if (p == 'hue' || p == 'color') {
			ruleArg = '0x' + ruleArg.substring(1);
		}
		
		styleRule.push(p + ':' + ruleArg);          
	}
}

Na imagem seguinte recebe essa informação do sonar:

Aplicada a sugestão de correção, pelo próprio sonar:

for (var j = 0; j < styles[i].stylers.length; j++) {
	for (var p in styles[i].stylers[j]) {
		if (styles[i].stylers[j].hasOwnProperty(p)) {//aqui inseri a correção sugerida
			var ruleArg = styles[i].stylers[j][p];
			
			if (p == 'hue' || p == 'color') {
				ruleArg = '0x' + ruleArg.substring(1);
			}
			
			styleRule.push(p + ':' + ruleArg);
		}
	}
}

Do ponto de vista da sugestão do Sonar, o código inserido está correto?

Parece que sim. O sonar ainda está acusando erro?

Antes tinham 12 bugs reportados, agora 0.

No build do jenkins tenho isso:

Poderia apontar onde pode estar o erro no trecho de código anterior?

Na minha época de javascript (há muito, muito tempo atrás) era considero uma má prática usar o for...in para percorrer arrays, acho que justamente por isso o sonar pede esse if a mais.

Você pode usar o método forEach do array em si, ou nesse caso talvez até um map. Algo assim:

styles[i].stylers[j].forEach( (elemento, indice) => {
  var ruleArg = styles[i].stylers[j][p];			
  if (p == 'hue' || p == 'color') {
    ruleArg = '0x' + ruleArg.substring(1);
  }			
  styleRule.push(p + ':' + ruleArg);
});
1 curtida

Note que minha resposta anterior foi antes dessa nova falha do build.

A parte do log que você postou não mostra o motivo da falha.

No log deve ter uma seção chamada “Quality Gates Sonarqube Plugin” que mostra porque está falhando agora.

1 curtida

Detalhe que o erro do sonar (onde está 0.0%) é para a cobertura dos testes, e não para possíveis erros no código.