11ef15e30SBram Moolenaar" Vim filetype plugin file
21ef15e30SBram Moolenaar" Language:     Javascript
3c81e5e79SBram Moolenaar" Maintainer:   Doug Kearns <[email protected]>
4*207f0093SBram Moolenaar" Last Change:  2020 Jun 23
5*207f0093SBram Moolenaar" Contributor:  Romain Lafourcade <[email protected]>
61ef15e30SBram Moolenaar
71ef15e30SBram Moolenaarif exists("b:did_ftplugin")
81ef15e30SBram Moolenaar    finish
91ef15e30SBram Moolenaarendif
101ef15e30SBram Moolenaarlet b:did_ftplugin = 1
111ef15e30SBram Moolenaar
12c81e5e79SBram Moolenaarlet s:cpo_save = &cpo
13c81e5e79SBram Moolenaarset cpo-=C
14c81e5e79SBram Moolenaar
15c81e5e79SBram Moolenaar" Set 'formatoptions' to break comment lines but not other lines,
16*207f0093SBram Moolenaar" and insert the comment leader when hitting <CR> or using "o".
17c81e5e79SBram Moolenaarsetlocal formatoptions-=t formatoptions+=croql
18c81e5e79SBram Moolenaar
19c81e5e79SBram Moolenaar" Set completion with CTRL-X CTRL-O to autoloaded function.
201ef15e30SBram Moolenaarif exists('&ofu')
21c81e5e79SBram Moolenaar    setlocal omnifunc=javascriptcomplete#CompleteJS
221ef15e30SBram Moolenaarendif
23c81e5e79SBram Moolenaar
24c81e5e79SBram Moolenaar" Set 'comments' to format dashed lists in comments.
25c81e5e79SBram Moolenaarsetlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
26c81e5e79SBram Moolenaar
27c81e5e79SBram Moolenaarsetlocal commentstring=//%s
28c81e5e79SBram Moolenaar
29*207f0093SBram Moolenaar" Change the :browse e filter to primarily show JavaScript-related files.
30*207f0093SBram Moolenaarif (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
31*207f0093SBram Moolenaar    let b:browsefilter =
32*207f0093SBram Moolenaar                \ "JavaScript Files (*.js)\t*.js\n"
33*207f0093SBram Moolenaar                \ .. "JSX Files (*.jsx)\t*.jsx\n"
34*207f0093SBram Moolenaar                \ .. "JavaScript Modules (*.es, *.es6, *.cjs, *.mjs, *.jsm)\t*.es;*.es6;*.cjs;*.mjs;*.jsm\n"
35*207f0093SBram Moolenaar                \ .. "Vue Templates (*.vue)\t*.vue\n"
36*207f0093SBram Moolenaar                \ .. "JSON Files (*.json)\t*.json\n"
37*207f0093SBram Moolenaar                \ .. "All Files (*.*)\t*.*\n"
38c81e5e79SBram Moolenaarendif
39c81e5e79SBram Moolenaar
40*207f0093SBram Moolenaar" The following suffixes should be implied when resolving filenames
41*207f0093SBram Moolenaarsetlocal suffixesadd+=.js,.jsx,.es,.es6,.cjs,.mjs,.jsm,.vue,.json
42*207f0093SBram Moolenaar
43*207f0093SBram Moolenaar" The following suffixes should have low priority
44*207f0093SBram Moolenaar"   .snap    jest snapshot
45*207f0093SBram Moolenaarsetlocal suffixes+=.snap
46*207f0093SBram Moolenaar
47*207f0093SBram Moolenaar" Remove irrelevant part of 'path'.
48*207f0093SBram Moolenaar" User is expected to augment it with contextually-relevant paths
49*207f0093SBram Moolenaarsetlocal path-=/usr/include
50*207f0093SBram Moolenaar
51*207f0093SBram Moolenaar" Matchit configuration
52*207f0093SBram Moolenaarif exists("loaded_matchit")
53*207f0093SBram Moolenaar    let b:match_ignorecase = 0
54*207f0093SBram Moolenaar    let b:match_words =
55*207f0093SBram Moolenaar                \ '\<do\>:\<while\>,'
56*207f0093SBram Moolenaar                \ .. '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,'
57*207f0093SBram Moolenaar                \ .. '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
58*207f0093SBram Moolenaarendif
59*207f0093SBram Moolenaar
60*207f0093SBram Moolenaar" Set 'define' to a comprehensive value
61*207f0093SBram Moolenaarlet &l:define =
62*207f0093SBram Moolenaar            \ '\(^\s*(*async\s\+function\|(*function\)'
63*207f0093SBram Moolenaar            \ .. '\|^\s*\(\*\|static\|async\|get\|set\|\i\+\.\)'
64*207f0093SBram Moolenaar            \ .. '\|^\s*\(\ze\i\+\)\(([^)]*).*{$\|\s*[:=,]\)'
65*207f0093SBram Moolenaar            \ .. '\|^\s*\(export\s\+\|export\s\+default\s\+\)*\(var\|let\|const\|function\|class\)'
66*207f0093SBram Moolenaar            \ .. '\|\<as\>'
67*207f0093SBram Moolenaar
68*207f0093SBram Moolenaarlet b:undo_ftplugin =
69*207f0093SBram Moolenaar            \ "setl fo< ofu< com< cms< sua< su< def< pa<"
70*207f0093SBram Moolenaar            \ .. "| unlet! b:browsefilter b:match_ignorecase b:match_words"
71c81e5e79SBram Moolenaar
72c81e5e79SBram Moolenaarlet &cpo = s:cpo_save
73c81e5e79SBram Moolenaarunlet s:cpo_save
74*207f0093SBram Moolenaar
75*207f0093SBram Moolenaar" vim: textwidth=78 tabstop=8 shiftwidth=4 softtabstop=4 expandtab
76