Skip to content

YAML (Ansible)

When installed, ansible-language-server is invoked on .yaml files where filetype=yaml.ansible. Rather than setting this manually each time, we can leverage our polish function to set the filetype based on standard Ansible filesystem patterns.

return {
polish = function()
local function yaml_ft(path, bufnr)
-- get content of buffer as string
local content = vim.filetype.getlines(bufnr)
if type(content) == "table" then content = table.concat(content, "\n") end
-- check if file is in roles, tasks, or handlers folder
local path_regex = vim.regex "(tasks\\|roles\\|handlers)/"
if path_regex and path_regex:match_str(path) then return "yaml.ansible" end
-- check for known ansible playbook text and if found, return yaml.ansible
local regex = vim.regex "hosts:\\|tasks:"
if regex and regex:match_str(content) then return "yaml.ansible" end
-- return yaml if nothing else
return "yaml"
vim.filetype.add {
extension = {
yml = yaml_ft,
yaml = yaml_ft,