Изучение функций завершения кода GitHub Copilot

Завершено

GitHub Copilot предоставляет два типа встроенных предложений. Призрачные предложения появляются в виде полупрозрачного текста в текущем положении курсора при вводе. Следующие предложения редактирования (NES) прогнозируют расположение и содержимое следующего редактирования кода на основе последних изменений, которые вы сделали.

При выполнении следующих действий вы получаете подсказки текста:

  • Введите частичную или полную строку кода в редакторе.
  • Введите частичный или полный комментарий кода в редакторе.
  • Введите пустую строку кода в редакторе.

Следующие предложения по редактированию появляются автоматически, когда вы изменяете код. Они прогнозируют, какие изменения вы, скорее всего, сделаете на основе ваших недавних изменений и отображаются с особым индикатором, который показывает предлагаемое место для редактирования.

Общие сценарии предложений для следующего редактирования

Следующие предложения по редактированию особенно полезны в трех сценариях написания кода:

  • Перехват ошибок: NES обнаруживает такие проблемы, как опечатки (conts x = 5const x = 5), инвертированные тернарные выражения и неправильные операторы сравнения, а затем предлагает правильное исправление.
  • Каскадные изменения намерений: при переименовании типа или переменной NES предлагает распространение изменений через весь зависимый код. Например, переименование класса из Point в Point3D, что запускает предложения по добавлению координаты z везде, где это необходимо в коде.
  • Рефакторинг: после однократного переименования переменной NES предлагает обновить все остальные вхождения. После вставки кода NES предлагает адаптировать его для соответствия стилю окружающего кода.

Создать рекомендацию для текстового заполнителя

GitHub Copilot ускоряет разработку приложений, предлагая варианты завершения кода на основе кода, который вы пишете.

Например, предположим, что вы хотите создать метод C# с именем addInt, который возвращает сумму двух целых чисел. Если вы начинаете вводить подпись метода, GitHub Copilot предлагает код, который он считает, что вы хотите создать.

Скриншот редактора Visual Studio Code с предложением в виде «призрачного текста» для тела метода addInt.

Предложение текста призрака отображается без выделения цветного синтаксиса. Это помогает отличить предложение от существующего кода. Рекомендуемый код можно принять, нажав клавишу TAB.

Чтобы закрыть предложение, нажмите клавишу ESC.

Пример addInt немного упрощен, поэтому вы можете задуматься о том, как GitHub Copilot справляется с чем-то более сложным.

Предположим, вы хотите создать метод, который принимает список чисел и возвращает сумму простых чисел, содержащихся в списке. Можно назвать метод addPrimeNumbersInNumericList. Когда вы начинаете вводить сигнатуру метода, GitHub Copilot генерирует подсказку для вас. Рассмотрим пример.

Скриншот редактора Visual Studio Code с предложением текста-призрака для тела метода addPrimeNumbersInNumericList.

Прежде чем принимать их, важно ознакомиться с предложениями. Это предложение текста-заполнителя выглядит хорошо, вы можете принять предложение, нажав клавишу TAB.

Давайте продолжим сценарий немного дальше.

После объединения предложения в код обратите внимание, что метод isPrime подчеркнут красным цветом. Это связано с тем, что метод isPrime еще не существует в коде.

GitHub Copilot обучено следовать лучшим практикам, включая разбивание сложных проблем на небольшие, более управляемые части. В этом случае GitHub Copilot предлагает создать отдельный метод isPrime, чтобы проверить, является ли число простым.

GitHub Copilot готов предложить фрагмент кода для метода isPrime. При вводе пустой строки под методом addPrimeNumbersInNumericList GitHub Copilot предлагает метод isPrime, который можно использовать.

Screenshot редактора Visual Studio Code с предложением текста призрака для вспомогательного метода isPrime, отображающегося после метода addPrimeNumbersInNumericList.

Предложения текста-призрака ускоряют процесс разработки, предоставляя фрагменты кода. Но что, если предложения не совсем соответствуют вашим потребностям? GitHub Copilot предоставляет интерфейс для управления предложениями призрачного текста.

Управление предложениями автозаполнения текста

Когда GitHub Copilot предлагает черновое завершение текста, он также предоставляет интерфейс для управления рекомендациями. Вы можете принять предложение, просмотреть другие предложения или закрыть предложения.

При наведении указателя мыши на предлагаемое автозаполнение вы выбираете из нескольких вариантов управления предложениями.

Скриншот редактора Visual Studio Code, показывающий панель управления предложениями предсказанного текста с командами Accept, Accept Word, навигация и дополнительные параметры.

