Skip to content

Commit 00d77ae

Browse files
author
Adriaan Zonnenberg
committed
refactor: Make syntax definition more similar to indent definition
1 parent 158390b commit 00d77ae

File tree

2 files changed

+39
-42
lines changed

2 files changed

+39
-42
lines changed

syntax/vue.vim

+24-42
Original file line numberDiff line numberDiff line change
@@ -28,51 +28,33 @@ function! s:syntax_available(language)
2828
return !empty(globpath(&runtimepath, 'syntax/' . a:language . '.vim'))
2929
endfunction
3030

31-
""
32-
" Register {language} for a given {tag}. If [attr_override] is given and not
33-
" empty, it will be used for the attribute pattern.
34-
function! s:register_language(language, tag, ...)
35-
let attr_override = a:0 ? a:1 : ''
36-
let attr = !empty(attr_override) ? attr_override : s:attr('lang', a:language)
37-
38-
if s:syntax_available(a:language)
39-
execute 'syntax include @' . a:language . ' syntax/' . a:language . '.vim'
40-
unlet! b:current_syntax
41-
execute 'syntax region vue_' . a:language
42-
\ 'keepend'
43-
\ 'start=/<' . a:tag . '\>\_[^>]*' . attr . '\_[^>]*>/'
44-
\ 'end="</' . a:tag . '>"me=s-1'
45-
\ 'contains=@' . a:language . ',vueSurroundingTag'
46-
\ 'fold'
47-
endif
48-
endfunction
49-
50-
let s:language_config = [
51-
\ {'lang': 'less', 'args': ['less', 'style']},
52-
\ {'lang': 'pug', 'args': ['pug', 'template', s:attr('lang', '\%(pug\|jade\)')]},
53-
\ {'lang': 'slm', 'args': ['slm', 'template']},
54-
\ {'lang': 'handlebars', 'args': ['handlebars', 'template']},
55-
\ {'lang': 'haml', 'args': ['haml', 'template']},
56-
\ {'lang': 'typescript', 'args': ['typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)']},
57-
\ {'lang': 'coffee', 'args': ['coffee', 'script']},
58-
\ {'lang': 'stylus', 'args': ['stylus', 'style']},
59-
\ {'lang': 'sass', 'args': ['sass', 'style']},
60-
\ {'lang': 'scss', 'args': ['scss', 'style']},
31+
let s:languages = [
32+
\ {'name': 'less', 'tag': 'style'},
33+
\ {'name': 'pug', 'tag': 'template', 'attr_pattern': s:attr('lang', '\%(pug\|jade\)')},
34+
\ {'name': 'slm', 'tag': 'template'},
35+
\ {'name': 'handlebars', 'tag': 'template'},
36+
\ {'name': 'haml', 'tag': 'template'},
37+
\ {'name': 'typescript', 'tag': 'script', 'attr_pattern': '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)'},
38+
\ {'name': 'coffee', 'tag': 'script'},
39+
\ {'name': 'stylus', 'tag': 'style'},
40+
\ {'name': 'sass', 'tag': 'style'},
41+
\ {'name': 'scss', 'tag': 'style'},
6142
\ ]
62-
let s:language_dict = {}
63-
for item in s:language_config
64-
let s:language_dict[item.lang] = item.args
65-
endfor
6643

67-
if exists("g:vue_pre_processors")
68-
let pre_processors = g:vue_pre_processors
69-
else
70-
let pre_processors = map(copy(s:language_config), {k, v -> v.lang})
71-
endif
44+
for s:language in s:languages
45+
if !exists("g:vue_pre_processors") || index(g:vue_pre_processors, s:language.name) != -1
46+
let s:attr_pattern = has_key(s:language, 'attr_pattern') ? s:language.attr_pattern : s:attr('lang', s:language.name)
7247

73-
for language in pre_processors
74-
if has_key(s:language_dict, language)
75-
call call("s:register_language", get(s:language_dict, language))
48+
if s:syntax_available(s:language.name)
49+
execute 'syntax include @' . s:language.name . ' syntax/' . s:language.name . '.vim'
50+
unlet! b:current_syntax
51+
execute 'syntax region vue_' . s:language.name
52+
\ 'keepend'
53+
\ 'start=/<' . s:language.tag . '\>\_[^>]*' . s:attr_pattern . '\_[^>]*>/'
54+
\ 'end="</' . s:language.tag . '>"me=s-1'
55+
\ 'contains=@' . s:language.name . ',vueSurroundingTag'
56+
\ 'fold'
57+
endif
7658
endif
7759
endfor
7860

test/test_pre_processor_option.vader

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Execute (enable only scss preprocessor):
2+
let g:vue_pre_processors = ['typescript']
3+
4+
Given vue:
5+
<template lang="pug">
6+
.some-class
7+
</template>
8+
<script lang="typescript">
9+
@Component({})
10+
</script>
11+
12+
Execute (only scss is highlighted):
13+
Assert SyntaxOf('.some-class') !~# '^pug', "pug shouldn't be highlighted"
14+
Assert SyntaxOf('@Component({})') =~# '^typescript', "typescript should be highlighted"
15+
unlet g:vue_pre_processors

0 commit comments

Comments
 (0)