From 8a0073182f7b845e74e951af318a166177162d62 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Sun, 10 May 2026 23:19:39 +0200 Subject: [PATCH] languages/haskell: simplify attach function --- modules/plugins/languages/haskell.nix | 55 ++++++++++++--------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index f3bb54e9..737b511d 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -200,38 +200,31 @@ in { vim = { extraPackages = [haskellPackages.cabal-fmt]; startPlugins = ["haskell-tools-nvim"]; - globals.haskell_tools = let - htCfg = cfg.extensions.haskell-tools; - keymapDefinitions = options.vim.languages.haskell.extensions.haskell-tools.mappings; - mappings = addDescriptionsToMappings htCfg.mappings keymapDefinitions; - mkBinding = binding: action: - if binding.value != null - then "vim.keymap.set('n', ${toLuaObject binding.value}, ${action}, {buffer=bufnr, noremap=true, silent=true, desc=${toLuaObject binding.description}})" - else ""; - generatedOnAttach = mkLuaInline '' - function(client, bufnr) - local ht = require("haskell-tools") - ${mkBinding mappings.codeLensRun "vim.lsp.codelens.run"} - ${mkBinding mappings.hoogleSignature "ht.hoogle.hoogle_signature"} - ${mkBinding mappings.evalAll "ht.lsp.buf_eval_all"} - ${mkBinding mappings.replToggle "function() vim.cmd('Haskell repl toggle') end"} - ${mkBinding mappings.replToggleFile "function() vim.cmd('Haskell repl toggle ' .. vim.api.nvim_buf_get_name(0)) end"} - ${mkBinding mappings.replQuit "function() vim.cmd('Haskell repl quit') end"} - end - ''; - effectiveOnAttach = - if htCfg.setupOpts.hls.on_attach != null - then htCfg.setupOpts.hls.on_attach - else generatedOnAttach; - in - htCfg.setupOpts - // { - hls = - htCfg.setupOpts.hls - // { - on_attach = effectiveOnAttach; - }; + globals.haskell_tools = cfg.extensions.haskell-tools.setupOpts; + languages.haskell.extensions.haskell-tools.setupOpts = { + hls = { + on_attach = let + htCfg = cfg.extensions.haskell-tools; + keymapDefinitions = options.vim.languages.haskell.extensions.haskell-tools.mappings; + mappings = addDescriptionsToMappings htCfg.mappings keymapDefinitions; + mkBinding = binding: action: + if binding.value != null + then "vim.keymap.set('n', ${toLuaObject binding.value}, ${action}, {buffer=bufnr, noremap=true, silent=true, desc=${toLuaObject binding.description}})" + else ""; + in + mkLuaInline '' + function(client, bufnr) + local ht = require("haskell-tools") + ${mkBinding mappings.codeLensRun "vim.lsp.codelens.run"} + ${mkBinding mappings.hoogleSignature "ht.hoogle.hoogle_signature"} + ${mkBinding mappings.evalAll "ht.lsp.buf_eval_all"} + ${mkBinding mappings.replToggle "function() vim.cmd('Haskell repl toggle') end"} + ${mkBinding mappings.replToggleFile "function() vim.cmd('Haskell repl toggle ' .. vim.api.nvim_buf_get_name(0)) end"} + ${mkBinding mappings.replQuit "function() vim.cmd('Haskell repl quit') end"} + end + ''; }; + }; }; }) ]);