summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2020-09-24 22:52:50 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2020-09-24 22:52:50 +0200
commita6a6aeab76bef135d9f76534efa5ee7391c4ed2a (patch)
tree5185bc4f10e43058b3565c3eeef827327b26eab4
parent444e7f184df91f1605f06242ad68defb33c2f454 (diff)
downloadvim-polyglot-a6a6aeab76bef135d9f76534efa5ee7391c4ed2a.tar.gz
vim-polyglot-a6a6aeab76bef135d9f76534efa5ee7391c4ed2a.zip
Improve django filetype detection, closes #560v4.12.0
-rw-r--r--autoload/polyglot.vim20
-rw-r--r--ftdetect/polyglot.vim10
-rw-r--r--heuristics.yaml1
-rw-r--r--polyglot.vim17
-rwxr-xr-xscripts/build38
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