diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-24 18:52:58 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-24 18:52:58 +0200 |
commit | 9ff714cb6c43b920fd76ff793641c5191bf2e991 (patch) | |
tree | 510d832c908133a33ac095e17acf025d6f46a907 /scripts | |
parent | e2bbed8acc1f1cf498a0085cf771cf9bf40fb709 (diff) | |
download | vim-polyglot-9ff714cb6c43b920fd76ff793641c5191bf2e991.tar.gz vim-polyglot-9ff714cb6c43b920fd76ff793641c5191bf2e991.zip |
Extract non-generated code to polyglot.vim
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/build | 83 |
1 files changed, 17 insertions, 66 deletions
diff --git a/scripts/build b/scripts/build index 260beddb..0ed76045 100755 --- a/scripts/build +++ b/scripts/build @@ -12,6 +12,10 @@ Dir.chdir(File.dirname(__dir__)) BASE_URL = 'https://raw.githubusercontent.com/github/linguist/master' +def read_section(name) + File.read('polyglot.vim').match(/""" #{Regexp.escape(name)}.*\n(?=\n""")/m)[0] +end + def camelize(str) str.split(/[-_\.]/).map { |a| a.capitalize }.join("") end @@ -121,6 +125,10 @@ 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 @@ -554,25 +562,14 @@ def generate_ftdetect(packages, heuristics) puts "Missing filename for #{name}: #{e}" end - ftdetect = File.read('ftdetect/polyglot.vim') - File.write('ftdetect/polyglot.vim', ftdetect.gsub(/(?<=" filetypes\n).*(?=\n" end filetypes)/m, output)) + ftdetect = read_section('ftdetect/polyglot.vim') - output = <<~EOS - " Line continuation is used here, remove 'C' from 'cpoptions' - let s:cpo_save = &cpo - set cpo&vim - - func! polyglot#Shebang() - " Try to detect filetype from shebang - let ft = polyglot#ShebangFiletype() - if ft != "" - let &ft = ft - return 1 - endif + File.write( + 'ftdetect/polyglot.vim', + ftdetect.gsub('" scripts/build inserts here filetype detection autocommands') { output } + ) - return 0 - endfunc - + output = <<~EOS let s:interpreters = { EOS @@ -585,47 +582,6 @@ def generate_ftdetect(packages, heuristics) output << <<~EOS \\ } - let s:r_hashbang = '^#!\\s*\\(\\S\\+\\)\\s*\\(.*\\)\\s*' - let s:r_envflag = '%(\\S\\+=\\S\\+\\|-[iS]\\|--ignore-environment\\|--split-string\\)' - let s:r_env = '^\\%(\\' . s:r_envflag . '\\s\\+\\)*\\(\\S\\+\\)' - - func! polyglot#ShebangFiletype() - let l:line1 = getline(1) - - if l:line1 !~# "^#!" - return - endif - - let l:pathrest = matchlist(l:line1, s:r_hashbang) - - if len(l:pathrest) == 0 - return - endif - - let [_, l:path, l:rest; __] = l:pathrest - - let l:script = split(l:path, "/")[-1] - - if l:script == "env" - let l:argspath = matchlist(l:rest, s:r_env) - if len(l:argspath) == 0 - return - endif - - let l:script = l:argspath[1] - endif - - if has_key(s:interpreters, l:script) - return s:interpreters[l:script] - endif - - for interpreter in keys(s:interpreters) - if l:script =~# '^' . interpreter - return s:interpreters[interpreter] - endif - endfor - endfunc - EOS for heuristic in heuristics @@ -637,13 +593,10 @@ def generate_ftdetect(packages, heuristics) EOS end - output << <<~EOS - " Restore 'cpoptions' - let &cpo = s:cpo_save - unlet s:cpo_save - EOS + autoload_script = read_section('autoload/polyglot.vim') + autoload_script["\" scripts/build generates heuristics functions here\n"] = output - File.write('autoload/polyglot.vim', output) + File.write('autoload/polyglot.vim', autoload_script) end def generate_tests(packages) @@ -742,8 +695,6 @@ def detect_filetypes(glob) end def generate_plugins(packages) - FileUtils.mkdir_p('autoload/polyglot') - output = "let s:globs = {\n" patterns = Hash.new { |h, k| h[k] = [] } |