diff options
Diffstat (limited to 'uvim/runtime/ftplugin/astro.vim')
| -rw-r--r-- | uvim/runtime/ftplugin/astro.vim | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/uvim/runtime/ftplugin/astro.vim b/uvim/runtime/ftplugin/astro.vim deleted file mode 100644 index 856b96f23b..0000000000 --- a/uvim/runtime/ftplugin/astro.vim +++ /dev/null @@ -1,192 +0,0 @@ -" Vim filetype plugin file -" Language: Astro -" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> -" Last Change: 2024 Apr 21 -" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') -" 2025 Aug 29 by Vim project, add try/catch around json_decode(), #18141 - -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 - -let s:cpo_save = &cpo -set cpo-=C - -function! s:IdentifyScope(start, end) abort - let pos_start = searchpairpos(a:start, '', a:end, 'bnW') - let pos_end = searchpairpos(a:start, '', a:end, 'nW') - - return pos_start != [0, 0] - \ && pos_end != [0, 0] - \ && pos_start[0] != getpos('.')[1] -endfunction - -function! s:AstroComments() abort - if s:IdentifyScope('^---\n\s*\S', '^---\n\n') - \ || s:IdentifyScope('^\s*<script', '^\s*<\/script>') - " ECMAScript comments - setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// - setlocal commentstring=//\ %s - - elseif s:IdentifyScope('^\s*<style', '^\s*<\/style>') - " CSS comments - setlocal comments=s1:/*,mb:*,ex:*/ - setlocal commentstring=/*\ %s\ */ - - else - " HTML comments - setlocal comments=s:<!--,m:\ \ \ \ ,e:--> - setlocal commentstring=<!--\ %s\ --> - endif -endfunction - -" https://code.visualstudio.com/docs/languages/jsconfig -function! s:CollectPathsFromConfig() abort - let config_json = findfile('tsconfig.json', '.;') - - if empty(config_json) - let config_json = findfile('jsconfig.json', '.;') - - if empty(config_json) - return - endif - endif - - try - let paths_from_config = config_json - \ ->readfile() - \ ->filter({ _, val -> val =~ '^\s*[\[\]{}"0-9]' }) - \ ->join() - \ ->json_decode() - \ ->get('compilerOptions', {}) - \ ->get('paths', {}) - catch /^Vim\%((\a\+)\)\=:E491:/ " invalid json - let paths_from_config = {} - endtry - - if !empty(paths_from_config) - let b:astro_paths = paths_from_config - \ ->map({key, val -> [ - \ key->glob2regpat(), - \ val[0]->substitute('\/\*$', '', '') - \ ]}) - \ ->values() - endif - - let b:undo_ftplugin ..= " | unlet! b:astro_paths" -endfunction - -function! s:AstroInclude(filename) abort - let decorated_filename = a:filename - \ ->substitute("^", "@", "") - - let found_path = b: - \ ->get("astro_paths", []) - \ ->indexof({ key, val -> decorated_filename =~ val[0]}) - - if found_path != -1 - let alias = b:astro_paths[found_path][0] - let path = b:astro_paths[found_path][1] - \ ->substitute('\(\/\)*$', '/', '') - - return decorated_filename - \ ->substitute(alias, path, '') - endif - - return a:filename -endfunction - -let b:undo_ftplugin = "setlocal" - \ .. " formatoptions<" - \ .. " path<" - \ .. " suffixesadd<" - \ .. " matchpairs<" - \ .. " comments<" - \ .. " commentstring<" - \ .. " iskeyword<" - \ .. " define<" - \ .. " include<" - \ .. " includeexpr<" - -" Create self-resetting autocommand group -augroup Astro - autocmd! * <buffer> -augroup END - -" Set 'formatoptions' to break comment lines but not other lines, -" and insert the comment leader when hitting <CR> or using "o". -setlocal formatoptions-=t -setlocal formatoptions+=croql - -" Remove irrelevant part of 'path'. -setlocal path-=/usr/include - -" Seed 'path' with default directories for :find, gf, etc. -setlocal path+=src/** -setlocal path+=public/** - -" Help Vim find extension-less filenames -let &l:suffixesadd = - \ ".astro" - \ .. ",.js,.jsx,.es,.es6,.cjs,.mjs,.jsm" - \ .. ",.json" - \ .. ",.scss,.sass,.css" - \ .. ",.svelte" - \ .. ",.ts,.tsx,.d.ts" - \ .. ",.vue" - -" From $VIMRUNTIME/ftplugin/html.vim -setlocal matchpairs+=<:> - -" Matchit configuration -if exists("loaded_matchit") - let b:match_ignorecase = 0 - - " From $VIMRUNTIME/ftplugin/javascript.vim - let b:match_words = - \ '\<do\>:\<while\>,' - \ .. '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,' - \ .. '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>' - - " From $VIMRUNTIME/ftplugin/html.vim - let b:match_words ..= - \ '<!--:-->,' - \ .. '<:>,' - \ .. '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' - \ .. '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' - \ .. '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' - - let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" -endif - -" Change what constitutes a word, mainly useful for CSS/SASS -setlocal iskeyword+=- -setlocal iskeyword+=$ -setlocal iskeyword+=% - -" Define paths/aliases for module resolution -call s:CollectPathsFromConfig() - -" Find ESM imports -setlocal include=^\\s*\\(import\\\|import\\s\\+[^\/]\\+from\\)\\s\\+['\"] - -" Process aliases if file can't be found -setlocal includeexpr=s:AstroInclude(v:fname) - -" Set 'define' to a comprehensive value -" From $VIMRUNTIME/ftplugin/javascript.vim and -" $VIMRUNTIME/ftplugin/sass.vim -let &l:define = - \ '\(^\s*(*async\s\+function\|(*function\)' - \ .. '\|^\s*\(\*\|static\|async\|get\|set\|\i\+\.\)' - \ .. '\|^\s*\(\ze\i\+\)\(([^)]*).*{$\|\s*[:=,]\)' - - -" Set &comments and &commentstring according to current scope -autocmd Astro CursorMoved <buffer> call s:AstroComments() - -let &cpo = s:cpo_save -unlet s:cpo_save - -" vim: textwidth=78 tabstop=8 shiftwidth=4 softtabstop=4 expandtab |
