Skip to content

Bug: hmts_inject_handler crashes when find_filename_in_parent_node returns nil #37

Description

@charliie-dev

Description

When opening a .nix file containing home.file.*.text bindings where the filename cannot be extracted (e.g., find_filename_in_parent_node returns nil), vim.filetype.match({ filename = nil }) is called, which crashes with:

Error executing vim.schedule lua callback:
  .../languagetree.lua:208: vim/filetype.lua:0: At least one of "buf", "filename", or "contents" must be given

Reproduction

Neovim 0.11.6 with nvim-treesitter-context installed.

Open a .nix file with home-manager config like:

home.file = {
  ".config/parallel/will-cite" = {
    text = "";
  };
};

The error triggers because find_filename_in_parent_node can return nil, and that nil is passed directly to vim.filetype.match() without a guard:

hmts.nvim/plugin/hmts.lua

Lines 154 to 161 in a32cd41

local function hmts_inject_handler(match, _, bufnr, predicate, metadata)
local path_node = match[predicate[2]]
local filename = find_filename_in_parent_node(path_node, bufnr)
local alias = vim.filetype.match({ filename = filename })
if alias == nil then
return
end

local function hmts_inject_handler(match, _, bufnr, predicate, metadata)
    local path_node = match[predicate[2]]
    local filename = find_filename_in_parent_node(path_node, bufnr)
    local alias = vim.filetype.match({ filename = filename })  -- filename can be nil here!

Fix

Add a nil check before calling vim.filetype.match:

if filename == nil then
    return
end

Environment

  • Neovim: 0.11.6
  • hmts.nvim: a32cd41
  • OS: macOS (Darwin 25.4.0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions