Заставить подсказки для инкрустации типов в Python появляться/исчезать


Совет по подсказкам для тех, кто не совсем в теме

TLDR: Вы можете установить Inlay Hints: Enabled в настройках On/OffUnless pressed, чтобы показать/скрыть подсказки типов инкрустации в коде Python.

В июле команда VS Code Python Team выпустила обновление для VS Code, в котором объявила о поддержке подсказок типов инлеев.

Добавление подсказок типов рядом с вашим кодом очень приятно. Но чем больше я начинал играть с ним, тем больше замечал, что иногда подсказки типов не казались полезными и загромождали код.

Не поймите меня неправильно, мне нравятся подсказки типов. Они очень помогают при устранении неполадок и документировании. Они даже используются в dataclasses, одном из моих любимых инструментов стандартной библиотеки. Но, как я говорю своему ребенку, для всего есть свое время и место. Когда речь идет о подсказках типов, «Все время!» — это не выход.

Рассмотрим следующий пример.

Допустим, у нас есть некоторые объекты словаря, которые попадают в наш код из нескольких систем. Иногда employee_id будет числовым идентификатором, а иногда — уникальной строкой.


jay = {
    "name": "Jay",
    "employee_id": "abcd1234" # some records could be integers depending on the schema
}
Вход в полноэкранный режим Выход из полноэкранного режима

Если мы не определим типы, PyLance будет считать, что контакт jay имеет тип dict[str, str], потому что все значения в словаре str. Что произойдет, если у нас будет другая запись, например:

kevin = {
    "name": "Kevin",
    "employee_id": 12345678
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Переменная kevin будет иметь тип dict[str, Any], потому что тип employee_id отличается от name.

Если мы создадим функцию, которая получает идентификатор сотрудника из нескольких записей и сортирует по employee_id, мы получим TypeError.

def get_employee_id(contact):
    """retrieve employee id from contact"""
    return contact["employee_id"]

sorted_employees = sorted([jay, kevin], key=get_employee_id)
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

TypeError: '<' not supported between instances of 'int' and 'str'
Вход в полноэкранный режим Выход из полноэкранного режима

Решение состоит в том, чтобы вернуть переменную contact как str. Подсказки типа сказали бы нам, что контакт будет Any типа (например, kevin). И это была бы подсказка, необходимая нам для согласования типов.

Мы могли бы даже создать пользовательский именованный тип, как упоминает Лукаш Ланга в своем выступлении на PyCon US 2022 Keynote. Это дало бы полезные подсказки во время написания кода.

Обновление июля 2022 года

Вышеупомянутое обновление VS Code Python сделало так, что типы могут быть вставлены рядом с вашим кодом. Это значительно упрощает добавление подсказок типов, поскольку подсказки (которые не добавляются в ваш код) являются действительным кодом Python и могут быть добавлены автором.

В данном случае подсказки были бы полезны, но я не хочу, чтобы они всегда присутствовали. Существует функция, которая может быть новой для разработчиков Python, использующих VS Code, которая позволяет показывать подсказки вашего типа только тогда, когда вы хотите их видеть.

Включение подсказок инкрустации

Чтобы эта функция работала, сначала нужно включить Inlay Hints для python. Убедитесь, что расширение Python установлено в VS Code и найдите «Python Inlay Hints» в настройках.

Первое значение для включения — Python ' Analysis ' Inlay Hints: Function Return Types. Это дает представление о том, что возвращает функция или метод.

Второе значение — Python ' Analysis ' Inlay Hints: Типы переменных. Это вставляет подсказки для переменных, которые записаны (как те, что приведены выше).

Настройка отображения инкрустированных подсказок в редакторе

Далее в настройках просто найдите «Inlay». Вы должны найти Editor ' Inlay Hints: Enabled. По умолчанию значение установлено on, но у него есть несколько вариантов, включая OnUnlessPressed и OffUnlessPressed.

Если вы измените значение на OffUnlessPressed, вы больше не увидите инкрустированных подсказок, пока не нажмете Ctrl + Alt (⌃ + ⌥ на MacOS). Когда вам понадобится подсказка, нажмите эти клавиши, и подсказки появятся снова. Отпустите клавиши, и они снова исчезнут.

Вы также можете установить OnUnlessPressed. Это делает обратное, показывая только тот код, который существует в файле. Эта запись в настройках также находится рядом с другими стилями подсказок Inlay, которые могут помочь вам отличить ваш код от подсказок.

Оцените статью
devanswers.ru
Добавить комментарий