From 0bd0a38a29bd6edf5ed944bde868ab498d922b3e Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 20 Oct 2015 10:12:03 +0900 Subject: [PATCH] fix merge configuration --- autoload/emmet.vim | 67 ++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/autoload/emmet.vim b/autoload/emmet.vim index f472450..472ad29 100644 --- a/autoload/emmet.vim +++ b/autoload/emmet.vim @@ -126,37 +126,52 @@ endfunction function! emmet#mergeConfig(lhs, rhs) abort let [lhs, rhs] = [a:lhs, a:rhs] - if type(lhs) ==# 3 && type(rhs) ==# 3 - let lhs += rhs - if len(lhs) - call remove(lhs, 0, len(lhs)-1) + if type(lhs) ==# 3 + if type(rhs) ==# 3 + let lhs += rhs + if len(lhs) + call remove(lhs, 0, len(lhs)-1) + endif + for rhi in rhs + call add(lhs, rhs[rhi]) + endfor + elseif type(rhs) ==# 4 + let lhs += map(keys(rhs), '{v:val : rhs[v:val]}') endif - for rhi in rhs - call add(lhs, rhs[rhi]) - endfor - elseif type(lhs) ==# 4 && type(rhs) ==# 4 - for key in keys(rhs) - if type(rhs[key]) ==# 3 - if !has_key(lhs, key) - let lhs[key] = [] + elseif type(lhs) ==# 4 + if type(rhs) ==# 3 + for V in rhs + if type(V) != 4 + continue endif - if type(lhs[key]) == 3 - let lhs[key] += rhs[key] - elseif type(lhs[key]) == 4 - for k in keys(rhs[key]) - let lhs[key][k] = rhs[key][k] - endfor - endif - elseif type(rhs[key]) ==# 4 - if has_key(lhs, key) - call emmet#mergeConfig(lhs[key], rhs[key]) + for VV in keys(V) + let lhs[VV] = V[VV] + endfor + endfor + elseif type(rhs) ==# 4 + for key in keys(rhs) + if type(rhs[key]) ==# 3 + if !has_key(lhs, key) + let lhs[key] = [] + endif + if type(lhs[key]) == 3 + let lhs[key] += rhs[key] + elseif type(lhs[key]) == 4 + for k in keys(rhs[key]) + let lhs[key][k] = rhs[key][k] + endfor + endif + elseif type(rhs[key]) ==# 4 + if has_key(lhs, key) + call emmet#mergeConfig(lhs[key], rhs[key]) + else + let lhs[key] = rhs[key] + endif else let lhs[key] = rhs[key] endif - else - let lhs[key] = rhs[key] - endif - endfor + endfor + endif endif endfunction