Handle syntax without syntax or indent files

A syntax in the config without a syntax file, like postcss, showed
E484 on opening a file. Skip loading it, with a warning in debug.

A syntax without an indent file used cindent, which broke indent of
languages like pug, stylus without their plugins, or toml. Keep the
indent instead. Lines outside blocks still use cindent.
This commit is contained in:
leafOfTree committed 2026-10-21 13:51:38 +00:00
1 parent 824aff651d
commit de9fbec1ad
5 files changed
+43 -2

No files matched your search

+4
View File
@@ -263,6 +263,10 @@ endfunction
" Load all syntax files in 'runtimepath'
" Useful if there is no default syntax file provided by vim
function! vue#LoadFullSyntax(group, syntax)
if empty(globpath(&runtimepath, 'syntax/'.a:syntax.'.vim'))
call vue#Warn(a:syntax.': syntax not found in runtimepath')
return
endif
call vue#Log(a:syntax.': load full')
call s:SetCurrentSyntax(a:syntax)
execute 'syntax include '.a:group.' syntax/'.a:syntax.'.vim'
+5
View File
@@ -75,6 +75,11 @@ function! s:GetBlockIndent(syntax)
let indentexpr = get(s:indent, syntax)
if !empty(indentexpr)
let ind = eval(indentexpr)
elseif has_key(s:indent, syntax)
" No indent file for syntax in config, keep indent as cindent may break
" languages like pug or toml
call vue#LogWithLnum('indentexpr not found for '.syntax.', keep indent')
let ind = -1
else
call vue#LogWithLnum('indentexpr not found for '.syntax.', use cindent')
let ind = cindent(v:lnum)
+15
View File
@@ -0,0 +1,15 @@
" postcss has no syntax or indent file, toml has no indent file. They have
" their blocks and keep indent
let g:vim_vue_plugin_config = {
\'syntax': {
\ 'template': ['html'],
\ 'style': ['css', 'postcss'],
\ 'i18n': ['toml'],
\},
\}
function! Check()
call ExpectBlock('color: blue', 'style', 'postcss', 'postcssStyleBlock')
call ExpectBlock('hello', 'i18n', 'toml', 'tomlI18nBlock')
call ExpectIndentEachLine()
endfunction
+15
View File
@@ -0,0 +1,15 @@
<template>
<div>x</div>
</template>
<style lang="postcss">
p
color: red
a
color: blue
</style>
<i18n lang="toml">
[en]
hello = "hi"
</i18n>
+4 -2
View File
@@ -92,7 +92,8 @@ function! ExpectTag(lnum, tag)
endfunction
" Call GetVueIndent() for each non-blank line from line 2 as when typing it,
" which shows errors hidden by 'indentexpr', and check the indent
" which shows errors hidden by 'indentexpr', and check the indent. -1 keeps
" the indent
function! ExpectIndentEachLine()
for lnum in range(2, line('$'))
if getline(lnum) =~ '^\s*$'
@@ -101,7 +102,8 @@ function! ExpectIndentEachLine()
call cursor(lnum, 1)
let v:lnum = lnum
try
call ExpectEqual(GetVueIndent(), indent(lnum),
let ind = GetVueIndent()
call ExpectEqual(ind == -1 ? indent(lnum) : ind, indent(lnum),
\ printf('GetVueIndent() at line %d', lnum))
catch
call Fail(printf('GetVueIndent() at line %d: %s', lnum, v:exception))