forked from VimPlug/emmet-vim
get extends recursively, minor additional fixes for pug and jsx
This commit is contained in:
@@ -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('$')
|
||||
|
||||
@@ -28,3 +28,25 @@ function! emmet#lang#type(type) abort
|
||||
endwhile
|
||||
return 'html'
|
||||
endfunction
|
||||
|
||||
" get all extends for a type recursively
|
||||
function! emmet#lang#getExtends(type) abort
|
||||
let settings = emmet#getSettings()
|
||||
|
||||
if !has_key(settings[a:type], 'extends')
|
||||
return []
|
||||
endif
|
||||
|
||||
let extends = settings[a:type].extends
|
||||
if type(extends) ==# 1
|
||||
let tmp = split(extends, '\s*,\s*')
|
||||
unlet! extends
|
||||
let extends = tmp
|
||||
endif
|
||||
|
||||
for ext in extends
|
||||
let extends = extends + emmet#lang#getExtends(ext)
|
||||
endfor
|
||||
|
||||
return extends
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user