From ed9e40037f0ff17af0ebfae0d51a42bb5b72074b Mon Sep 17 00:00:00 2001 From: leafOfTree Date: Wed, 21 Oct 2026 14:03:35 +0000 Subject: [PATCH] Fix indent after an empty tag with '>' in attributes A line like was taken as an empty tag without '/>', as '>' in '=>' matched its end, so the next line was indented one level less. Skip '>' in quotes, and don't take '/>' as the end of an empty tag. --- indent/vue.vim | 5 ++++- test/cases/shared-empty-tag.vim | 7 +++++++ test/cases/shared-empty-tag.vue | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/cases/shared-empty-tag.vim create mode 100644 test/cases/shared-empty-tag.vue diff --git a/indent/vue.vim b/indent/vue.vim index f66bd3d..32a60ac 100644 --- a/indent/vue.vim +++ b/indent/vue.vim @@ -19,7 +19,10 @@ function! s:Init() " To adjust HTML let s:empty_tagname = '(area|base|br|col|embed|hr|input|img|' \.'keygen|link|meta|param|source|track|wbr)' - let s:empty_tag = '\v\<'.s:empty_tagname.'.*(/)@' + " Empty tag ending with '>' but not '/>'. '>' in quotes like + " @input="(e) => update(e)" doesn't end the tag + let s:empty_tag = '\v\<'.s:empty_tagname + \ .'>("[^"]*"|''[^'']*''|[^\>"''/]|/(\>)@!)*\>' let s:empty_tag_start = '\v\<'.s:empty_tagname.'[^>]*$' let s:empty_tag_end = '\v^\s*[^<>/]*\/?\>\s*' let s:tag_start = '\v^\s*\<\w*' " < diff --git a/test/cases/shared-empty-tag.vim b/test/cases/shared-empty-tag.vim new file mode 100644 index 0000000..b378874 --- /dev/null +++ b/test/cases/shared-empty-tag.vim @@ -0,0 +1,7 @@ +" Empty tags like with or without '/>', and '>' in attribute +" expressions +let g:test_flatten = 1 + +function! Check() + call ExpectIndentEachLine() +endfunction diff --git a/test/cases/shared-empty-tag.vue b/test/cases/shared-empty-tag.vue new file mode 100644 index 0000000..2c7108c --- /dev/null +++ b/test/cases/shared-empty-tag.vue @@ -0,0 +1,12 @@ +