diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-24 22:52:50 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-24 22:52:50 +0200 |
commit | a6a6aeab76bef135d9f76534efa5ee7391c4ed2a (patch) | |
tree | 5185bc4f10e43058b3565c3eeef827327b26eab4 | |
parent | 444e7f184df91f1605f06242ad68defb33c2f454 (diff) | |
download | vim-polyglot-a6a6aeab76bef135d9f76534efa5ee7391c4ed2a.tar.gz vim-polyglot-a6a6aeab76bef135d9f76534efa5ee7391c4ed2a.zip |
Improve django filetype detection, closes #560v4.12.0
-rw-r--r-- | autoload/polyglot.vim | 20 | ||||
-rw-r--r-- | ftdetect/polyglot.vim | 10 | ||||
-rw-r--r-- | heuristics.yaml | 1 | ||||
-rw-r--r-- | polyglot.vim | 17 | ||||
-rwxr-xr-x | scripts/build | 38 |
5 files changed, 45 insertions, 41 deletions
diff --git a/autoload/polyglot.vim b/autoload/polyglot.vim index d0e95b75..b995d228 100644 --- a/autoload/polyglot.vim +++ b/autoload/polyglot.vim @@ -4,13 +4,6 @@ let s:cpo_save = &cpo set cpo&vim -func! polyglot#ObserveShebang() - augroup polyglot-observer - au! CursorHold,CursorHoldI,BufWritePost <buffer> - \ if polyglot#Shebang() | au! polyglot-observer CursorHold,CursorHoldI,BufWritePost | endif - augroup END -endfunc - func! polyglot#Shebang() if getline(1) =~# "^#!" let ft = polyglot#ShebangFiletype() @@ -392,7 +385,8 @@ func! polyglot#DetectHtmlFiletype() set ft=xhtml | return endif endfor - set ft=html | return + set ft=html | au! BufWritePost <buffer> ++once call polyglot#DetectHtmlFiletype() + return endfunc @@ -411,6 +405,14 @@ if exists('g:polyglot_test') autocmd! endif +func! polyglot#Observe(fn) + let b:polyglot_observe = a:fn + augroup polyglot-observer + au! CursorHold,CursorHoldI,BufWritePost <buffer> + \ execute('if polyglot#' . b:polyglot_observe . '() | au! polyglot-observer | endif') + augroup END +endfunc + let s:disabled_packages = {} let s:new_polyglot_disabled = [] @@ -497,7 +499,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat | \ call polyglot#Shebang() | endif au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | - \ call polyglot#ObserveShebang() | endif + \ call polyglot#Observe('Shebang') | endif augroup END diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 343d4528..f1a48357 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -9,6 +9,14 @@ if exists('g:polyglot_test') autocmd! endif +func! polyglot#Observe(fn) + let b:polyglot_observe = a:fn + augroup polyglot-observer + au! CursorHold,CursorHoldI,BufWritePost <buffer> + \ execute('if polyglot#' . b:polyglot_observe . '() | au! polyglot-observer | endif') + augroup END +endfunc + let s:disabled_packages = {} let s:new_polyglot_disabled = [] @@ -2021,7 +2029,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat | \ call polyglot#Shebang() | endif au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | - \ call polyglot#ObserveShebang() | endif + \ call polyglot#Observe('Shebang') | endif augroup END diff --git a/heuristics.yaml b/heuristics.yaml index ee1b21af..c53a704c 100644 --- a/heuristics.yaml +++ b/heuristics.yaml @@ -69,7 +69,6 @@ rules: filetype: glsl - override: true - filetype: forth - fallback: true --- extensions: [re] rules: diff --git a/polyglot.vim b/polyglot.vim index 9199a207..3ac6ef38 100644 --- a/polyglot.vim +++ b/polyglot.vim @@ -4,13 +4,6 @@ let s:cpo_save = &cpo set cpo&vim -func! polyglot#ObserveShebang() - augroup polyglot-observer - au! CursorHold,CursorHoldI,BufWritePost <buffer> - \ if polyglot#Shebang() | au! polyglot-observer CursorHold,CursorHoldI,BufWritePost | endif - augroup END -endfunc - func! polyglot#Shebang() if getline(1) =~# "^#!" let ft = polyglot#ShebangFiletype() @@ -84,6 +77,14 @@ if exists('g:polyglot_test') autocmd! endif +func! polyglot#Observe(fn) + let b:polyglot_observe = a:fn + augroup polyglot-observer + au! CursorHold,CursorHoldI,BufWritePost <buffer> + \ execute('if polyglot#' . b:polyglot_observe . '() | au! polyglot-observer | endif') + augroup END +endfunc + let s:disabled_packages = {} let s:new_polyglot_disabled = [] @@ -170,7 +171,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat | \ call polyglot#Shebang() | endif au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | - \ call polyglot#ObserveShebang() | endif + \ call polyglot#Observe('Shebang') | endif augroup END diff --git a/scripts/build b/scripts/build index 482ffcf6..3c89b6f1 100755 --- a/scripts/build +++ b/scripts/build @@ -126,10 +126,6 @@ def transform_patterns(heuristics) patterns_mapping = Hash[patterns.zip(patterns_to_vim_patterns(patterns))] each_hash(heuristics) do |h| if h.has_key?("pattern") - if h["pattern"].include?("#import") - puts h["pattern"] - puts patterns_mapping.fetch(h["pattern"]) - end h["pattern"] = patterns_mapping.fetch(h["pattern"]) end end @@ -326,10 +322,20 @@ def rule_to_code(rule) EOS end - if (rule.keys - ["filetype", "override", "set", "extensions", "fallback"]).size > 0 - raise "Unknown rule: #{JSON.generate(rule)}" + if rule.has_key?("filetype") + if rule.has_key?("fallback") + return <<~EOS + set ft=#{rule["filetype"]} | au! BufWritePost <buffer> ++once call polyglot#Detect#{camelize(rule["extensions"].first)}Filetype() + return + EOS + end + + return <<~EOS + set ft=#{rule["filetype"]} | return + #{indent(rule_to_code(except(rule, "filetype")), 0)} + EOS end - + if rule.has_key?("override") variable = "g:filetype_#{rule["extensions"].first}" return <<~EOS @@ -339,22 +345,10 @@ def rule_to_code(rule) EOS end - if rule.has_key?("filetype") - return "set ft=#{rule["filetype"]} | return" - end - - if rule.has_key?("filetype") - if rule.has_key?("fallback") - return "set ft=#{rule["filetype"]} | return" - else - return "setf FALLBACK #{rule["filetype"]} | return" - end - end - - if rule.has_key?("extensions") - return "" + if (rule.keys - ["extensions"]).size > 0 + raise "Unknown rule: #{JSON.generate(rule)}" end - + return "" end |