Интерфейс по умолчанию для управления предложениями включает следующие параметры:

  • Примите предложение (в полном объеме), нажав кнопку "Принять". Вы также можете принять предложение, нажав клавишу TAB.
  • Частично примите предложение, выбрав Accept Word. Вы также можете частично принять предложение, нажав Ctrl + клавиши (стрелка вправо).
  • Просмотрите альтернативные предложения, выбрав > или <. Кроме того, можно просмотреть альтернативные варианты, нажав клавиши Alt + ] или Alt + [.

Выбор опции Accept Word принимает следующее слово в предложении. Это полезно, если вы хотите принять часть предложения, а затем продолжить ввод собственного кода. Например, можно принять первое слово предложения метода isPrime.

Продолжайте выбирать Accept Word, пока не примите столько предложений, сколько хотите.

Щелкнув на значок с многоточием (...) справа от кнопки "Принять Word", вы получите дополнительные параметры, такие как Принять строку и Всегда показывать панель инструментов.

Выбор параметра "Всегда показывать панель инструментов" гарантирует, что панель инструментов будет оставаться видимой при использовании сочетаний клавиш для управления предложениями текста подсказок призрака. При выборе опции Open Completions Panel откроется панель завершений GitHub Copilot.

Замечание

Чтобы принять всю строку предложения, необходимо настроить настраиваемое сочетание клавиш для editor.action.inlineSuggest.acceptNextLine команды. Этот параметр по умолчанию недоступен на панели инструментов.

Создание предложений кода из комментариев

Помимо предложения автозавершения на основе кода, GitHub Copilot может использовать комментарии кода для предложения фрагментов кода. Используйте фразы естественного языка, чтобы описать код, который требуется создать. Это позволяет GitHub Copilot предлагать предложения автозавершения, соответствующие конкретным требованиям. Например, можно указать тип алгоритма, который вы хотите использовать в вычислении, или какие методы и свойства, которые необходимо добавить в класс.

Давайте вернемся к примеру простых чисел. На этом этапе у вас есть следующий код:

int addPrimeNumbersInNumericList(List<int> numbers)
{
    int sum = 0;
    foreach (int number in numbers)
    {
        if (IsPrime(number))
        {
            sum += number;
        }
    }
    return sum;
}

private bool IsPrime(int number)
{
    if (number <= 1)
    {
        return false;
    }
    for (int i = 2; i <= Math.Sqrt(number); i++)
    {
        if (number % i == 0) return false;
    }
    return true;
}

Методы addPrimeNumbersInNumericList и isPrime кажутся завершёнными. Однако вам по-прежнему нужен список чисел, которые можно использовать в качестве аргумента при вызове метода addPrimeNumbersInNumericList. Вы можете написать комментарий, описывающий список нужных чисел. Например, список из 100 случайных чисел, которые варьируются от 1 до 1000.

При вводе комментария GitHub Copilot предлагает автозавершение, которое завершает комментарий. GitHub Copilot использует окружающий код для улучшения своих предложений. Например, если вы начнете вводить комментарий // create, GitHub Copilot использует окружающий код для прогнозирования того, что нужно создать. В этом случае GitHub Copilot использует метод addPrimeNumbersInNumericList для предсказания, что вы хотите создать a list of numbers.

Скриншот редактора Visual Studio Code с предложением текста-призрака, завершившим комментарий на

Продолжая писать комментарий, GitHub Copilot обновляет подсказку автозаполнения. Когда вы будете готовы принять предложение, нажмите кнопку "Принять " или нажмите клавишу TAB.

При создании новой строки кода после комментария GitHub Copilot начинает создавать фрагмент кода на основе комментария и существующего кода.

Скриншот редактора Visual Studio Code с предложением для автозавершения для первой строки кода, основанное на комментарии выше.

Примите все предложения по мере их появления. Если GitHub Copilot не закончил, оно генерирует другое предложение, которое можно принять.

Если вы вводите новую строку кода после завершения фрагмента кода, GitHub Copilot создает еще одно предложение автозаполнения на основе требований проекта кода.

Сводка

Предложения по тексту призрака и последующие предложения по редактированию помогают более эффективно и точно писать код. Предложения полупрозрачного текста появляются в виде полупрозрачного текста в месте расположения курсора при вводе; следующие предложения редактирования прогнозируют расположение и содержимое вашего следующего изменения на основе ваших последних изменений. Вы можете создать рекомендацию текста-призрака, введя частичную или полную строку кода, частичный или полный комментарий кода или пустую строку кода. Вы можете принять предложение, нажав клавишу TAB, или закрыть его, нажав клавишу ESC. Вы можете управлять предложениями с помощью панели инструментов, которая отображается при наведении указателя мыши на предложение. Панель инструментов позволяет просматривать альтернативные предложения, принимать предложения, принимать отдельное слово из предложения или открывать панель предложений GitHub Copilot для просмотра дополнительных вариантов.