Почему JSLint предупреждает меня о неправильном формате моего оператора switch-case? - PullRequest
1 голос
/ 03 ноября 2019

В Adobe Brackets я получаю предупреждения от JSLint при написании строгого кода ['используйте строгий'], что мой оператор регистра переключателя неправильно отформатирован:
например. Ожидаемый 'case' в столбце #, а не в столбце #

Если я переместлю все назад в операторе switch обратно на одну "вкладку", JSLint будет счастлив.
Но Adobe Brackets (и подобные приложения с кодом) хочетотступ в операторах case, и даже при использовании Code Beautify он также форматирует код, чтобы иметь отступ перед оператором case.

  • Когда используется строгий код,JSLint предлагает действительно правильный способ форматирования операторов регистра переключателя?
  • Есть ли способ исправить / сделать JSLint в Adobe Brackets, чтобы он считал, что этот отступ правильный? (Я хотел бы придерживаться того, чтобы не взламывать код JSLint)
  • Зачем редакторам форматировать оператор switch-case таким образом, если строгий код не хочет, чтобы вы это делали?
  • Яна самом деле просто делает что-то не так?
  • Является ли это недостатком JSLint и есть ли способ избежать использования оператора switch-case в целом, что также делает процесс JSLint счастливым?
  • Должен ли я просто перестать использовать JSLint вообще? И переключиться на что-то еще?

Этот код вложен в цикл for:

switch (curButton.button.innerText.toLowerCase()) {
    case this.Part1.Button.ButtonText.toLowerCase():
        this.Part1.Button.ButtonText = curButton.button.innerText;
        this.Part1.Button.Element = curButton.button;
        this.Part1.Button.CurrentClass = curButton.button.className;
        console.log(smgData.PodCast.Parts.Part1.Button);
        break;
    case this.Part2.Button.ButtonText.toLowerCase():
        this.Part2.Button.ButtonText = curButton.button.innerText;
        this.Part2.Button.Element = curButton.button;
        this.Part2.Button.CurrentClass = curButton.button.className;
        console.log(smgData.PodCast.Parts.Part2.Button);
        break;
    case this.Part3.Button.ButtonText.toLowerCase():
        this.Part3.Button.ButtonText = curButton.button.innerText;
        this.Part3.Button.Element = curButton.button;
        this.Part2.Button.CurrentClass = curButton.button.className;
        console.log(smgData.PodCast.Parts.Part3.Button);
        break;
}

Вот базовый код, который будет воспроизводить это на https://www.jslint.com/

function abcd() {
    var a;
    var b;
    switch (a) {
        case 1:
            a=b;
            break;
        case 2:
            b=a;
            break;
    }
}

JSLint Warnings

1 Ответ

1 голос
/ 03 ноября 2019

Это звучит как проблема с JSLint.

Это не совсем то, что вы просили, а один из способов переформулировать код и полностью избежать switch (и, следовательно, проблемы, с которыми JSLint сталкивается с switch) означает .find Part, чьи ButtonText совпадают. Затем используйте скобки для поиска кнопки на this:

const currentText = curButton.button.innerText.toLowerCase();
const matchingPart = ['Part1', 'Part2', 'Part3']
    .find(part => currentText === this[part].Button.ButtonText.toLowerCase());
if (matchingPart) {
    const { button } = this[matchingPart];
    button.ButtonText = curButton.button.innerText;
    button.Element = curButton.button;
    button.CurrentClass = curButton.button.className;
    console.log(smgData.PodCast.Parts[matchingPart].Button);
}

Если вы можете контролировать форму объекта this, вероятно, было бы легче, если бы Part s былимассив, а не 3 разных свойства. Тогда вы могли бы .find над этим массивом вместо жесткого кодирования свойств 3 Part.

Я бы посчитал приведенный выше код совершенно прекрасным , но чтобыон проходит все правила JSLint (IMO - самоуверенные и не очень хорошие), это должно быть

const currentText = curButton.button.innerText.toLowerCase();
const props = ["Part1", "Part2", "Part3"];
const matchingPart = props.find(function(part) {
    return currentText === this[part].Button.ButtonText.toLowerCase();
});
if (matchingPart) {
    const { button } = this[matchingPart];
    button.ButtonText = curButton.button.innerText;
    button.Element = curButton.button;
    button.CurrentClass = curButton.button.className;
    console.log(smgData.PodCast.Parts[matchingPart].Button);
}
...