mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-13 14:03:50 -05:00
Write heuristics for perl, closes #550
This commit is contained in:
@@ -263,7 +263,7 @@ def rule_to_code(rule)
|
||||
if rule.has_key?("lines")
|
||||
if rule["lines"] == 1
|
||||
return <<~EOS
|
||||
let line = getline(1)
|
||||
let line = getline(nextnonblank(1))
|
||||
|
||||
#{indent(rule_to_code(except(rule, "lines")), 0)}
|
||||
EOS
|
||||
@@ -423,6 +423,7 @@ def generate_ftdetect(packages, heuristics)
|
||||
expected_filetypes = expected_filetypes.select { |e| filetype_names.include?(e["name"]) }
|
||||
|
||||
native_extensions = Set.new(native_filetypes.flat_map { |f| f["extensions"] || [] })
|
||||
native_filenames = Set.new(native_filetypes.flat_map { |f| f["filenames"] || [] })
|
||||
|
||||
for package in packages
|
||||
name = package.fetch("name")
|
||||
@@ -435,6 +436,12 @@ def generate_ftdetect(packages, heuristics)
|
||||
to_disable << "*." + extension
|
||||
end
|
||||
end
|
||||
|
||||
for filename in filetype["filenames"]
|
||||
if native_filenames.include?(filename)
|
||||
to_disable << filename
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if to_disable.size > 0
|
||||
@@ -457,7 +464,7 @@ def generate_ftdetect(packages, heuristics)
|
||||
set_command = "call s:Setf('#{name}')"
|
||||
|
||||
if filetype["syntax"]
|
||||
set_command = "if !did_filetype() | set ft=#{name} syntax=#{filetype["syntax"]} | endif"
|
||||
set_command = "set ft=#{name} syntax=#{filetype["syntax"]}"
|
||||
end
|
||||
|
||||
if filetype["custom_set"]
|
||||
@@ -544,11 +551,11 @@ def generate_ftdetect(packages, heuristics)
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func! polyglot#Heuristics()
|
||||
func! polyglot#Shebang()
|
||||
" Try to detect filetype from shebang
|
||||
let l:filetype = polyglot#Shebang()
|
||||
if l:filetype != ""
|
||||
exec "setf " . l:filetype
|
||||
let ft = polyglot#ShebangFiletype()
|
||||
if ft != ""
|
||||
call s:Setf(ft)
|
||||
return 1
|
||||
endif
|
||||
|
||||
@@ -571,7 +578,7 @@ def generate_ftdetect(packages, heuristics)
|
||||
let s:r_envflag = '%(\\S\\+=\\S\\+\\|-[iS]\\|--ignore-environment\\|--split-string\\)'
|
||||
let s:r_env = '^\\%(\\' . s:r_envflag . '\\s\\+\\)*\\(\\S\\+\\)'
|
||||
|
||||
func! polyglot#Shebang()
|
||||
func! polyglot#ShebangFiletype()
|
||||
let l:line1 = getline(1)
|
||||
|
||||
if l:line1 !~# "^#!"
|
||||
|
||||
@@ -15,6 +15,12 @@ function! TestExtension(filetype, filename, content)
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
" make sure native vim scripts.vim is respected
|
||||
call TestExtension("rib", "renderman", "##RenderMan")
|
||||
|
||||
" make sure case of file does matter when recognizing file
|
||||
call TestExtension("ruby", "scripts/build", "#!/usr/bin/env ruby")
|
||||
|
||||
call TestExtension("sh", "bash1", "#!/bin/bash")
|
||||
call TestExtension("sh", "bash2", "#! /bin/bash")
|
||||
call TestExtension("sh", "bash3", "#! /bin/bash2.3")
|
||||
@@ -279,3 +285,72 @@ call TestExtension("c", "foo.h", "")
|
||||
unlet g:c_syntax_for_h
|
||||
let g:ch_syntax_for_h = 1
|
||||
call TestExtension("ch", "foo.h", "")
|
||||
|
||||
" perl
|
||||
call TestExtension("perl", "empty.plx", "")
|
||||
call TestExtension("perl", "empty.al", "")
|
||||
call TestExtension("perl", "empty.psgi", "")
|
||||
call TestExtension("pod", "empty.pod", "")
|
||||
|
||||
" raku
|
||||
call TestExtension("raku", "empty.p6", "")
|
||||
call TestExtension("raku", "empty.pm6", "")
|
||||
call TestExtension("raku", "empty.pl6", "")
|
||||
call TestExtension("raku", "empty.raku", "")
|
||||
call TestExtension("raku", "empty.rakumod", "")
|
||||
call TestExtension("raku", "empty.pod6", "")
|
||||
call TestExtension("raku", "empty.rakudoc", "")
|
||||
call TestExtension("raku", "empty.rakutest", "")
|
||||
call TestExtension("raku", "empty.t6", "")
|
||||
|
||||
|
||||
" .pm extension
|
||||
call TestExtension("perl", "empty.pm", "")
|
||||
call TestExtension("perl", "strict.pm", " use strict hello;")
|
||||
call TestExtension("perl", "use5.pm", " use 5;")
|
||||
call TestExtension("perl", "usev5.pm", " use v5;")
|
||||
call TestExtension("raku", "script.pm", "#!/usr/bin/env perl6\nprint('Hello world')")
|
||||
call TestExtension("raku", "class.pm", " class Class {}")
|
||||
call TestExtension("raku", "module.pm", " module foobar")
|
||||
call TestExtension("xpm", "xpm.pm", "/* XPM */")
|
||||
call TestExtension("xpm2", "xpm2.pm", "/* XPM2 */")
|
||||
let g:filetype_pm = "fizfuz"
|
||||
call TestExtension("fizfuz", "fizfuz.pm", "")
|
||||
|
||||
" .pl extension
|
||||
call TestExtension("perl", "empty.pl", "")
|
||||
call TestExtension("prolog", "comment.pl", "% hello world")
|
||||
call TestExtension("prolog", "comment2.pl", "/* hello world */")
|
||||
call TestExtension("prolog", "statement.pl", "happy(vincent). ")
|
||||
call TestExtension("prolog", "statement2.pl", "nearbychk(X,Y) :- Y is X-1.")
|
||||
call TestExtension("perl", "strict.pl", " use strict hello;")
|
||||
call TestExtension("perl", "use5.pl", " use 5;")
|
||||
call TestExtension("perl", "usev5.pl", " use v5;")
|
||||
call TestExtension("raku", "script.pl", "#!/usr/bin/env perl6\nprint('Hello world')")
|
||||
call TestExtension("raku", "class.pl", " class Class {}")
|
||||
call TestExtension("raku", "module.pl", " module foobar")
|
||||
let g:filetype_pl = "fizfuz"
|
||||
call TestExtension("fizfuz", "fizfuz.pl", "")
|
||||
|
||||
" .t extension
|
||||
call TestExtension("perl", "empty.t", "")
|
||||
call TestExtension("perl", "strict.t", " use strict hello;")
|
||||
call TestExtension("perl", "use5.t", " use 5;")
|
||||
call TestExtension("perl", "usev5.t", " use v5;")
|
||||
call TestExtension("raku", "script.t", "#!/usr/bin/env perl6\nprint('Hello world')")
|
||||
call TestExtension("raku", "class.t", " class Class {}")
|
||||
call TestExtension("raku", "module.t", " module foobar")
|
||||
call TestExtension("nroff", "module.t", ".nf\n101 Main Street")
|
||||
let g:filetype_t = "fizfuz"
|
||||
call TestExtension("fizfuz", "fizfuz.t", "")
|
||||
|
||||
" .tt2 extension
|
||||
call TestExtension("tt2", "empty.tt2", "")
|
||||
call TestExtension("tt2html", "doctype.tt2", "<!DOCTYPE HTML>")
|
||||
call TestExtension("tt2html", "percent.tt2", "<%filter>")
|
||||
call TestExtension("tt2html", "html.tt2", "<html>")
|
||||
|
||||
" .html extension
|
||||
call TestExtension("html", "empty.html", "")
|
||||
call TestExtension("mason", "mason1.html", "% my $planet = 42;")
|
||||
call TestExtension("mason", "mason2.html", "<%filter></%filter>")
|
||||
|
||||
@@ -154,6 +154,11 @@ call TestFiletype('sexplib')
|
||||
call TestFiletype('octave')
|
||||
call TestFiletype('opencl')
|
||||
call TestFiletype('perl')
|
||||
call TestFiletype('pod')
|
||||
call TestFiletype('mason')
|
||||
call TestFiletype('tt2')
|
||||
call TestFiletype('tt2html')
|
||||
call TestFiletype('xs')
|
||||
call TestFiletype('sql')
|
||||
call TestFiletype('cql')
|
||||
call TestFiletype('php')
|
||||
@@ -232,3 +237,6 @@ call TestFiletype('basic')
|
||||
call TestFiletype('vb')
|
||||
call TestFiletype('dosini')
|
||||
call TestFiletype('odin')
|
||||
call TestFiletype('bzl')
|
||||
call TestFiletype('prolog')
|
||||
call TestFiletype('tads')
|
||||
|
||||
Reference in New Issue
Block a user