diff --git a/README.md b/README.md index 925fc87..3540b83 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A collection of language packs for Vim. > One to rule them all, one to find them, one to bring them all and in the darkness bind them. - It **won't affect your startup time**, as scripts are loaded only on demand\*. -- It **installs and updates 120+ times faster** than the 143 packages it consists of. +- It **installs and updates 120+ times faster** than the 144 packages it consists of. - Solid syntax and indentation support (other features skipped). Only the best language packs. - All unnecessary files are ignored (like enormous documentation from php support). - No support for esoteric languages, only most popular ones (modern too, like `slim`). @@ -162,6 +162,7 @@ If you need full functionality of any plugin, please use it directly with your p - [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin) - [styled-components](https://github.com/styled-components/vim-styled-components#main) (syntax, indent, ftplugin) - [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin) +- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent) - [svg-indent](https://github.com/jasonshell/vim-svg-indent) (indent) - [svg](https://github.com/vim-scripts/svg.vim) (syntax) - [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin) diff --git a/autoload/go/config.vim b/autoload/go/config.vim index e3f7ba4..4eff6f6 100644 --- a/autoload/go/config.vim +++ b/autoload/go/config.vim @@ -182,6 +182,9 @@ function! go#config#DocUrl() abort return godoc_url endfunction +function! go#config#DocPopupWindow() abort + return get(g:, 'go_doc_popup_window', 0) +endfunction function! go#config#DefReuseBuffer() abort return get(g:, 'go_def_reuse_buffer', 0) endfunction diff --git a/autoload/jsx_pretty/comment.vim b/autoload/jsx_pretty/comment.vim index d5d58f5..639e55b 100644 --- a/autoload/jsx_pretty/comment.vim +++ b/autoload/jsx_pretty/comment.vim @@ -7,7 +7,7 @@ function! jsx_pretty#comment#update_commentstring(original) let syn_start = s:syn_name(line('.'), 1) let save_cursor = getcurpos() - if syn_start =~ '^jsx' + if syn_start =~? '^jsx' let line = getline(".") let start = len(matchstr(line, '^\s*')) let syn_name = s:syn_name(line('.'), start + 1) @@ -16,7 +16,7 @@ function! jsx_pretty#comment#update_commentstring(original) let &l:commentstring = '// %s' elseif s:syn_contains(line('.'), col('.'), 'jsxTaggedRegion') let &l:commentstring = '' - elseif syn_name =~ '^jsxAttrib' + elseif syn_name =~? '^jsxAttrib' let &l:commentstring = '// %s' else let &l:commentstring = '{/* %s */}' diff --git a/autoload/jsx_pretty/indent.vim b/autoload/jsx_pretty/indent.vim index a4e7a83..9dd0e5b 100644 --- a/autoload/jsx_pretty/indent.vim +++ b/autoload/jsx_pretty/indent.vim @@ -37,7 +37,7 @@ function! s:prev_line(lnum) endfunction function! s:syn_attr_jsx(synattr) - return a:synattr =~ "^jsx" + return a:synattr =~? "^jsx" endfunction function! s:syn_xmlish(syns) @@ -45,21 +45,21 @@ function! s:syn_xmlish(syns) endfunction function! s:syn_jsx_element(syns) - return get(a:syns, -1) =~ 'jsxElement' + return get(a:syns, -1) =~? 'jsxElement' endfunction function! s:syn_js_comment(syns) - return get(a:syns, -1) =~ 'Comment$' + return get(a:syns, -1) =~? 'Comment$' endfunction function! s:syn_jsx_escapejs(syns) - return get(a:syns, -1) =~ '\(\(js\(Template\)\?\|javaScript\(Embed\)\?\|typescript\)Braces\|javascriptTemplateSB\|typescriptInterpolationDelimiter\)' && - \ (get(a:syns, -2) =~ 'jsxEscapeJs' || - \ get(a:syns, -3) =~ 'jsxEscapeJs') + return get(a:syns, -1) =~? '\(\(js\(Template\)\?\|javaScript\(Embed\)\?\|typescript\)Braces\|javascriptTemplateSB\|typescriptInterpolationDelimiter\)' && + \ (get(a:syns, -2) =~? 'jsxEscapeJs' || + \ get(a:syns, -3) =~? 'jsxEscapeJs') endfunction function! s:syn_jsx_attrib(syns) - return len(filter(copy(a:syns), 'v:val =~ "jsxAttrib"')) + return len(filter(copy(a:syns), 'v:val =~? "jsxAttrib"')) endfunction let s:start_tag = '<\s*\([-:_\.\$0-9A-Za-z]\+\|>\)' diff --git a/build b/build index a2a720e..761dc12 100755 --- a/build +++ b/build @@ -272,6 +272,7 @@ PACKS=" solidity:tomlion/vim-solidity styled-components:styled-components/vim-styled-components#main stylus:wavded/vim-stylus + svelte:evanleck/vim-svelte svg-indent:jasonshell/vim-svg-indent svg:vim-scripts/svg.vim swift:keith/swift.vim diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 7300fc1..6854f34 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -1313,6 +1313,13 @@ autocmd BufNewFile,BufReadPost *.stylus set filetype=stylus augroup end endif +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'svelte') == -1 + augroup filetypedetect + " svelte, from svelte.vim in evanleck/vim-svelte +au BufRead,BufNewFile *.svelte setfiletype svelte + augroup end +endif + if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'sxhkd') == -1 augroup filetypedetect " sxhkd, from sxhkdrc.vim in baskerville/vim-sxhkdrc diff --git a/ftplugin/rst.vim b/ftplugin/rst.vim index 3c1e903..064bd88 100644 --- a/ftplugin/rst.vim +++ b/ftplugin/rst.vim @@ -38,7 +38,7 @@ if exists("g:rst_style") && g:rst_style != 0 setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8 endif -if has('patch-7.3.867') " Introduced the TextChanged event. +if g:rst_fold_enabled != 0 && has('patch-7.3.867') " Introduced the TextChanged event. setlocal foldmethod=expr setlocal foldexpr=RstFold#GetRstFold() setlocal foldtext=RstFold#GetRstFoldText() diff --git a/indent/svelte.vim b/indent/svelte.vim new file mode 100644 index 0000000..0b3c732 --- /dev/null +++ b/indent/svelte.vim @@ -0,0 +1,128 @@ +if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'svelte') != -1 + finish +endif + +" Vim indent file +" Language: Svelte 3 (HTML/JavaScript) +" Author: Evan Lecklider +" Maintainer: Evan Lecklide +" URL: https://github.com/evanleck/vim-svelte + +if exists("b:did_indent") + finish +endif + +runtime! indent/html.vim +unlet! b:did_indent + +let s:html_indent = &l:indentexpr +let b:did_indent = 1 + +setlocal indentexpr=GetSvelteIndent() +setlocal indentkeys=o,O,*,<>>,{,},0),0],!^F,;,=:else,=:then,=:catch,=/if,=/each,=/await + +" Only define the function once. +if exists('*GetSvelteIndent') + finish +endif + +function! GetSvelteIndent() + let current_line_number = v:lnum + + if current_line_number == 0 + return 0 + endif + + let current_line = getline(current_line_number) + + " Opening script and style tags should be all the way outdented. + if current_line =~ '^\s*', '', '', 'bW') && previous_line =~ ';$' && current_line !~ '}' + return previous_line_indent + endif + + " "#if" or "#each" + if previous_line =~ '^\s*{\s*#\(if\|each\|await\)' + return previous_line_indent + shiftwidth() + endif + + " ":else" or ":then" + if previous_line =~ '^\s*{\s*:\(else\|catch\|then\)' + return previous_line_indent + shiftwidth() + endif + + " Custom element juggling for abnormal self-closing tags (), + " capitalized component tags (), and custom svelte tags + " (). + if synID(previous_line_number, match(previous_line, '\S') + 1, 0) == hlID('htmlTag') + \ && synID(current_line_number, match(current_line, '\S') + 1, 0) != hlID('htmlEndTag') + let indents_match = indent == previous_line_indent + let previous_closes = previous_line =~ '/>$' + + if indents_match && !previous_closes && previous_line =~ '<\(\u\|\l\+:\l\+\)' + return previous_line_indent + shiftwidth() + elseif !indents_match && previous_closes + return previous_line_indent + endif + endif + + " "/await" or ":catch" or ":then" + if current_line =~ '^\s*{\s*\/await' || current_line =~ '^\s*{\s*:\(catch\|then\)' + let await_start = searchpair('{\s*#await\>', '', '{\s*\/await\>', 'bW') + + if await_start + return indent(await_start) + endif + endif + + " "/each" + if current_line =~ '^\s*{\s*\/each' + let each_start = searchpair('{\s*#each\>', '', '{\s*\/each\>', 'bW') + + if each_start + return indent(each_start) + endif + endif + + " "/if" + if current_line =~ '^\s*{\s*\/if' + let if_start = searchpair('{\s*#if\>', '', '{\s*\/if\>', 'bW') + + if if_start + return indent(if_start) + endif + endif + + " ":else" is tricky because it can match an opening "#each" _or_ an opening + " "#if", so we try to be smart and look for the closest of the two. + if current_line =~ '^\s*{\s*:else' + let if_start = searchpair('{\s*#if\>', '', '{\s*\/if\>', 'bW') + + " If it's an "else if" then we know to look for an "#if" + if current_line =~ '^\s*{\s*:else if' && if_start + return indent(if_start) + else + " The greater line number will be closer to the cursor position because + " we're searching backward. + return indent(max([if_start, searchpair('{\s*#each\>', '', '{\s*\/each\>', 'bW')])) + endif + endif + + return indent +endfunction diff --git a/syntax/svelte.vim b/syntax/svelte.vim new file mode 100644 index 0000000..e119d60 --- /dev/null +++ b/syntax/svelte.vim @@ -0,0 +1,61 @@ +if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'svelte') != -1 + finish +endif + +" Vim syntax file +" Language: Svelte 3 (HTML/JavaScript) +" Author: Evan Lecklider +" Maintainer: Evan Lecklide +" Depends: pangloss/vim-javascript +" URL: https://github.com/evanleck/vim-svelte +" +" Like vim-jsx, this depends on the pangloss/vim-javascript syntax package (and +" is tested against it exclusively). If you're using vim-polyglot (like I am), +" then you're all set. + +if exists("b:current_syntax") + finish +endif + +" Read HTML to begin with. +runtime! syntax/html.vim +unlet! b:current_syntax + +" Expand HTML tag names to include mixed case, periods, and colons. +syntax match htmlTagName contained "\<[a-zA-Z:\.]*\>" + +" Special attributes that include some kind of binding e.g. "on:click", +" "bind:something", etc. +syntax match svelteKeyword "\<[a-z]\+:[a-zA-Z|]\+=" contained containedin=htmlTag + +" The "slot" attribute has special meaning. +syntax keyword svelteKeyword slot contained containedin=htmlTag + +" According to vim-jsx, you can let jsBlock take care of ending the region. +" https://github.com/mxw/vim-jsx/blob/master/after/syntax/jsx.vim +" +" ALLBUT,htmlSpecialTagName keeps Vim from marking CSS regions as jsBlock. +syntax region svelteExpression start="{" end="" contains=jsBlock,javascriptBlock containedin=htmlString,htmlTag,htmlArg,htmlValue,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,htmlHead,htmlTitle,htmlBoldItalicUnderline,htmlUnderlineBold,htmlUnderlineItalicBold,htmlUnderlineBoldItalic,htmlItalicUnderline,htmlItalicBold,htmlItalicBoldUnderline,htmlItalicUnderlineBold,htmlLink,htmlLeadingSpace,htmlBold,htmlBoldUnderline,htmlBoldItalic,htmlBoldUnderlineItalic,htmlUnderline,htmlUnderlineItalic,htmlItalic,htmlStrike,javaScript + +" Block conditionals. +syntax match svelteConditional "#if" contained containedin=jsBlock,javascriptBlock +syntax match svelteConditional "/if" contained containedin=jsBlock,javascriptBlock +syntax match svelteConditional ":else if" contained containedin=jsBlock,javascriptBlock +syntax match svelteConditional ":else" contained containedin=jsBlock,javascriptBlock + +" Block keywords. +syntax match svelteKeyword "#await" contained containedin=jsBlock,javascriptBlock +syntax match svelteKeyword "/await" contained containedin=jsBlock,javascriptBlock +syntax match svelteKeyword ":catch" contained containedin=jsBlock,javascriptBlock +syntax match svelteKeyword ":then" contained containedin=jsBlock,javascriptBlock +syntax match svelteKeyword "@html" contained containedin=jsBlock,javascriptBlock + +" Repeat functions. +syntax match svelteRepeat "#each" contained containedin=jsBlock,javascriptBlock +syntax match svelteRepeat "/each" contained containedin=jsBlock,javascriptBlock + +highlight def link svelteConditional Conditional +highlight def link svelteKeyword Keyword +highlight def link svelteRepeat Repeat + +let b:current_syntax = "svelte" diff --git a/syntax/zig.vim b/syntax/zig.vim index 05e29d5..a4a28af 100644 --- a/syntax/zig.vim +++ b/syntax/zig.vim @@ -44,7 +44,7 @@ syn match zigBuiltinFn "\v\@(noInlineCall|bitOffsetOf|byteOffsetOf|OpaqueType|pa syn match zigBuiltinFn "\v\@(ptrToInt|rem|returnAddress|setCold)>" syn match zigBuiltinFn "\v\@(setRuntimeSafety|setEvalBranchQuota|setFloatMode)>" syn match zigBuiltinFn "\v\@(setGlobalLinkage|setGlobalSection|shlExact|This|hasDecl)>" -syn match zigBuiltinFn "\v\@(shlWithOverflow|shrExact|sizeOf|sqrt|bswap|subWithOverflow|intCast|floatCast|intToFloat|floatToInt|boolToInt|errSetCast)>" +syn match zigBuiltinFn "\v\@(shlWithOverflow|shrExact|sizeOf|sqrt|byteSwap|subWithOverflow|intCast|floatCast|intToFloat|floatToInt|boolToInt|errSetCast)>" syn match zigBuiltinFn "\v\@(truncate|typeId|typeInfo|typeName|typeOf|atomicRmw|bytesToSlice|sliceToBytes)>" syn match zigBuiltinFn "\v\@(intToError|errorToInt|intToEnum|enumToInt|setAlignStack|handle|bitreverse|Vector)>"