Improve django filetype detection, closes #560

This commit is contained in:
Adam Stankiewicz
2020-09-24 22:52:50 +02:00
parent 444e7f184d
commit a6a6aeab76
5 changed files with 45 additions and 41 deletions

View File

@@ -4,13 +4,6 @@
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim 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() func! polyglot#Shebang()
if getline(1) =~# "^#!" if getline(1) =~# "^#!"
let ft = polyglot#ShebangFiletype() let ft = polyglot#ShebangFiletype()
@@ -392,7 +385,8 @@ func! polyglot#DetectHtmlFiletype()
set ft=xhtml | return set ft=xhtml | return
endif endif
endfor endfor
set ft=html | return set ft=html | au! BufWritePost <buffer> ++once call polyglot#DetectHtmlFiletype()
return
endfunc endfunc
@@ -411,6 +405,14 @@ if exists('g:polyglot_test')
autocmd! autocmd!
endif 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:disabled_packages = {}
let s:new_polyglot_disabled = [] let s:new_polyglot_disabled = []
@@ -497,7 +499,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#Shebang() | endif \ call polyglot#Shebang() | endif
au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#ObserveShebang() | endif \ call polyglot#Observe('Shebang') | endif
augroup END augroup END

View File

@@ -9,6 +9,14 @@ if exists('g:polyglot_test')
autocmd! autocmd!
endif 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:disabled_packages = {}
let s:new_polyglot_disabled = [] let s:new_polyglot_disabled = []
@@ -2021,7 +2029,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#Shebang() | endif \ call polyglot#Shebang() | endif
au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#ObserveShebang() | endif \ call polyglot#Observe('Shebang') | endif
augroup END augroup END

View File

@@ -69,7 +69,6 @@ rules:
filetype: glsl filetype: glsl
- override: true - override: true
- filetype: forth - filetype: forth
fallback: true
--- ---
extensions: [re] extensions: [re]
rules: rules:

View File

@@ -4,13 +4,6 @@
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim 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() func! polyglot#Shebang()
if getline(1) =~# "^#!" if getline(1) =~# "^#!"
let ft = polyglot#ShebangFiletype() let ft = polyglot#ShebangFiletype()
@@ -84,6 +77,14 @@ if exists('g:polyglot_test')
autocmd! autocmd!
endif 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:disabled_packages = {}
let s:new_polyglot_disabled = [] let s:new_polyglot_disabled = []
@@ -170,7 +171,7 @@ au! BufNewFile,BufRead,StdinReadPost * if expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#Shebang() | endif \ call polyglot#Shebang() | endif
au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat | au BufEnter * if &ft == "" && expand("<afile>") !~ g:ft_ignore_pat |
\ call polyglot#ObserveShebang() | endif \ call polyglot#Observe('Shebang') | endif
augroup END augroup END

View File

@@ -126,10 +126,6 @@ def transform_patterns(heuristics)
patterns_mapping = Hash[patterns.zip(patterns_to_vim_patterns(patterns))] patterns_mapping = Hash[patterns.zip(patterns_to_vim_patterns(patterns))]
each_hash(heuristics) do |h| each_hash(heuristics) do |h|
if h.has_key?("pattern") 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"]) h["pattern"] = patterns_mapping.fetch(h["pattern"])
end end
end end
@@ -326,8 +322,18 @@ def rule_to_code(rule)
EOS EOS
end end
if (rule.keys - ["filetype", "override", "set", "extensions", "fallback"]).size > 0 if rule.has_key?("filetype")
raise "Unknown rule: #{JSON.generate(rule)}" 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 end
if rule.has_key?("override") if rule.has_key?("override")
@@ -339,20 +345,8 @@ def rule_to_code(rule)
EOS EOS
end end
if rule.has_key?("filetype") if (rule.keys - ["extensions"]).size > 0
return "set ft=#{rule["filetype"]} | return" raise "Unknown rule: #{JSON.generate(rule)}"
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 ""
end end
return "" return ""