diff options
Diffstat (limited to 'ftplugin/elixir.vim')
| -rw-r--r-- | ftplugin/elixir.vim | 39 | 
1 files changed, 38 insertions, 1 deletions
diff --git a/ftplugin/elixir.vim b/ftplugin/elixir.vim index 04388efd..225e2772 100644 --- a/ftplugin/elixir.vim +++ b/ftplugin/elixir.vim @@ -5,7 +5,6 @@ if (exists("b:did_ftplugin"))  endif  let b:did_ftplugin = 1 -  " Matchit support  if exists("loaded_matchit") && !exists("b:match_words")    let b:match_ignorecase = 0 @@ -21,4 +20,42 @@ endif  setlocal comments=:#  setlocal commentstring=#\ %s +function! GetElixirFilename(word) +  let word = a:word + +  " get first thing that starts uppercase, until the first space or end of line +  let word = substitute(word,'^\s*\(\u[^ ]\+\).*$','\1','g') + +  " remove any trailing characters that don't look like a nested module +  let word = substitute(word,'\.\U.*$','','g') + +  " replace module dots with slash +  let word = substitute(word,'\.','/','g') + +  " remove any special chars +  let word = substitute(word,'[^A-z0-9-_/]','','g') + +  " convert to snake_case +  let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g') +  let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g') +  let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g') +  let word = substitute(word,'-','_','g') +  let word = tolower(word) + +  return word +endfunction + +let &l:path = +      \ join([ +      \   getcwd().'/lib', +      \   getcwd().'/src', +      \   getcwd().'/deps/**/lib', +      \   getcwd().'/deps/**/src', +      \   &g:path +      \ ], ',') +setlocal includeexpr=GetElixirFilename(v:fname) +setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl + +setlocal formatoptions-=t formatoptions+=croqlj +  endif  | 
