#+TITLE:   tools/terraform
#+DATE:    November 21, 2019
#+SINCE:   v2.1.0
#+STARTUP: inlineimages

* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
- [[#prerequisites][Prerequisites]]
- [[#features][Features]]
  - [[#syntax-highlighting][Syntax highlighting]]
  - [[#code-formatting][Code formatting]]
  - [[#code-navigation][Code navigation]]
  - [[#code-completion][Code completion]]
  - [[#documentation][Documentation]]
  - [[#executing-terraform-commands][Executing Terraform commands]]
- [[#appendix][Appendix]]
  - [[#keybindings][Keybindings]]
    - [[#localleader][:localleader]]

* Description
This module adds support for working with [[https://www.terraform.io][Terraform]] files in Doom Emacs. This
includes syntax highlighting, intelligent code completion, and the ability to run
Terraform commands directly from Emacs.

** Module Flags
This module provides no flags.

** Plugins
+ [[https://github.com/syohex/emacs-terraform-mode][terraform-mode]]
+ [[https://github.com/rafalcieslak/emacs-company-terraform][company-terraform*]]

* Prerequisites
The =terraform= executable must be installed and accessible from your PATH.

* Features
** Syntax highlighting
Syntax highlighting is provided from =terraform-mode= and =hcl-mode=.

** Code formatting
=:tools terraform= does not provide code formatting directly, but =:editor
format= works with Terraform files.

** Code navigation
Code navigation is supported through =imenu= from =terraform-mode=.

** Code completion
Code completion of Terraform builtins is provided from =company-terraform= and
generally works well despite being generated through a [[https://github.com/rafalcieslak/emacs-company-terraform/blob/master/company-terraform-data.el][static (outdated) file]].

=company-terraform= also provides code completion of resources within your project.

** Documentation
Documentation is accessible through the normal =company-mode= show documentation
functionality, thanks to =company-terraform=.

** Executing Terraform commands
=:tools terraform= provides commands under the =localleader= to run the most
common Terraform operations (see Keybindings below).

* Appendix
** Keybindings
*** :localleader
| key | description           |
|-----+-----------------------|
| =i= | Run =terraform init=  |
| =p= | Run =terraform plan=  |
| =a= | Run =terraform apply= |
