diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2020-08-23 23:25:06 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-08-23 23:25:06 +0200 | 
| commit | 114a93bb7c73443d4d0caf9bd9c1875bb96d9d62 (patch) | |
| tree | 147fd27a288ed8f6e3c361cab884db3a38483354 /build | |
| parent | f3ab28a28761b6cd606833585c552490a1f5efe1 (diff) | |
| download | vim-polyglot-114a93bb7c73443d4d0caf9bd9c1875bb96d9d62.tar.gz vim-polyglot-114a93bb7c73443d4d0caf9bd9c1875bb96d9d62.zip | |
Migrate ftdetect generation to ruby
Diffstat (limited to 'build')
| -rwxr-xr-x | build | 131 | 
1 files changed, 119 insertions, 12 deletions
| @@ -95,8 +95,6 @@ def load_languages    data = URI.open(url) { |io| YAML.load(io.read) }  end -# heuristics, languages = parallel(:load_heuristics, :load_languages) -  def parse_remote(remote)    match = remote.match(/(?<repo>[^@:]+)(?:@(?<branch>[^:]+))?(?::(?<path>.*))?/)    [match[:repo], match[:branch] || "master", match[:path]] @@ -123,16 +121,18 @@ end  def download    FileUtils.rm_rf('tmp') -  PACKAGES.map do |package| -    Thread.new do -      repo, branch, path = parse_remote(package.fetch("remote")) -      dir = "tmp/" + repo.split('/')[1] -      FileUtils.mkdir_p(dir) -      url = "https://codeload.github.com/#{repo}/tar.gz/#{branch}" -      `curl --silent -fL #{url} | tar -zx -C "#{dir}" --strip 1` -      progress -    end -  end.map(&:join) +  PACKAGES.each_slice(20) do |batch| +    batch.map do |package| +      Thread.new do +        repo, branch, path = parse_remote(package.fetch("remote")) +        dir = "tmp/" + repo.split('/')[1] +        FileUtils.mkdir_p(dir) +        url = "https://codeload.github.com/#{repo}/tar.gz/#{branch}" +        `curl --silent -fL #{url} | tar -zx -C "#{dir}" --strip 1` +        progress +      end +    end.map(&:join) +  end  end  $i = 0 @@ -191,7 +191,114 @@ def extract    File.write('README.md', readme)  end +def generate_ftdetect +  heuristics, languages = parallel(:load_heuristics, :load_languages) + +  output = <<~EOS +    " don't spam the user when Vim is started in Vi compatibility mode +    let s:cpo_save = &cpo +    set cpo&vim + +    if !exists('g:polyglot_disabled') +      let g:polyglot_disabled = [] +    endif + +    function! s:SetDefault(name, value) +      if !exists(a:name) +        let {a:name} = a:value +      endif +    endfunction + +    call s:SetDefault('g:markdown_enable_spell_checking', 0) +    call s:SetDefault('g:markdown_enable_input_abbreviations', 0) +    call s:SetDefault('g:markdown_enable_mappings', 0) + +    " Enable jsx syntax by default +    call s:SetDefault('g:jsx_ext_required', 0) + +    " Make csv loading faster +    call s:SetDefault('g:csv_start', 1) +    call s:SetDefault('g:csv_end', 2) + +    " Disable json concealing by default +    call s:SetDefault('g:vim_json_syntax_conceal', 0) + +    call s:SetDefault('g:filetype_euphoria', 'elixir') + +    if !exists('g:python_highlight_all') +      call s:SetDefault('g:python_highlight_builtins', 1) +      call s:SetDefault('g:python_highlight_builtin_objs', 1) +      call s:SetDefault('g:python_highlight_builtin_types', 1) +      call s:SetDefault('g:python_highlight_builtin_funcs', 1) +      call s:SetDefault('g:python_highlight_builtin_funcs_kwarg', 1) +      call s:SetDefault('g:python_highlight_exceptions', 1) +      call s:SetDefault('g:python_highlight_string_formatting', 1) +      call s:SetDefault('g:python_highlight_string_format', 1) +      call s:SetDefault('g:python_highlight_string_templates', 1) +      call s:SetDefault('g:python_highlight_indent_errors', 1) +      call s:SetDefault('g:python_highlight_space_errors', 1) +      call s:SetDefault('g:python_highlight_doctests', 1) +      call s:SetDefault('g:python_highlight_func_calls', 1) +      call s:SetDefault('g:python_highlight_class_vars', 1) +      call s:SetDefault('g:python_highlight_operators', 1) +      call s:SetDefault('g:python_highlight_file_headers_as_comments', 1) +      call s:SetDefault('g:python_slow_sync', 1) +    endif + +  EOS + +  for package in PACKAGES +    name = package.fetch("name") +    output << if name == "jsx" +      "if !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)\n" +    else +      "if index(g:polyglot_disabled, '#{name}') == -1\n" +    end + +    filetypes = package["filetypes"] or raise "Unknown filetype for: #{package["name"]}" + +    for filetype in filetypes +      syntax = filetype["syntax"] ? " syntax=#{filetype["syntax"]}" : "" +      set_command = package.fetch("custom_set", "set ft=#{filetype.fetch("name")}#{syntax}") + +      linguist = filetype["linguist"] ? languages.fetch(filetype["linguist"]) : {} +      extensions = filetype["extensions"] || linguist.fetch("extensions", []).map { |e| e[1..] } +      extensions = (extensions | filetype.fetch("extra_extensions", [])) - filetype.fetch("ignored_extensions", []) +      filenames = filetype["filenames"] || linguist.fetch("filenames", []) +      filenames = (filenames | filetype.fetch("extra_filenames", [])) - filetype.fetch("ignored_filenames", []) + + +      for extension in extensions.sort +        outer_filetype = filetype["outer_filetype"] +        if outer_filetype +          output << "  au BufNewFile *.*.#{extension} execute \"do BufNewFile filetypedetect \" . expand(\"<afile>:r\") | #{outer_filetype}" +          output << "  au BufReadPre *.*#{extension} execute \"do BufRead filetypedetect \" . expand(\"<afile>:r\") | #{outer_filetype}" +        end +        output << "  au BufNewFile,BufRead *.#{extension} #{set_command}\n" +      end + +      for filename in filenames.sort +        if filename[0] == "." +          filename = "{.,}" + filename[1..] +        end +        output << "  au BufNewFile,BufRead #{filename} #{set_command}\n" +      end +    end + +    output << "endif\n\n" +  end + +  output << <<~EOS +    " restore Vi compatibility settings +    let &cpo = s:cpo_save +    unlet s:cpo_save +  EOS + +  File.write('ftdetect/polyglot.vim', output) +end +  download  extract +generate_ftdetect  puts(" Bye! Have a wonderful time!")  FileUtils.rm_rf("tmp") | 
