Эмакс с автозаполнением для конфигурационных файлов Terraform

Вопрос или проблема

Я пытаюсь настроить автозаполнение для файлов terraform в emacs, как это делает vscode.

Вот соответствующая часть конфигурации:

(use-package company
  :ensure t
  :config
  (setq company-idle-delay 0.3
        company-minimum-prefix-length 1)
  :hook ((terraform-mode . company-mode)
         (lsp-mode . company-mode)))

(use-package lsp-mode
  :ensure t
  :hook ((terraform-mode . lsp-deferred)))
(setq lsp-disabled-clients '(tfls))
(setq lsp-terraform-ls-prefill-required-fields t)

(company-quickhelp-mode)

;; Добавить поддержку Terraform в lsp-mode
(add-hook 'terraform-mode-hook #'lsp)

(use-package terraform-mode
  :hook (terraform-mode . lsp-deferred))

С этими настройками emacs не выполняет автозаполнение для ресурсов, связанных с terraform, таких как aws_instance и т.д.

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

Спасибо за вашу помощь.

Я думаю, вам нужно выполнить (company-terraform-init) в буфере с вашим кодом terraform. Без этого будет выполнено только автозаполнение ключевых слов “resource”, “data” и т.д. После выполнения этой команды я получаю нужное вам автозаполнение.

Мне не удалось настроить его автоматический запуск из хука, такого как terraform-mode-hook. Но если я запускаю его вручную, он работает.

Ответ или решение

Для того чтобы обеспечить автозаполнение конфигурационных файлов Terraform в Emacs аналогично тому, как это делается в Visual Studio Code, необходимо убедиться, что все соответствующие пакеты и настройки правильно конфигурированы. Ваш текущий конфигурационный файл уже содержит большинство необходимых компонентов, но, как вы заметили, автозаполнение, похоже, не работает корректно. Позвольте предложить вам несколько шагов, которые помогут устранить проблему.

  1. Убедитесь, что необходимые компоненты установлены:
    Убедитесь, что вы установили пакеты company, lsp-mode и terraform-mode. Проверьте, что они все успешно загружены и функционируют без ошибок.

  2. Настройка автозаполнения с использованием company-terraform:
    По всей видимости, вы можете использовать функцию (company-terraform-init) для инициализации автозаполнения в текущем буфере. Это необходимо делать, так как стандартные настройки не всегда активируют автозаполнение автоматически. Вы можете добавить вызов этой функции в ваш terraform-mode-hook, чтобы сделать его автоматическим.

    Пример:

    (use-package terraform-mode
     :ensure t
     :hook ((terraform-mode . lsp-deferred)
            (terraform-mode . company-terraform-init)))
  3. Проверьте конфигурации lsp-mode:
    Убедитесь, что вы правильно настроили lsp-terraform-ls. У вас в конфигурации отсутствует необходимый клиент для Terraform Language Server (если он установлен). Если вы хотите использовать terraform-ls, то уберите строку:

    (setq lsp-disabled-clients '(tfls))

    Это позволит lsp-mode активировать язык-сервер для Terraform.

  4. Настройка company-mode:
    Убедитесь, что вы правильно настраиваете company-mode. Ваш текущий company-mode выглядит неплохо, но попробуйте добавить company-terraform в company-backends:

    (add-to-list 'company-backends 'company-terraform)
  5. Проверка достижений:
    После внесения всех изменений, проверьте, работает ли автозаполнение в новых файлах Terraform. Откройте файл с расширением .tf и начните вводить ресурс, например aws_instance.

В итоге, ваша окончательная конфигурация может выглядеть следующим образом:

(use-package company
  :ensure t
  :config
  (setq company-idle-delay 0.3
        company-minimum-prefix-length 1)
  :hook ((terraform-mode . company-mode)
         (lsp-mode . company-mode)))

(use-package lsp-mode
  :ensure t
  :hook (terraform-mode . lsp-deferred))

(setq lsp-terraform-ls-prefill-required-fields t)

(company-quickhelp-mode)

(use-package terraform-mode
  :ensure t
  :hook ((terraform-mode . lsp-deferred)
         (terraform-mode . company-terraform-init)))

(add-to-list 'company-backends 'company-terraform)

Теперь, после перезапуска Emacs, вы должны увидеть автозаполнение для ресурсов Terraform. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...