Add untracked fnl/plugin file
This commit is contained in:
		
							
								
								
									
										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