From a68b31af77f247d8360dd67c23296c9bc45961d7 Mon Sep 17 00:00:00 2001
From: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Date: Sat, 15 Feb 2020 23:09:49 +0900
Subject: Load project related local .vim-lsp-settings/config.json

---
 autoload/lsp_settings.vim       | 13 +++++++++++++
 autoload/lsp_settings/utils.vim |  8 ++++----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/autoload/lsp_settings.vim b/autoload/lsp_settings.vim
index 7fee88f..df2a60f 100644
--- a/autoload/lsp_settings.vim
+++ b/autoload/lsp_settings.vim
@@ -358,6 +358,19 @@ function! s:vim_lsp_load_or_suggest(ft) abort
     return
   endif
 
+  try
+    let l:root = lsp#utils#find_nearest_parent_directory('.', '.vim-lsp-settings')
+    if !empty(l:root) && filereadable(l:root . '/config.json')
+      let l:config = json_decode(join(readfile(l:root . '/config.json'), "\n"))
+      if  has_key(g:, 'lsp_settings')
+        call lsp_settings#utils#merge(g:lsp_settings, l:config)
+      else
+        let g:lsp_settings = l:config
+      endif
+    endif
+  catch
+  endtry
+
   if get(g:, 'lsp_loaded', 0)
     for l:server in s:settings[a:ft]
       let l:config = lsp_settings#server_config(l:server.command)
diff --git a/autoload/lsp_settings/utils.vim b/autoload/lsp_settings/utils.vim
index a39851f..3a48d7c 100644
--- a/autoload/lsp_settings/utils.vim
+++ b/autoload/lsp_settings/utils.vim
@@ -31,7 +31,7 @@ function! lsp_settings#utils#first_one(lines) abort
   return l:path
 endfunction
 
-function! s:merge(lhs, rhs) abort
+function! lsp_settings#utils#merge(lhs, rhs) abort
   let [l:lhs, l:rhs] = [a:lhs, a:rhs]
   if type(l:lhs) ==# 3
     if type(l:rhs) ==# 3
@@ -70,7 +70,7 @@ function! s:merge(lhs, rhs) abort
           endif
         elseif type(l:rhs[l:key]) ==# 4
           if has_key(l:lhs, l:key)
-            call s:merge(l:lhs[l:key], l:rhs[l:key])
+            call lsp_settings#utils#merge(l:lhs[l:key], l:rhs[l:key])
           else
             let l:lhs[l:key] = l:rhs[l:key]
           endif
@@ -82,7 +82,7 @@ function! s:merge(lhs, rhs) abort
   endif
 endfunction
 
-function! lsp_settings#utils#merge(d) abort
+function! lsp_settings#utils#dotmerge(d) abort
   let l:ret = {}
   let l:keys = keys(a:d)
   for l:k in sort(keys(a:d))
@@ -101,7 +101,7 @@ function! lsp_settings#utils#merge(d) abort
       endif
       let l:cur = l:cur[l:kk]
     endfor
-    call s:merge(l:ret, l:new)
+    call lsp_settings#utils#merge(l:ret, l:new)
   endfor
   return l:ret
 endfunction
-- 
cgit v1.2.3-54-g00ecf