mirror of
https://github.com/mattn/emmet-vim.git
synced 2025-12-06 18:54:27 +08:00
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
|
||||
|
||||
62
unittest.vim
62
unittest.vim
@@ -1060,5 +1060,67 @@ finish
|
||||
},
|
||||
],
|
||||
'dummy': "}}}"},
|
||||
{ 'test-jade': "{{{",
|
||||
'type': 'jade',
|
||||
'categories': [
|
||||
{
|
||||
'name': 'expand abbreviation',
|
||||
'tests': [
|
||||
{
|
||||
'query': "!!!$$$$\\<c-y>,$$$$",
|
||||
'result': "doctype html\n\n",
|
||||
},
|
||||
{
|
||||
'query': "span.my-span$$$$\\<c-y>,$$$$",
|
||||
'result': "span.my-span",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
'dummy': "}}}"},
|
||||
{ 'test-pug': "{{{",
|
||||
'type': 'pug',
|
||||
'categories': [
|
||||
{
|
||||
'name': 'expand abbreviation',
|
||||
'tests': [
|
||||
{
|
||||
'query': "!!!$$$$\\<c-y>,$$$$",
|
||||
'result': "doctype html\n\n",
|
||||
},
|
||||
{
|
||||
'query': "span.my-span$$$$\\<c-y>,$$$$",
|
||||
'result': "span.my-span",
|
||||
},
|
||||
{
|
||||
'query': "input$$$$\\<c-y>,text$$$$",
|
||||
'result': "input(type=\"text\")",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
'dummy': "}}}"},
|
||||
{ 'test-jsx': "{{{",
|
||||
'type': 'javascript.jsx',
|
||||
'categories': [
|
||||
{
|
||||
'name': 'expand abbreviation',
|
||||
'tests': [
|
||||
{
|
||||
'query': "img$$$$\\<c-y>,$$$$",
|
||||
'result': "<img src=\"\" alt=\"\" />",
|
||||
},
|
||||
{
|
||||
'query': "span.my-span$$$$\\<c-y>,$$$$",
|
||||
'result': "<span className=\"my-span\"></span>",
|
||||
},
|
||||
{
|
||||
'query': "function() { return span.my-span$$$$\\<c-y>,$$$$; }",
|
||||
'result': "function() { return <span className=\"my-span\"></span>; }",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
'dummy': "}}}"},
|
||||
]
|
||||
" vim:set et fdm=marker:
|
||||
|
||||
Reference in New Issue
Block a user