DEV Community

Braybaut
Braybaut

Posted on

5 5

Integrate Terraform Language Server Protocol With vim

VIM

We write large-scale infrastructure with terraform. We spend hours creating modules, writing resources, developing infrastructure. To feel more comfortable, surely we need a langserver in our editor. I'll show how to integrate a terraform langserver in vim - making it a Swiss Army Knife.

The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features. Like auto complete, go to definition, find all references and alike into the tool. This post explains how to integrate terraform-lsp on vim.

Requirements

  • Go >= 1.14
  • nodejs >= 10.12
  • vim >= 8.0

Install coc-nvim With vim-plug


" Use release branch (recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by using yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Enter fullscreen mode Exit fullscreen mode

In .vimrc or init.vim, then restart Vim and run :PlugInstall.

Download terraform-lsp

Download a RELEASE from github, extract file and move binary to /usr/local/sbin/

In this example I use Release v0.0.11-beta2

Download file with wget

wget https://github.com/juliosueiras/terraform-lsp/releases/download/v0.0.11-beta2/terraform-lsp_0.0.11-beta2_linux_amd64.tar.gz
Enter fullscreen mode Exit fullscreen mode

Extract file with tar

tar -xvf terraform-lsp_0.0.11-beta2_linux_amd64.tar.gz
Enter fullscreen mode Exit fullscreen mode

Move file terraform-lsp to /usr/local/bin/

sudo mv terraform-lsp /usr/local/bin/
Enter fullscreen mode Exit fullscreen mode

Create coc-nvim Config

Add snippet to coc-setting.json find file on ~/.vim/coc-setting.json or open file with :CocConfig

{
    "languageserver": {
        "terraform": {
            "command": "terraform-lsp",
            "filetypes": [
                "terraform",
                "tf"
            ],
            "initializationOptions": {},
            "settings": {}
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Now create new terraform files and resources to check autocomplete, attributes and more.

Usage:

​List resources available:
​​Resources


List Attributes available:
Attibutes

​​When an attribute is required:
​​Error

Notes:

  • Currently there are two terraform lsp, Terraform-lsp and Terraform-ls.

  • Aim is a unified lsp for terraform, but for now there's two concurrent developments, terraform-lsp for experimental features and terraform-ls for stability

Original post: https://braybaut.dev/posts/integrate-terraform-language-server-protocol-with-vim/

References:

Terraform-lsp

Terraform

langserver.org

coc-nvim

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay