mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-15 23:13:50 -05:00
Write heuristics for perl, closes #550
This commit is contained in:
98
indent/bzl.vim
Normal file
98
indent/bzl.vim
Normal file
@@ -0,0 +1,98 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'bzl') == -1
|
||||
|
||||
" Vim indent file
|
||||
" Language: Bazel (http://bazel.io)
|
||||
" Maintainer: David Barnett (https://github.com/google/vim-ft-bzl)
|
||||
" Last Change: 2017 Jun 13
|
||||
|
||||
if exists('b:did_indent')
|
||||
finish
|
||||
endif
|
||||
|
||||
" Load base python indent.
|
||||
if !exists('*GetPythonIndent')
|
||||
runtime! indent/python.vim
|
||||
endif
|
||||
|
||||
let b:did_indent = 1
|
||||
|
||||
" Only enable bzl google indent if python google indent is enabled.
|
||||
if !get(g:, 'no_google_python_indent')
|
||||
setlocal indentexpr=GetBzlIndent(v:lnum)
|
||||
endif
|
||||
|
||||
if exists('*GetBzlIndent')
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo-=C
|
||||
|
||||
" Maximum number of lines to look backwards.
|
||||
let s:maxoff = 50
|
||||
|
||||
""
|
||||
" Determine the correct indent level given an {lnum} in the current buffer.
|
||||
function GetBzlIndent(lnum) abort
|
||||
let l:use_recursive_indent = !get(g:, 'no_google_python_recursive_indent')
|
||||
if l:use_recursive_indent
|
||||
" Backup and override indent setting variables.
|
||||
if exists('g:pyindent_nested_paren')
|
||||
let l:pyindent_nested_paren = g:pyindent_nested_paren
|
||||
endif
|
||||
if exists('g:pyindent_open_paren')
|
||||
let l:pyindent_open_paren = g:pyindent_open_paren
|
||||
endif
|
||||
let g:pyindent_nested_paren = 'shiftwidth() * 2'
|
||||
let g:pyindent_open_paren = 'shiftwidth() * 2'
|
||||
endif
|
||||
|
||||
let l:indent = -1
|
||||
|
||||
" Indent inside parens.
|
||||
" Align with the open paren unless it is at the end of the line.
|
||||
" E.g.
|
||||
" open_paren_not_at_EOL(100,
|
||||
" (200,
|
||||
" 300),
|
||||
" 400)
|
||||
" open_paren_at_EOL(
|
||||
" 100, 200, 300, 400)
|
||||
call cursor(a:lnum, 1)
|
||||
let [l:par_line, l:par_col] = searchpairpos('(\|{\|\[', '', ')\|}\|\]', 'bW',
|
||||
\ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" .
|
||||
\ " synIDattr(synID(line('.'), col('.'), 1), 'name')" .
|
||||
\ " =~ '\\(Comment\\|String\\)$'")
|
||||
if l:par_line > 0
|
||||
call cursor(l:par_line, 1)
|
||||
if l:par_col != col('$') - 1
|
||||
let l:indent = l:par_col
|
||||
endif
|
||||
endif
|
||||
|
||||
" Delegate the rest to the original function.
|
||||
if l:indent == -1
|
||||
let l:indent = GetPythonIndent(a:lnum)
|
||||
endif
|
||||
|
||||
if l:use_recursive_indent
|
||||
" Restore global variables.
|
||||
if exists('l:pyindent_nested_paren')
|
||||
let g:pyindent_nested_paren = l:pyindent_nested_paren
|
||||
else
|
||||
unlet g:pyindent_nested_paren
|
||||
endif
|
||||
if exists('l:pyindent_open_paren')
|
||||
let g:pyindent_open_paren = l:pyindent_open_paren
|
||||
else
|
||||
unlet g:pyindent_open_paren
|
||||
endif
|
||||
endif
|
||||
|
||||
return l:indent
|
||||
endfunction
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
endif
|
||||
71
indent/prolog.vim
Normal file
71
indent/prolog.vim
Normal file
@@ -0,0 +1,71 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'prolog') == -1
|
||||
|
||||
" vim: set sw=4 sts=4:
|
||||
" Maintainer : Gergely Kontra <kgergely@mcl.hu>
|
||||
" Revised on : 2002.02.18. 23:34:05
|
||||
" Language : Prolog
|
||||
" Last change by: Takuya Fujiwara, 2018 Sep 23
|
||||
|
||||
" TODO:
|
||||
" checking with respect to syntax highlighting
|
||||
" ignoring multiline comments
|
||||
" detecting multiline strings
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
|
||||
let b:did_indent = 1
|
||||
|
||||
setlocal indentexpr=GetPrologIndent()
|
||||
setlocal indentkeys-=:,0#
|
||||
setlocal indentkeys+=0%,-,0;,>,0)
|
||||
|
||||
" Only define the function once.
|
||||
"if exists("*GetPrologIndent")
|
||||
" finish
|
||||
"endif
|
||||
|
||||
function! GetPrologIndent()
|
||||
" Find a non-blank line above the current line.
|
||||
let pnum = prevnonblank(v:lnum - 1)
|
||||
" Hit the start of the file, use zero indent.
|
||||
if pnum == 0
|
||||
return 0
|
||||
endif
|
||||
let line = getline(v:lnum)
|
||||
let pline = getline(pnum)
|
||||
|
||||
let ind = indent(pnum)
|
||||
" Previous line was comment -> use previous line's indent
|
||||
if pline =~ '^\s*%'
|
||||
return ind
|
||||
endif
|
||||
" Previous line was the start of block comment -> +1 after '/*' comment
|
||||
if pline =~ '^\s*/\*'
|
||||
return ind + 1
|
||||
endif
|
||||
" Previous line was the end of block comment -> -1 after '*/' comment
|
||||
if pline =~ '^\s*\*/'
|
||||
return ind - 1
|
||||
endif
|
||||
" Check for clause head on previous line
|
||||
if pline =~ '\%(:-\|-->\)\s*\(%.*\)\?$'
|
||||
let ind = ind + shiftwidth()
|
||||
" Check for end of clause on previous line
|
||||
elseif pline =~ '\.\s*\(%.*\)\?$'
|
||||
let ind = ind - shiftwidth()
|
||||
endif
|
||||
" Check for opening conditional on previous line
|
||||
if pline =~ '^\s*\([(;]\|->\)'
|
||||
let ind = ind + shiftwidth()
|
||||
endif
|
||||
" Check for closing an unclosed paren, or middle ; or ->
|
||||
if line =~ '^\s*\([);]\|->\)'
|
||||
let ind = ind - shiftwidth()
|
||||
endif
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
endif
|
||||
Reference in New Issue
Block a user