Add untracked fnl/plugin file
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,2 @@ | |||||||
| lua/ | /lua/ | ||||||
| plugin/ | /plugin/ | ||||||
|  | |||||||
							
								
								
									
										88
									
								
								fnl/plugin/cmp.fnl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								fnl/plugin/cmp.fnl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | |||||||
|  | ;;; cmp.fnl - nvim-cmp config | ||||||
|  |  | ||||||
|  | (import-macros {: module-call!} :macros) | ||||||
|  |  | ||||||
|  | { :configure #(let [cmp (require :cmp) | ||||||
|  |        compare (require :cmp.config.compare)] | ||||||
|  |    (cmp.setup | ||||||
|  |      { :snippet { | ||||||
|  |          :expand #(module-call! :snippy :expand_snippet $1.body) } | ||||||
|  |        :mapping { | ||||||
|  |          :<C-b> (cmp.mapping (cmp.mapping.scroll_docs -4) | ||||||
|  |                              [ :i :c ]) | ||||||
|  |          :<C-f> (cmp.mapping (cmp.mapping.scroll_docs 4) | ||||||
|  |                              [ :i :c ]) | ||||||
|  |          :<C-space> (cmp.mapping (cmp.mapping.complete) | ||||||
|  |                                  [ :i :c ]) | ||||||
|  |          :<C-e> (cmp.mapping (cmp.mapping.abort) | ||||||
|  |                              [ :i :c ]) | ||||||
|  |          :<CR> (cmp.mapping | ||||||
|  |                  (cmp.mapping.confirm { :select false }) | ||||||
|  |                  [ :i :c ]) | ||||||
|  |          :<C-j> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_next_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) | ||||||
|  |          :<C-k> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_prev_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) | ||||||
|  |          :<C-n> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_next_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) | ||||||
|  |          :<C-p> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_prev_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) | ||||||
|  |          :<down> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_next_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) | ||||||
|  |          :<up> (cmp.mapping | ||||||
|  |                   (cmp.mapping.select_prev_item | ||||||
|  |                     { :behavior cmp.SelectBehavior.Select }) | ||||||
|  |                   [ :i :c ]) } | ||||||
|  |          :formatting { | ||||||
|  |            :format (fn [entry vim_item] | ||||||
|  |                      (tset vim_item :menu | ||||||
|  |                            (. { :nvim_lsp "[LSP]" | ||||||
|  |                                 :treesitter "[TS]" | ||||||
|  |                                 :snippy "[Snippy]" | ||||||
|  |                                 :buffer "[Buffer]" | ||||||
|  |                                 :path "[Path]" } | ||||||
|  |                                 entry.source.name)) | ||||||
|  |                      vim_item) | ||||||
|  |          } | ||||||
|  |          :sources (cmp.config.sources | ||||||
|  |                     [{ :name "nvim_lsp" :priority 2 } | ||||||
|  |                      { :name "snippy" :priority 1 } | ||||||
|  |                      { :name "buffer" :priority 0 } | ||||||
|  |                      { :name "path" :priority 0 }] | ||||||
|  |                     [{ :name "treesitter" :priority 2 } | ||||||
|  |                      { :name "snippy" :priority 1 } | ||||||
|  |                      { :name "buffer" :priority 0 } | ||||||
|  |                      { :name "path" :priority 0 }]) | ||||||
|  |          :sorting { | ||||||
|  |            :priority_weight 2 | ||||||
|  |            :comparators [ | ||||||
|  |              compare.score | ||||||
|  |              compare.locality | ||||||
|  |              compare.recently_used | ||||||
|  |              compare.offset | ||||||
|  |              compare.order | ||||||
|  |              ; compare.scopes | ||||||
|  |              ; compare.exact | ||||||
|  |              ; compare.sort_text | ||||||
|  |              ; compare.kind | ||||||
|  |              ; compare.length | ||||||
|  |            ]}}) | ||||||
|  |     (cmp.setup.cmdline "/" | ||||||
|  |                       { :mapping (cmp.mapping.preset.cmdline) | ||||||
|  |                         :sources (cmp.config.sources | ||||||
|  |                                    [{ :name "buffer" }])}) | ||||||
|  |     (cmp.setup.cmdline ":" | ||||||
|  |                        { :mapping (cmp.mapping.preset.cmdline) | ||||||
|  |                          :sources (cmp.config.sources | ||||||
|  |                                     [{ :name "cmdline" } | ||||||
|  |                                      { :name "path" }])}))} | ||||||
							
								
								
									
										20
									
								
								fnl/plugin/jdtls.fnl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								fnl/plugin/jdtls.fnl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | ;;; jdtls.fnl - nvim-jdtls configuration | ||||||
|  |  | ||||||
|  | (import-macros {: hook! : module-call! : module-fn!} :macros) | ||||||
|  |  | ||||||
|  | (fn configure [] | ||||||
|  |   (hook! :FileType :java  | ||||||
|  |          #(let [root_dir (module-call! :jdtls.setup :find_root | ||||||
|  |                           [ ".git" "mvnw" "gradlew" "build.gradle" ]) | ||||||
|  |                 lsp_cap (module-call! :cmp_nvim_lsp :default_capabilities)] | ||||||
|  |                             (module-call! :jdtls :start_or_attach | ||||||
|  |                              { :capabilities lsp_cap | ||||||
|  |                                :on_attach (module-fn! :plugin.lsp :on_attach) | ||||||
|  |                                :root_dir root_dir  | ||||||
|  |                                :cmd [ "jdtls"  | ||||||
|  |                                       "-data"  | ||||||
|  |                                       (module-call! :plugin.lsp  | ||||||
|  |                                                     :get_data_dir  | ||||||
|  |                                                     :jdtls root_dir) ]})))) | ||||||
|  |  | ||||||
|  | {: configure} | ||||||
							
								
								
									
										86
									
								
								fnl/plugin/lsp.fnl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								fnl/plugin/lsp.fnl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | ;;; lsp.fnl - lsp configurations | ||||||
|  |  | ||||||
|  | (import-macros {: bind!} :macros) | ||||||
|  |  | ||||||
|  | (fn on_attach [_ buf] | ||||||
|  |   (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) | ||||||
|  |   (bind! :n :<leader>wl #(print (vim.inspect  | ||||||
|  |                                 (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) | ||||||
|  |    | ||||||
|  |   ;; Some telescope commands | ||||||
|  |   (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))) | ||||||
|  |  | ||||||
|  | (fn get_data_dir [server root] | ||||||
|  |   (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))] | ||||||
|  |       (macro setup_server! [name ...] | ||||||
|  |             (let [opts { :on_attach `on_attach | ||||||
|  |                          :capabilities `lsp_cap }] | ||||||
|  |               (var last_key nil) | ||||||
|  |               (each [_ val (ipairs [...])] | ||||||
|  |                 (if last_key | ||||||
|  |                     (do (tset opts last_key val) | ||||||
|  |                         (set last_key nil)) | ||||||
|  |                     (set last_key val))) | ||||||
|  |               `((. (. lsp ,name) :setup) ,opts))) | ||||||
|  |       (setup_server! :ccls) | ||||||
|  |       (setup_server! :cmake) | ||||||
|  |       (setup_server! :gopls) | ||||||
|  |       (setup_server! :rust_analyzer) | ||||||
|  |       (setup_server! :texlab) | ||||||
|  |       (setup_server! :sumneko_lua | ||||||
|  |                      :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)))) | ||||||
|  |  | ||||||
|  | { : configure : on_attach : get_data_dir } | ||||||
		Reference in New Issue
	
	Block a user