Como ya he comentado varias veces, trato de usar NeoVim como mi editor de texto principal cuando estoy trabajando.
Como en mi día a día, trabajo con Terraform, me gusta tener la documentación de los
resources
y data sources
lo más a mano posible (algo que hace el plugin de Terraform para todos los productos IntelliJ) para
poder consultarlos frecuentemente.
Por desgracia no he encontrado un plugin para NeoVim que me permita hacer esto de forma sencilla, así que he decidido hacerlo yo mismo. En mi primer
lugar pensé en mirar como hacerlo con terraform-ls
, el LSP oficial de Terraform, pero
enseguida lo descarté, ya que el código era bastante complejo y tenía cientos de issues abiertos.
Una vez descartada esta opción, recordé que estaba usando un plugin para NeoVim que permitía abrir links de formar sencilla. El plugin
se llama URL Open y por defecto habilita la apertura de URLs (http, hhtps, ftp, etc.
) en el navegador colocando el
cursor sobre una URL y presionando las teclas gx
.
Mirando su documentación descubrí que era posible
configurarlo para detectar ciertos patrones en los ficheros para todo aquello que no fueran URLs al uso utilizando una propiedad llamada extra_patterns
.
Solución
Mirando el código existente en él plugin, es fácil
encontrar como esta configurado para detectar otro tipo de urls no convencionales (npm, Docker, Gemfile, etc.
).
Así que ya tenemos todos los ingredientes para intentarlo. Vamos a extender los patterns
por defecto de plugin para poder leer la documentación de AWS,
para ello necesitamos:
- Detectar líneas que contengan el patrón
data "aws_
. - Las URLs para estas líneas tendrán el prefijo:
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/
.
- Solo se detectarán en ficheros con extensión
.tf
de Terraform.
La configuración final quedaría así:
return {
"sontungexpt/url-open",
branch = "main",
event = "VeryLazy",
cmd = "URLOpenUnderCursor",
config = function()
local status_ok, url_open = pcall(require, "url-open")
if not status_ok then
return
end
url_open.setup ({
extra_patterns = {
{
pattern = "data [\"]aws_([^%s]*)[\"]",
prefix = "https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/",
file_patterns = { ".*.tf" },
}
}
})
end,
}
Si ahora nos vamos a un fichero Terraform que contenga un resource
dentro, colocamos el cursor sobre el mismo y pulsamos gx
se
debería abrir la documentación del recurso.
Resources
De igual forma podemos hacer lo mismo con los resources
de Terraform. Para ello, solo tenemos conseguir los siguientes puntos:
- Detectar líneas que contengan el patrón
resource "aws_
. - Las URLs para estas líneas tendrán el prefijo:
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/
.
- Solo se detectarán en ficheros con extensión
.tf
de Terraform.
La configuración final quedaría así:
{
pattern = "resource [\"]aws_([^%s]*)[\"]",
prefix = "https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/",
file_patterns = { ".*.tf" },
}
Si ahora nos vamos a un fichero Terraform que contenga un resource
dentro, colocamos el cursor sobre el mismo y pulsamos gx
se
debería abrir la documentación del recurso.
Os dejo por aquí mi configuración para algún
provider
más como DataDog.