Я довольно часто использую Github Gists. Я также обнаружил, что меня немного раздражает необходимость вручную копировать и вставлять код в новый Gist. Я подумал про себя эй, я, почему бы вам просто не сделать расширение VS Code, которое будет создавать Gist из выделенного текста. Я сам ответил, это отличная идея, давайте разберемся, как это сделать, даже не проверяя существующее решение на торговой площадке.
Так я сделал и расширение, и я очень гордился собой. Возможно, слишком горд, но недостаточно горд, чтобы рекламировать его, прежде чем проверять рынок, чтобы увидеть, действительно ли он там был. И, слава богу, я этого не сделал, потому что, к моему ужасу, это то, что я нашел, когда искал "суть"
Оказывается, это проблема, которую решали несколько раз. Хорошие расширения (то есть не мои) не только создают Gists, но и обрабатывают аутентификацию и управление Gists за вас. Один из них даже работает с использованием токенов личного доступа, поэтому вы можете обойтись без двухфакторной аутентификации. Моя просто создает тупой анонимный Gist. Что бы ни.
Итак, что я узнал? Я, конечно, научился делать базовое расширение кода, но, что более важно, я узнал, что вам, вероятно, следует сначала попробовать проверить, существует ли существующее решение вашей проблемы.
Решив, что час или два, которые я потратил на это расширение, не пропадут даром, я решил объяснить свой точный процесс создания этого дурацкого расширения специально для вас, дорогой читатель.
Процесс
Сначала я поискал в Google Как сделать расширение VS Code. Любой старший веб-разработчик скажет вам, что поиск в Google - это обязательный первый шаг и, как правило, непрерывный процесс. Я обнаружил, что команда Visual Studio Code написала несколько хорошо документированных примеров для начала. Я последовал примеру Hello World - генератор расширений сэкономил много времени и является очень приятным инструментом. Отличная работа, команда VS Code!
Во-вторых, я знал, что хочу, чтобы пользователь мог щелкнуть правой кнопкой мыши выделенный текст в редакторе и выбрать пункт меню, который затем дал бы им возможность ввести имя файла для сути. По сути, мне нужно было добавить параметр в контекстное меню редактора. Я погуглил добавление пункта контекстного меню в расширение VS Code или что-то в этом роде, что привело меня к документации по пунктам добавления в меню.
Я обнаружил, что в package.json
расширения вы можете добавить menus
в блок contributes
, поэтому, прочитав документацию ОЧЕНЬ случайно, я заменил contributes
в package.json
следующим:
Теперь это добавит пункт меню в контекстное меню в редакторе, которое вы вызываете, щелкнув правой кнопкой мыши.
Прохладный. Классно круто круто. Итак, теперь мне нужно было выяснить, как заставить мое расширение делать что-то при щелчке по этому элементу. Я подумал, что мне придется внести все эти изменения в функцию обратного вызова сгенерированной функции registerCommand
, которая находилась внутри функции activate
. Я также понял, что, поскольку я принимал ввод пользователя и также вызываю API, я, вероятно, захочу использовать async / await. Итак, я создал асинхронную функцию под названием CreateGist
- вот полное расширение для справки.
В строке 40 я вызываю CreateGist
- он будет вызываться всякий раз, когда выполняется команда extension.createGist
, что происходит при щелчке по этому пункту контекстного меню.
Мне нужно было выяснить, как получить выделенный текст, что было достаточно легко. Оказывается, пакет vscode
имеет свойство window
, которое, в свою очередь, имеет свойство activeTextEditor
. Вот документация для окна, которую я, опять же, очень быстро просмотрел.
В строке 6 я получаю текущий выделенный текст в активном редакторе:
const text = editor.document.getText(editor.selection);
Милая. Теперь я просто хочу дать пользователю возможность назвать файл. Не совсем уверен, как это сделать, я сделал command + f
на странице документации vscode API для слова ввод, надеясь, что там что-то есть, И ТАК БЫЛО!
Оказывается, вы можете легко визуализировать поле ввода с помощью vscode.window.showInputBox
, что я сделал в строках с 9 по 11. Остальная часть кода не связана с расширением. Я отправляю HTTP-запрос на API Github, чтобы создать суть. Все действительно довольно скучно.
Наконец, я хотел открыть только что созданный Gist в окне браузера пользователя. Не чувствуя себя таким удачливым, я снова обратился к Google и поискал открыть новое окно в расширении VS Code, где я узнал о сложных командах, которые сначала напугали меня. Оказывается, они не такие уж и сложные. Существует команда vscode.open
, которая принимает URI в качестве аргумента и открывает новое окно браузера. Итак, в строке 31 вы можете видеть, что я беру html_url
из ответного вызова API Github и выполняю команду open
.
Вуаля!
Опять же, не используйте это глупое расширение, потому что альтернативы намного лучше.
Рамзи - разработчик полного цикла JavaScript в компании по анализу данных в Спрингфилде, штат Вирджиния. Вы можете подписаться на него в твиттере или гитхабе. Ему нравится, когда ты это делаешь.