get extends recursively, minor additional fixes for pug and jsx

This commit is contained in:
Martin Pedersen
2019-05-09 00:45:41 +02:00
parent ae7d31f290
commit f8fc806a61
3 changed files with 104 additions and 19 deletions

View File

@@ -85,12 +85,7 @@ function! emmet#isExtends(type, extend) abort
if !has_key(s:emmet_settings[a:type], 'extends')
return 0
endif
let extends = s:emmet_settings[a:type].extends
if type(extends) ==# 1
let tmp = split(extends, '\s*,\s*')
unlet! extends
let extends = tmp
endif
let extends = emmet#lang#getExtends(a:type)
for ext in extends
if a:extend ==# ext
return 1
@@ -119,7 +114,7 @@ function! emmet#isExpandable() abort
endif
let part = matchstr(line, '\(\S.*\)$')
let type = emmet#getFileType()
let ftype = emmet#lang#exists(type) ? type : 'html'
let rtype = emmet#lang#type(type)
let part = emmet#lang#{ftype}#findTokens(part)
return len(part) > 0
endfunction
@@ -334,14 +329,14 @@ function! emmet#getResource(type, name, default) abort
let ret = a:default
if has_key(s:emmet_settings[type], 'extends')
let extends = s:emmet_settings[type].extends
if type(extends) ==# 1
let tmp = split(extends, '\s*,\s*')
unlet! extends
let extends = tmp
endif
let extends = emmet#lang#getExtends(a:type)
call reverse(extends) " reverse to overwrite the correct way
for ext in extends
if has_key(s:emmet_settings, ext) && has_key(s:emmet_settings[ext], a:name)
if !has_key(s:emmet_settings, ext)
continue
endif
if has_key(s:emmet_settings[ext], a:name)
if type(ret) ==# 3 || type(ret) ==# 4
call emmet#mergeConfig(ret, s:emmet_settings[ext][a:name])
else
@@ -386,13 +381,19 @@ function! emmet#getFileType(...) abort
let pos = emmet#util#getcurpos()
let type = synIDattr(synID(pos[1], pos[2], 1), 'name')
" ignore htmlTagName as it seems to occur too often
if type == 'htmlTagName'
let type = ''
endif
if type =~? '^css'
let type = 'css'
elseif type =~? '^html'
let type = 'html'
elseif type =~? '^jsx'
let type = 'jsx'
elseif type =~? '^js\w' || type =~? '^javascript'
elseif (type =~? '^js\w' || type =~? '^javascript') && !(&filetype =~? 'jsx')
let type = 'javascript'
elseif type =~? '^tsx'
let type = 'tsx'
@@ -403,7 +404,7 @@ function! emmet#getFileType(...) abort
else
let types = split(&filetype, '\.')
for part in types
if emmet#lang#exists(part)
if has_key(s:emmet_settings, part)
let type = part
break
endif
@@ -515,7 +516,7 @@ function! emmet#unescapeDollarExpr(expand) abort
endfunction
function! emmet#expandAbbr(mode, abbr) range abort
let type = emmet#lang#type(emmet#getFileType(1))
let type = emmet#getFileType(1)
let indent = emmet#getIndentation(type)
let expand = ''
let line = ''
@@ -652,8 +653,8 @@ function! emmet#expandAbbr(mode, abbr) range abort
let part = matchstr(line, '\([a-zA-Z0-9:_\-\@|]\+\)$')
else
let part = matchstr(line, '\(\S.*\)$')
let ftype = emmet#lang#exists(type) ? type : 'html'
let part = emmet#lang#{ftype}#findTokens(part)
let rtype = emmet#lang#type(type)
let part = emmet#lang#{rtype}#findTokens(part)
let line = line[0: strridx(line, part) + len(part) - 1]
endif
if col('.') ==# col('$')