This repository has been archived on 2024-10-28. You can view files and clone it, but cannot push or open issues or pull requests.
nvim-config/fnl/plugin/lsp.fnl

101 lines
4.3 KiB
Plaintext
Raw Normal View History

2022-11-30 23:29:58 -08:00
;;; lsp.fnl - lsp configurations
(import-macros {: bind!} :macros)
2022-12-02 16:38:31 -08:00
(fn on-attach [_ buf]
2022-12-07 03:39:47 -08:00
((. (. (require :cmp) :setup) :buffer) {
:sources [{ :name "nvim_lsp" :priority 1 :group 1 }
{ :name "snippy" :priority 1 :group 2 }
{ :name "buffer" :priority 0 :group 3 }
{ :name "path" :priority 0 :group 4 }]})
2022-11-30 23:29:58 -08:00
(bind! :n :gD vim.lsp.buf.declaration buf)
(bind! :n :gd vim.lsp.buf.definition buf)
(bind! :n :K vim.lsp.buf.hover buf)
(bind! :n :gI vim.lsp.buf.implementation buf)
(bind! :n :<C-k> vim.lsp.buf.signature_help buf)
(bind! :n :<leader>wa vim.lsp.buf.add_workspace_folder buf)
(bind! :n :<leader>wr vim.lsp.buf.remove_workspace_folder buf)
2022-12-25 16:34:21 -08:00
(bind! :n :<leader>wl #(print (vim.inspect
2022-11-30 23:29:58 -08:00
(vim.lsp.buf.list_workspace_folders))) buf)
(bind! :n :<leader>D vim.lsp.buf.type_definition buf)
(bind! :n :<leader>rn vim.lsp.buf.rename buf)
; (bind! :n :<leader>cn vim.lsp.buf.code_action buf)
; (bind! :n :gr vim.lsp.buf.references buf)
(bind! :n :<leader>o #(vim.lsp.buf.format { :async true }) buf)
2022-12-25 16:34:21 -08:00
2023-01-01 16:18:50 -08:00
;; Some fzf commands
(bind! :n :gr "<cmd>FzfLua lsp_references<cr>" buf)
(bind! :n :<leader>s "<cmd>FzfLua lsp_live_workspace_symbols<cr>" buf)
(bind! :n :<leader>fs "<cmd>FzfLua lsp_live_workspace_symbols<cr>" buf)
(bind! :n :<leader>fS "<cmd>FzfLua lsp_workspace_symbols<cr>" buf)
(bind! :n :<leader>d "<cmd>FzfLua lsp_document_symbols<cr>" buf)
(bind! :n :<leader>fd "<cmd>FzfLua lsp_document_symbols<cr>" buf)
(bind! :n :<leader>cn "<cmd>FzfLua lsp_code_actions<cr>" buf))
;; (let [fzf (require :fzf-lua)]
;; (bind! :n :gr fzf.lsp_references buf)
;; (bind! :n :<leader>s fzf.lsp_live_workspace_symbols buf)
;; (bind! :n :<leader>fs fzf.lsp_live_workspace_symbols buf)
;; (bind! :n :<leader>fS fzf.lsp_workspace_symbols buf)
;; (bind! :n :<leader>d fzf.lsp_document_symbols buf)
;; (bind! :n :<leader>fd fzf.lsp_document_symbols buf)
;; (bind! :n :<leader>cn fzf.lsp_code_actions buf)))
2022-11-30 23:29:58 -08:00
2022-12-02 16:38:31 -08:00
(fn get-data-dir [server root]
2022-11-30 23:29:58 -08:00
(let [resolved_path (vim.fn.resolve root)
joined_path (vim.fn.substitute resolved_path "\\/" "@" :g)]
(.. (vim.fn.fnamemodify (.. "~/.local/nvim/lsp-cache/"
server
"/")
":p") joined_path)))
(fn configure []
(let [lsp (require :lspconfig)
configs (require :lspconfig.configs)
lsp-cap ((. (require :cmp_nvim_lsp) :default_capabilities))
lsp-utils (require :plugin.lsp)]
(macro setup-server! [name ...]
2022-12-02 19:54:12 -08:00
(let [opts { :on_attach `lsp-utils.on-attach
:capabilities `lsp-cap }]
(var last-key nil)
2022-11-30 23:29:58 -08:00
(each [_ val (ipairs [...])]
(if last-key
(do (tset opts last-key val)
(set last-key nil))
(set last-key val)))
2022-11-30 23:29:58 -08:00
`((. (. lsp ,name) :setup) ,opts)))
(setup-server! :ccls)
(setup-server! :cmake)
(setup-server! :gopls)
(setup-server! :rust_analyzer)
(setup-server! :texlab)
2022-12-25 16:34:21 -08:00
(setup-server! :pylsp)
(setup-server! :sumneko_lua
2022-11-30 23:29:58 -08:00
:settings {
:Lua {
:runtime {
:version "LuaJIT" }
:diagnostics {
:globals [ "vim" ] }
:workspace {
:checkThirdParty false
:library (vim.api.nvim_get_runtime_file "" true) }
:telemetry {
:enable false }}})
(tset configs :fennel_language_server {
:default_config {
:cmd [ "fennel-language-server" ]
:filetypes [ "fennel" ]
:single_file_support true
:root_dir (lsp.util.root_pattern "fnl")
:settings {
:fennel {
:workspace {
:library (vim.api.nvim_list_runtime_paths) }
:diagnostics {
:globals [ "vim" ] }}}}})
; needed to make it not complain about a nil setup function
(if configs.fennel_language_server.setup
(setup-server! :fennel_language_server))))
2022-11-30 23:29:58 -08:00
2022-12-02 16:38:31 -08:00
{ : configure : on-attach : get-data-dir }