VS Code Prettier нарушает доступ к хешу

Я пытаюсь получить доступ к данным в хеше следующим образом:

result&.data['address']['ISO3166-2-lvl4']

но когда я сохраняю файл, Prettier меняет его на это:

result&.data&.[]('ISO3166-2-lvl4')

что не работает. Что здесь пытается сделать Prettier и как я могу это остановить?

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
2
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Можешь попробовать:

// prettier-ignore
result&.data['address']['ISO3166-2-lvl4']

Ruby использует # для комментирования кода, но несмотря на это, похоже, что эта функция не поддерживается для ruby. По крайней мере, это не сработало для меня. Добро пожаловать в переполнение стека.

Arel 19.01.2023 19:26

@Arel согласно Документам для плагина ruby ​​вам нужно будет использовать # stree-ignore вместо этого.

engineersmnky 19.01.2023 21:45
Ответ принят как подходящий

Это на самом деле не работает, если result равно nil:

>> result = nil
=> nil
>> result&.data[:address][:iso]
undefined method `[]' for nil:NilClass (NoMethodError)

В общем, вы должны использовать &. для каждого метода, который вы цепляете после первого &..

Prettier пытается вызвать метод Hash#[] с оператором &., который должен выглядеть так:

>> result&.data&.[](:address)&.[](:iso)
=> nil

# it works when you have result and data hash
class Result
  def data = {address: {iso: '123'}}
end
result = Result.new

>> result&.data&.[](:address)&.[](:iso)
=> "123"

Я думаю, &.[] — неудобный способ сделать это, даже если красивее сработало, как задумано. копать здесь предпочтительнее:

>> result&.data&.dig(:address, :iso)
=> "123"
>> result = nil
=> nil
>> result&.data&.dig(:address, :iso)
=> nil

@engineersmnky
Предполагая, что хэш данных на самом деле не нуждается в безопасности:

if result
  result.data[:address][:iso]
end

Оставьте это расширению под названием «Prettier», чтобы сделать вещи более уродливыми. Хотя фактическое предложение безопасной навигации (с использованием dig), хотя и правильное и функциональное, на мой взгляд, также ужасно.

engineersmnky 19.01.2023 18:56

Другие вопросы по теме