IntelliJIDEA live templates para Hugo title and slug

Escrito por Lyoneel el en HUGO, IntelliJ Platform
 3 mins

IntelliJIDEA live templates para Hugo title and slug

Estaba escribiendo y me vino a la mente: Puedo automatizar el title y el slug usando live templates? TL;DR; SI!.

Trabajando con Hugo en contenido y mejoras para este blog usando los IDEs de Jebtrains y usando page bundles de Hugo.

Estructura de archivos

Para este ejemplo vamos a utilizar esta estructura de archivos:

📁 contents
  📁  posts
    📁 2023-01-15-quick-description-of-this-article
       index.en.md

Crear el live template

Para abrir el diálogo de live templates: Settings > Editor > Live Templates

live template creation

Creá un nuevo grupo (opcional) llamado “Hugo”, para ello hay que hacer click en el signo + arriba a la derecha. Luego creá el live template haciendo click en icono + nuevamente. Se debe definir un nombre (Abbreviation), este nombre va a ser utilizado para cuando quieras llamar el live template desde el editor.

Definir el contenido del template

Defino los contenidos del template para esta demostración:

---
title: "$TITLE$"
slug: "$SLUG$"
---

Los contenidos de este template se agregan en el text-area “Template text”, después se hace click en “Edit variables”.

edit variables dialog

En este diálogo vas a encontrar tus dos variables, el próximo paso es definir las expresiones para estas variables.

Variable expressions

Live templates tienen una considerable cantidad de funciones builtin, pero no existe nada como “basepath” or “folder”, tengo que crear mi manera de llegar a ese valor usando regex.

El código para esas variables son:

variable: title
expression: 
regularExpression(regularExpression(regularExpression( filePath(), ".*\\d{4}-\\d{2}-\\d{2}-", ""), "\/index.*", ""), "-", " ")

variable: slug
expression: 
regularExpression(regularExpression( filePath(), ".*\\d{4}-\\d{2}-\\d{2}-", ""), "\/index.*", ""))

Copiá y pegá la expresión, (Todavía no implementé el botón copiar, disculpas, usa triple-click) y con eso ya está listo. Aplicá los cambios, y en el editor escribí el nombre definido previamente (Abbreviation), deberías obtener el title y el slug instantáneamente.

¿Qué demonios hacen esas llamadas usando regulares?

Gracias por preguntar, title tiene 3 llamados a regex, vamos a desglosarlo:

Primer llamado

El primer llamado usa filePath() para obtener el path absoluto, y remueve todo lo que está antes de la fecha y la fecha.

regularExpression( filePath(), ".*\\d{4}-\\d{2}-\\d{2}-", "")

  • \d busca números,
  • {4} y {2} definen la cantidad de números esperados.
  • Las barras adicionales \\ están para escapar la primera barra.
  • .* esto busca todo lo que está antes de la fecha.

Usando la carpeta de ejemplo, el input sería:

[...]/contents/posts/2023-01-15-quick-description-of-this-article/index.en.md

Y el output sería:

quick-description-of-this-article/index.en.md

Segundo llamado

El segundo llamado usa el valor que retorna la primera, y remueve /index

regularExpression( prevCallInput , "\/index.*", "")

Tercer llamado

Y el tercer llamado, reemplaza los guiones por espacios.

regularExpression( "-", " ")

Palabras finales

Espero que esto haga tu experiencia más sencilla con Hugo, haciendo uso de esta herramienta poderosa que provee Intellij. Muchas personas salen corriendo al ver las expresiones regulares, pero no es tan difícil, vos podes.


Gracias por leer!

Namaste.