Mercurial > vim
view runtime/indent/java.vim @ 27970:212c5894b8b1 v8.2.4510
patch 8.2.4510: Vim9: shortening commands leads to confusing script
Commit: https://github.com/vim/vim/commit/204852ae2adfdde10c656ca7f14e5b4207a69172
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 5 12:56:44 2022 +0000
patch 8.2.4510: Vim9: shortening commands leads to confusing script
Problem: Vim9: shortening commands leads to confusing script.
Solution: In Vim9 script require at least ":cont" for ":continue", "const"
instead of "cons", "break" instead of "brea", "catch" instead of
"cat", "else" instead of "el" "elseif" instead of "elsei" "endfor"
instead of "endfo" "endif" instead of "en" "endtry" instead of
"endt", "finally" instead of "fina", "throw" instead of "th",
"while" instead of "wh".
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 05 Mar 2022 14:00:03 +0100 |
parents | d0a20101ecb2 |
children |
line wrap: on
line source
" Vim indent file " Language: Java " Previous Maintainer: Toby Allsopp <toby.allsopp@peace.com> " Current Maintainer: Hong Xu <hong@topbug.net> " Homepage: http://www.vim.org/scripts/script.php?script_id=3899 " https://github.com/xuhdev/indent-java.vim " Last Change: 2016 Mar 7 " Version: 1.1 " License: Same as Vim. " Copyright (c) 2012-2016 Hong Xu " Before 2012, this file was maintained by Toby Allsopp. " Only load this indent file when no other was loaded. if exists("b:did_indent") finish endif let b:did_indent = 1 " Indent Java anonymous classes correctly. setlocal cindent cinoptions& cinoptions+=j1 " The "extends" and "implements" lines start off with the wrong indent. setlocal indentkeys& indentkeys+=0=extends indentkeys+=0=implements " Set the function to do the work. setlocal indentexpr=GetJavaIndent() let b:undo_indent = "set cin< cino< indentkeys< indentexpr<" " Only define the function once. if exists("*GetJavaIndent") finish endif let s:keepcpo= &cpo set cpo&vim function! SkipJavaBlanksAndComments(startline) let lnum = a:startline while lnum > 1 let lnum = prevnonblank(lnum) if getline(lnum) =~ '\*/\s*$' while getline(lnum) !~ '/\*' && lnum > 1 let lnum = lnum - 1 endwhile if getline(lnum) =~ '^\s*/\*' let lnum = lnum - 1 else break endif elseif getline(lnum) =~ '^\s*//' let lnum = lnum - 1 else break endif endwhile return lnum endfunction function GetJavaIndent() " Java is just like C; use the built-in C indenting and then correct a few " specific cases. let theIndent = cindent(v:lnum) " If we're in the middle of a comment then just trust cindent if getline(v:lnum) =~ '^\s*\*' return theIndent endif " find start of previous line, in case it was a continuation line let lnum = SkipJavaBlanksAndComments(v:lnum - 1) " If the previous line starts with '@', we should have the same indent as " the previous one if getline(lnum) =~ '^\s*@.*$' return indent(lnum) endif let prev = lnum while prev > 1 let next_prev = SkipJavaBlanksAndComments(prev - 1) if getline(next_prev) !~ ',\s*$' break endif let prev = next_prev endwhile " Try to align "throws" lines for methods and "extends" and "implements" for " classes. if getline(v:lnum) =~ '^\s*\(throws\|extends\|implements\)\>' \ && getline(lnum) !~ '^\s*\(throws\|extends\|implements\)\>' let theIndent = theIndent + shiftwidth() endif " correct for continuation lines of "throws", "implements" and "extends" let cont_kw = matchstr(getline(prev), \ '^\s*\zs\(throws\|implements\|extends\)\>\ze.*,\s*$') if strlen(cont_kw) > 0 let amount = strlen(cont_kw) + 1 if getline(lnum) !~ ',\s*$' let theIndent = theIndent - (amount + shiftwidth()) if theIndent < 0 let theIndent = 0 endif elseif prev == lnum let theIndent = theIndent + amount if cont_kw ==# 'throws' let theIndent = theIndent + shiftwidth() endif endif elseif getline(prev) =~ '^\s*\(throws\|implements\|extends\)\>' \ && (getline(prev) =~ '{\s*$' \ || getline(v:lnum) =~ '^\s*{\s*$') let theIndent = theIndent - shiftwidth() endif " When the line starts with a }, try aligning it with the matching {, " skipping over "throws", "extends" and "implements" clauses. if getline(v:lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$' call cursor(v:lnum, 1) silent normal! % let lnum = line('.') if lnum < v:lnum while lnum > 1 let next_lnum = SkipJavaBlanksAndComments(lnum - 1) if getline(lnum) !~ '^\s*\(throws\|extends\|implements\)\>' \ && getline(next_lnum) !~ ',\s*$' break endif let lnum = prevnonblank(next_lnum) endwhile return indent(lnum) endif endif " Below a line starting with "}" never indent more. Needed for a method " below a method with an indented "throws" clause. let lnum = SkipJavaBlanksAndComments(v:lnum - 1) if getline(lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$' && indent(lnum) < theIndent let theIndent = indent(lnum) endif return theIndent endfunction let &cpo = s:keepcpo unlet s:keepcpo " vi: sw=2 et