Я запускаю SonarQube против старого приложения.Это помечает что-то в JavaScript (не в TypeScript или какой-нибудь модной современной вещи, просто в простом старом JavaScript), что, на мой взгляд, ложно, но я не уверен на сто процентов.Это выглядит как этот минимальный пример:
var foo=null;
var bar=["a","b","c","foobar"]
for(var i=0; i<bar.length; i++) {
if(bar[i] == "foobar") {
foo = i;
}
}
И он помечается на строке foo = i;говоря, что мы должны использовать «var» для объявления foo, но вы можете видеть, что foo был объявлен ранее.Это какая-то странная область видимости JavaScript, мне нужно снова использовать var?Или я могу просто пометить это как ложное срабатывание и двигаться дальше?
(Реальное приложение работает, как и ожидалось, но нас просят прочитать и [каким-то образом] рассмотреть любые выводы SonarQube.)
Вот еще один минимальный пример, который вы можете найти более правдоподобным ... он помечается на многих похожих примерах (помните, что это приложение старое, и мы не очень его украшаем, на самом деле интерфейс по крайней мере находится на рубильном блоке, который будет полностью переписан в ближайшем будущем), и многие из них действительно просты, как это:
var isFoobar=false;
var bar=["foo","foobar"];
for(var i=0; i<bar.length; i++) {
if(bar[i] == "foobar") {
isFoobar = true;
}
// if baz, set isBaz variable
// if buzz, set isBuzz variable
// etc. etc. for many more
}
// do something with isFoobar, isBaz, isBuzz, etc., down here
Как бы безумно это не выглядело, таких вещей, как «indexOf», просто не было вокругкогда это было написано (изначально поддерживало IE 8 или более раннюю версию и с тех пор никогда не обновлялось, просто продолжало работать в IE в "устаревшем режиме").