From 9b4f4b2a7b83100cc75f0be0fb346cd1c678e1da Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.uk>
Date: Wed, 12 Jan 2022 13:42:33 +0000
Subject: [PATCH] feat(nvim): add rst snippets

Refs: #23
---
 roles/neovim/files/after/plugin/luasnip.lua   |  2 ++
 .../files/lua/opdavies/snippets/ft/rst.lua    | 22 +++++++++++++++++++
 2 files changed, 24 insertions(+)
 create mode 100644 roles/neovim/files/lua/opdavies/snippets/ft/rst.lua

diff --git a/roles/neovim/files/after/plugin/luasnip.lua b/roles/neovim/files/after/plugin/luasnip.lua
index 3040ebe0..6441b3ab 100644
--- a/roles/neovim/files/after/plugin/luasnip.lua
+++ b/roles/neovim/files/after/plugin/luasnip.lua
@@ -39,11 +39,13 @@ end
 local javascript = make(R "opdavies.snippets.ft.javascript")
 local markdown = make(R "opdavies.snippets.ft.markdown")
 local php = make(R "opdavies.snippets.ft.php")
+local rst = make(R "opdavies.snippets.ft.rst")
 
 local snippets = {
   js = javascript,
   markdown = markdown,
   php = php,
+  rst = rst,
   typescript = javascript,
   vue = javascript,
 }
diff --git a/roles/neovim/files/lua/opdavies/snippets/ft/rst.lua b/roles/neovim/files/lua/opdavies/snippets/ft/rst.lua
new file mode 100644
index 00000000..657dae18
--- /dev/null
+++ b/roles/neovim/files/lua/opdavies/snippets/ft/rst.lua
@@ -0,0 +1,22 @@
+local ls = require "luasnip"
+
+local i = ls.insert_node
+local f = ls.function_node
+
+local fill_line = function(char)
+  return function()
+    local row = vim.api.nvim_win_get_cursor(0)[1]
+    local lines = vim.api.nvim_buf_get_lines(0, row - 2, row, false)
+    return string.rep(char, #lines[1])
+  end
+end
+
+local M = {
+  link = { ".. _", i(1), ":" },
+
+  head = f(fill_line "=", {}),
+  sub = f(fill_line "-", {}),
+  subsub = f(fill_line "^", {}),
+}
+
+return M