-- per-filetype options harvested from the builtin vimscript ftplugins -- ( nvim 0.12, before the ftplugin kill ) then filtered to pure-data options. -- deliberately dropped: omnifunc ( LSP owns it ), includeexpr ( vimscript/autoload ), -- cinkeys/cinwords ( cindent is off, treesitter indents ). -- commentstring lives in std.commentstring. edit freely. local ftoptions = { ["c"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,:///,://]], define = [[^\s*#\s*define]], formatoptions = [[jcroql]], include = [[^\s*#\s*include]], path = [[.,/usr/include,,**]], }, ["cpp"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,:///,://]], define = [[^\s*#\s*define]], formatoptions = [[jcroql]], include = [[^\s*#\s*include]], path = [[.,/usr/include,,**]], }, ["css"] = { comments = [[s1:/*,mb:*,ex:*/]], formatoptions = [[jcroql]], include = [[^\s*@import\s\+\%(url(\)\=]], }, ["html"] = { comments = [[s:]], matchpairs = [[(:),{:},[:],<:>]], }, ["java"] = { comments = [[:///,sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-,fb:•]], define = [[\C\m^\s*\%(\%(\%(@\%(interface\)\@!\%(\K\k*\.\)*\K\k*\)\s\+\)*\%(p\%(rivate\|rotected\|ublic\)\s\+\)\=\)\@>\%(\%(\%(abstract\|final\|non-sealed\|s\%(ealed\|tatic\|trictfp\)\)\s\+\)*\%(class\|enum\|@\=interface\|record\)\s\+\ze\K\k*\>\|\%(\%(abstract\|default\|final\|native\|s\%(tatic\|trictfp\|ynchronized\)\)\s\+\)*\%(<.\{-1,}>\s\+\)\=\%(\K\k*\.\)*\K\k*\s*\%(<.\{-1,}>\%(\s\|\[\)\@=\)\=\s*\%(\[\]\s*\)*\s\+\ze\%(\<\%(assert\|case\|instanceof\|new\|return\|throw\|when\)\s\+\)\@18]], formatoptions = [[jcroql]], suffixesadd = [[.js,.jsx,.es,.es6,.cjs,.mjs,.jsm,.vue,.json]], }, ["javascriptreact"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://]], define = [[\(^\s*(*async\s\+function\|(*function\)\|^\s*\(\*\|static\|async\|get\|set\|\i\+\.\)\|^\s*\(\ze\i\+\)\(([^)]*).*{$\|\s*[:=,]\)\|^\s*\(export\s\+\|export\s\+default\s\+\)*\(var\|let\|const\|function\|class\)\|\]], formatoptions = [[jcroql]], suffixesadd = [[.js,.jsx,.es,.es6,.cjs,.mjs,.jsm,.vue,.json]], }, ["json"] = { formatoptions = [[cqj]], }, ["jsonc"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://]], formatoptions = [[cqj]], }, ["ocaml"] = { comments = [[sr:(**,mb: ,ex:*),sr:(* ,mb: ,ex:*)]], formatoptions = [[cqort]], iskeyword = [[@,48-57,_,192-255,-,',`]], }, ["roc"] = { comments = [[:##,:#]], }, ["rust"] = { comments = [[s0:/*!,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,://]], formatoptions = [[croqnlj]], include = [[\v^\s*(pub\s+)?use\s+\zs(\f|:)+]], matchpairs = [[(:),{:},[:],<:>]], suffixesadd = [[.rs]], }, ["scss"] = { comments = [[s1:/*,mb:*,ex:*/,://]], define = [[^\C\v\s*%(\@function|\@mixin|\=)|^\s*%(\$[[:alnum:]-]+:|[%.][:alnum:]-]+\s*%(\{|$))@=]], include = [[^\s*@import\s\+\%(url(\)\=["']\=]], suffixesadd = [[.sass,.scss,.css]], }, ["typescript"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://]], formatoptions = [[jcroql]], iskeyword = [[@,48-57,_,192-255,-,$,#]], suffixesadd = [[.ts,.d.ts,.tsx,.js,.jsx,.cjs,.mjs]], }, ["typescriptreact"] = { comments = [[sO:* -,mO:* ,exO:*/,s1:/*,mb:*,ex:*/,://]], formatoptions = [[jcroql]], iskeyword = [[@,48-57,_,192-255,-,$,#]], suffixesadd = [[.ts,.d.ts,.tsx,.js,.jsx,.cjs,.mjs]], }, ["zig"] = { comments = [[:///,://!,://]], define = [[\v(|||^\s*\#\s*define)]], formatoptions = [[jcroql]], include = [[\v(\@import>|\@cInclude>|^\s*\#\s*include)]], iskeyword = [[@,48-57,_,192-255,-,@-@]], suffixesadd = [[.zig,.zir,.zon]], }, } return ftoptions