diff options
-rw-r--r-- | .github/workflows/ci.yml | 10 | ||||
-rw-r--r-- | runtime/autoload/dist/vimindent.vim | 20 | ||||
-rw-r--r-- | runtime/doc/undo.txt | 28 | ||||
-rw-r--r-- | runtime/filetype.vim | 8 | ||||
-rw-r--r-- | runtime/indent/rapid.vim | 255 | ||||
-rw-r--r-- | runtime/indent/testdir/rapid.in | 266 | ||||
-rw-r--r-- | runtime/indent/testdir/rapid.ok | 266 | ||||
-rw-r--r-- | runtime/indent/testdir/vim.in | 7 | ||||
-rw-r--r-- | runtime/indent/testdir/vim.ok | 7 | ||||
-rw-r--r-- | src/testdir/test_filetype.vim | 3 | ||||
-rw-r--r-- | src/testdir/test_lua.vim | 6 | ||||
-rw-r--r-- | src/testdir/test_mapping.vim | 4 | ||||
-rw-r--r-- | src/testdir/test_signs.vim | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
14 files changed, 860 insertions, 26 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 47c68ea7d7..104476b454 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,7 @@ jobs: features: [tiny, normal, huge] compiler: [clang, gcc] extra: [none] + luaver: [lua5.4] include: - features: tiny compiler: clang @@ -54,13 +55,18 @@ jobs: coverage: true extra: testgui uchar: true + luaver: lua5.4 - features: huge compiler: clang extra: asan + # Lua5.1 is the most widely used version (since it's what LuaJIT is + # compatible with), so ensure it works + luaver: lua5.1 - features: huge compiler: gcc coverage: true extra: unittests + luaver: lua5.4 - features: normal compiler: gcc extra: vimtags @@ -85,8 +91,8 @@ jobs: libperl-dev \ python2-dev \ python3-dev \ - liblua5.4-dev \ - lua5.4 \ + lib${{ matrix.luaver }}-dev \ + ${{ matrix.luaver }} \ ruby-dev \ tcl-dev \ cscope \ diff --git a/runtime/autoload/dist/vimindent.vim b/runtime/autoload/dist/vimindent.vim index 1306d1e361..a5e04a5391 100644 --- a/runtime/autoload/dist/vimindent.vim +++ b/runtime/autoload/dist/vimindent.vim @@ -2,7 +2,7 @@ vim9script # Language: Vim script # Maintainer: github user lacygoill -# Last Change: 2023 Feb 01 +# Last Change: 2023 Jun 29 # NOTE: Whenever you change the code, make sure the tests are still passing: # @@ -112,10 +112,6 @@ const DICT_KEY: string = '^\s*\%(' .. '\)' .. ':\%(\s\|$\)' -# NOT_A_DICT_KEY {{{3 - -const NOT_A_DICT_KEY: string = ':\@!' - # END_OF_COMMAND {{{3 const END_OF_COMMAND: string = $'\s*\%($\|||\@!\|{INLINE_COMMENT}\)' @@ -197,13 +193,13 @@ patterns =<< trim eval END ldo\=\>!\= tabdo\=\> windo\> - au\%[tocmd]\>.* - com\%[mand]\>.* + au\%[tocmd]\>!\=.* + com\%[mand]\>!\=.* g\%[lobal]!\={PATTERN_DELIMITER}.* v\%[global]!\={PATTERN_DELIMITER}.* END -const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%({patterns->join('\|')}\){NOT_A_DICT_KEY}' +const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%({patterns->join('\|')}\)\%(\s\|$\)\@=' # START_MIDDLE_END {{{3 @@ -254,7 +250,7 @@ START_MIDDLE_END = START_MIDDLE_END kwds->map((_, kwd: string) => kwd == '' ? '' : $'\%(^\|{BAR_SEPARATION}\|\<sil\%[ent]\|{HIGHER_ORDER_COMMAND}\)\s*' - .. $'\<\%({kwd}\)\>\%(\s*{OPERATOR}\)\@!')) + .. $'\<\%({kwd}\)\>\%(\s\|$\|!\)\@=\%(\s*{OPERATOR}\)\@!')) lockvar! START_MIDDLE_END @@ -279,7 +275,7 @@ patterns = BLOCKS const ENDS_BLOCK_OR_CLAUSE: string = '^\s*\%(' .. patterns->join('\|') .. $'\){END_OF_COMMAND}' .. $'\|^\s*cat\%[ch]\%(\s\+\({PATTERN_DELIMITER}\).*\1\)\={END_OF_COMMAND}' - .. $'\|^\s*elseif\=\>\%({OPERATOR}\)\@!' + .. $'\|^\s*elseif\=\>\%(\s\|$\)\@=\%(\s*{OPERATOR}\)\@!' # STARTS_NAMED_BLOCK {{{3 @@ -296,7 +292,7 @@ patterns = [] endfor } -const STARTS_NAMED_BLOCK: string = $'^\s*\%(sil\%[ent]\s\+\)\=\%({patterns->join('\|')}\)\>{NOT_A_DICT_KEY}' +const STARTS_NAMED_BLOCK: string = $'^\s*\%(sil\%[ent]\s\+\)\=\%({patterns->join('\|')}\)\>\%(\s\|$\|!\)\@=' # STARTS_CURLY_BLOCK {{{3 @@ -312,7 +308,7 @@ const STARTS_CURLY_BLOCK: string = '\%(' # STARTS_FUNCTION {{{3 -const STARTS_FUNCTION: string = $'^\s*\%({MODIFIERS.def}\)\=def\>{NOT_A_DICT_KEY}' +const STARTS_FUNCTION: string = $'^\s*\%({MODIFIERS.def}\)\=def\>!\=\s\@=' # ENDS_FUNCTION {{{3 diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt index cc33482473..dc2274c14c 100644 --- a/runtime/doc/undo.txt +++ b/runtime/doc/undo.txt @@ -111,9 +111,19 @@ use CTRL-G u. This is useful if you want an insert command to be undoable in parts. E.g., for each sentence. |i_CTRL-G_u| Setting the value of 'undolevels' also closes the undo block. Even when the -new value is equal to the old value. In |Vim9| script: > - &undolevels = &undolevels +new value is equal to the old value. Use `g:undolevels` to explicitly read +and write only the global value of 'undolevels'. In |Vim9| script: > + &g:undolevels = &g:undolevels In legacy script: > + let &g:undolevels = &g:undolevels + +Note that the similar-looking assignment `let &undolevels=&undolevels` does not +preserve the global option value of 'undolevels' in the event that the local +option has been set to a different value. For example: > + " Start with different global and local values for 'undolevels'. + let &g:undolevels = 1000 + let &l:undolevels = 2000 + " This assignment changes the global option to 2000: let &undolevels = &undolevels ============================================================================== @@ -366,12 +376,20 @@ undo is possible. Use this if you are running out of memory. When you set 'undolevels' to -1 the undo information is not immediately cleared, this happens at the next change. To force clearing the undo information you can use these commands: > - :let old_undolevels = &undolevels - :set undolevels=-1 + :let old_undolevels = &l:undolevels + :setlocal undolevels=-1 :exe "normal a \<BS>\<Esc>" - :let &undolevels = old_undolevels + :let &l:undolevels = old_undolevels :unlet old_undolevels +Note use of `&l:undolevels` to explicitly read the local value of 'undolevels' +and the use of `:setlocal` to change only the local option (which takes +precedence over the corresponding global option value). Saving the option value +via the use of `&undolevels` is unpredictable; it reads either the local value +(if one has been set) or the global value (otherwise). Also, if a local value +has been set, changing the option via `:set undolevels` will change both the +global and local values, requiring extra work to save and restore both values. + Marks for the buffer ('a to 'z) are also saved and restored, together with the text. diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 49e602fab1..eea55f8b99 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -894,6 +894,7 @@ if exists('$XDG_CONFIG_HOME') endif au BufNewFile,BufRead $HOME/.config/cabal/config setf cabalconfig au BufNewFile,BufRead cabal.config setf cabalconfig +au BufNewFile,BufRead *.persistentmodels setf haskellpersistent " Haste au BufNewFile,BufRead *.ht setf haste @@ -948,6 +949,9 @@ au BufNewFile,BufRead */etc/host.conf setf hostconf " Hosts access au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny setf hostsaccess +" Hurl +au BufRead,BufNewFile *.hurl setf hurl + " Hyper Builder au BufNewFile,BufRead *.hb setf hb @@ -1564,6 +1568,10 @@ au BufNewFile,BufRead *.rcp setf pilrc " Pine config au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine +" Pip requirements +au BufNewFile,BufRead *.pip setf requirements +au BufNewFile,BufRead requirements.txt setf requirements + " Pipenv Pipfiles au BufNewFile,BufRead Pipfile setf toml au BufNewFile,BufRead Pipfile.lock setf json diff --git a/runtime/indent/rapid.vim b/runtime/indent/rapid.vim new file mode 100644 index 0000000000..f97ebf84db --- /dev/null +++ b/runtime/indent/rapid.vim @@ -0,0 +1,255 @@ +" ABB Rapid Command indent file for Vim +" Language: ABB Rapid Command +" Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de> +" Version: 2.2.7 +" Last Change: 12. May 2023 +" Credits: Based on indent/vim.vim +" +" Suggestions of improvement are very welcome. Please email me! +" +" Known bugs: ../doc/rapid.txt +" +" TODO +" * indent wrapped lines which do not end with an ; or special key word, +" maybe this is a better idea, but then () and [] has to be changed as +" well +" + +if exists("g:rapidNoSpaceIndent") + if !exists("g:rapidSpaceIndent") + let g:rapidSpaceIndent = !g:rapidNoSpaceIndent + endif + unlet g:rapidNoSpaceIndent +endif + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") || get(g:,'rapidNoIndent',0) + finish +endif +let b:did_indent = 1 + +setlocal nolisp +setlocal nosmartindent +setlocal autoindent +setlocal indentexpr=GetRapidIndent() +if get(g:,'rapidNewStyleIndent',0) + setlocal indentkeys=!^F,o,O,0=~endmodule,0=~error,0=~undo,0=~backward,0=~endproc,0=~endrecord,0=~endtrap,0=~endfunc,0=~else,0=~endif,0=~endtest,0=~endfor,0=~endwhile,:,<[>,<]>,<(>,<)> +else + setlocal indentkeys=!^F,o,O,0=~endmodule,0=~error,0=~undo,0=~backward,0=~endproc,0=~endrecord,0=~endtrap,0=~endfunc,0=~else,0=~endif,0=~endtest,0=~endfor,0=~endwhile,: +endif +let b:undo_indent="setlocal lisp< si< ai< inde< indk<" + +if get(g:,'rapidSpaceIndent',1) + " Use spaces for indention, 2 is enough. + " More or even tabs wastes space on the teach pendant. + setlocal softtabstop=2 + setlocal shiftwidth=2 + setlocal expandtab + setlocal shiftround + let b:undo_indent = b:undo_indent." sts< sw< et< sr<" +endif + +" Only define the function once. +if exists("*GetRapidIndent") + finish +endif + +let s:keepcpo= &cpo +set cpo&vim + +function GetRapidIndent() + let ignorecase_save = &ignorecase + try + let &ignorecase = 0 + return s:GetRapidIndentIntern() + finally + let &ignorecase = ignorecase_save + endtry +endfunction + +function s:GetRapidIndentIntern() abort + + let l:currentLineNum = v:lnum + let l:currentLine = getline(l:currentLineNum) + + if l:currentLine =~ '^!' && !get(g:,'rapidCommentIndent',0) + " If current line is ! line comment, do not change indent + " This may be usefull if code is commented out at the first column. + return 0 + endif + + " Find a non-blank line above the current line. + let l:preNoneBlankLineNum = s:RapidPreNoneBlank(v:lnum - 1) + if l:preNoneBlankLineNum == 0 + " At the start of the file use zero indent. + return 0 + endif + + let l:preNoneBlankLine = getline(l:preNoneBlankLineNum) + let l:ind = indent(l:preNoneBlankLineNum) + + " Define add a 'shiftwidth' pattern + let l:addShiftwidthPattern = '\c\v^\s*(' + let l:addShiftwidthPattern .= '((local|task)\s+)?(module|record|proc|func|trap)\s+\k' + let l:addShiftwidthPattern .= '|(backward|error|undo)>' + let l:addShiftwidthPattern .= ')' + " + " Define Subtract 'shiftwidth' pattern + let l:subtractShiftwidthPattern = '\c\v^\s*(' + let l:subtractShiftwidthPattern .= 'end(module|record|proc|func|trap)>' + let l:subtractShiftwidthPattern .= '|(backward|error|undo)>' + let l:subtractShiftwidthPattern .= ')' + + " Add shiftwidth + if l:preNoneBlankLine =~ l:addShiftwidthPattern + \|| s:RapidLenTilStr(l:preNoneBlankLineNum, "then", 0)>=0 + \|| s:RapidLenTilStr(l:preNoneBlankLineNum, "else", 0)>=0 + \|| s:RapidLenTilStr(l:preNoneBlankLineNum, "do", 0)>=0 + \|| s:RapidLenTilStr(l:preNoneBlankLineNum, "case", 0)>=0 + \|| s:RapidLenTilStr(l:preNoneBlankLineNum, "default", 0)>=0 + let l:ind += &sw + endif + + " Subtract shiftwidth + if l:currentLine =~ l:subtractShiftwidthPattern + \|| s:RapidLenTilStr(l:currentLineNum, "endif", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "endfor", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "endwhile", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "endtest", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "else", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "elseif", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "case", 0)>=0 + \|| s:RapidLenTilStr(l:currentLineNum, "default", 0)>=0 + let l:ind = l:ind - &sw + endif + + " First case (or default) after a test gets the indent of the test. + if (s:RapidLenTilStr(l:currentLineNum, "case", 0)>=0 || s:RapidLenTilStr(l:currentLineNum, "default", 0)>=0) && s:RapidLenTilStr(l:preNoneBlankLineNum, "test", 0)>=0 + let l:ind += &sw + endif + + " continued lines with () or [] + let l:OpenSum = s:RapidLoneParen(l:preNoneBlankLineNum,"(") + s:RapidLoneParen(l:preNoneBlankLineNum,"[") + if get(g:,'rapidNewStyleIndent',0) + let l:CloseSum = s:RapidLoneParen(l:preNoneBlankLineNum,")") + s:RapidLoneParen(l:currentLineNum,"]") + else + let l:CloseSum = s:RapidLoneParen(l:preNoneBlankLineNum,")") + s:RapidLoneParen(l:preNoneBlankLineNum,"]") + endif + if l:OpenSum > l:CloseSum + let l:ind += (l:OpenSum * 4 * &sw) + elseif l:OpenSum < l:CloseSum + let l:ind -= (l:CloseSum * 4 * &sw) + endif + + return l:ind +endfunction + +" Returns the length of the line until a:str occur outside a string or +" comment. Search starts at string index a:startIdx. +" If a:str is a word also add word bounderies and case insesitivity. +" Note: rapidTodoComment and rapidDebugComment are not taken into account. +function s:RapidLenTilStr(lnum, str, startIdx) abort + + let l:line = getline(a:lnum) + let l:len = strlen(l:line) + let l:idx = a:startIdx + let l:str = a:str + if l:str =~ '^\k\+$' + let l:str = '\c\<' . l:str . '\>' + endif + + while l:len > l:idx + let l:idx = match(l:line, l:str, l:idx) + if l:idx < 0 + " a:str not found + return -1 + endif + let l:synName = synIDattr(synID(a:lnum,l:idx+1,0),"name") + if l:synName != "rapidString" + \&& l:synName != "rapidConcealableString" + \&& (l:synName != "rapidComment" || l:str =~ '^!') + " a:str found outside string or line comment + return l:idx + endif + " a:str is part of string or line comment + let l:idx += 1 " continue search for a:str + endwhile + + " a:str not found or l:len <= a:startIdx + return -1 +endfunction + +" a:lchar shoud be one of (, ), [, ], { or } +" returns the number of opening/closing parenthesise which have no +" closing/opening match in getline(a:lnum) +function s:RapidLoneParen(lnum,lchar) abort + if a:lchar == "(" || a:lchar == ")" + let l:opnParChar = "(" + let l:clsParChar = ")" + elseif a:lchar == "[" || a:lchar == "]" + let l:opnParChar = "[" + let l:clsParChar = "]" + elseif a:lchar == "{" || a:lchar == "}" + let l:opnParChar = "{" + let l:clsParChar = "}" + else + return 0 + endif + + let l:line = getline(a:lnum) + + " look for the first ! which is not part of a string + let l:len = s:RapidLenTilStr(a:lnum,"!",0) + if l:len == 0 + return 0 " first char is !; ignored + endif + + let l:opnParen = 0 + " count opening brakets + let l:i = 0 + while l:i >= 0 + let l:i = s:RapidLenTilStr(a:lnum, l:opnParChar, l:i) + if l:i >= 0 + let l:opnParen += 1 + let l:i += 1 + endif + endwhile + + let l:clsParen = 0 + " count closing brakets + let l:i = 0 + while l:i >= 0 + let l:i = s:RapidLenTilStr(a:lnum, l:clsParChar, l:i) + if l:i >= 0 + let l:clsParen += 1 + let l:i += 1 + endif + endwhile + + if (a:lchar == "(" || a:lchar == "[" || a:lchar == "{") && l:opnParen>l:clsParen + return (l:opnParen-l:clsParen) + elseif (a:lchar == ")" || a:lchar == "]" || a:lchar == "}") && l:clsParen>l:opnParen + return (l:clsParen-l:opnParen) + endif + + return 0 +endfunction + +" This function works almost like prevnonblank() but handles %%%-headers and +" comments like blank lines +function s:RapidPreNoneBlank(lnum) abort + + let nPreNoneBlank = prevnonblank(a:lnum) + + while nPreNoneBlank>0 && getline(nPreNoneBlank) =~ '\v\c^\s*(\%\%\%|!)' + " Previouse none blank line irrelevant. Look further aback. + let nPreNoneBlank = prevnonblank(nPreNoneBlank - 1) + endwhile + + return nPreNoneBlank +endfunction + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:sw=2 sts=2 et diff --git a/runtime/indent/testdir/rapid.in b/runtime/indent/testdir/rapid.in new file mode 100644 index 0000000000..515912ed89 --- /dev/null +++ b/runtime/indent/testdir/rapid.in @@ -0,0 +1,266 @@ +! vim: set ft=rapid : + +! START_INDENT + +%%% + VERSION:1 + LANGUAGE:ENGLISH +%%% + +module LowerCaseModule + +task pers num n1 := 0; +local pers num n2 := 1; +var bool b1 := false; +var intnum i1; + +! put some stuff in those strings that may confuse indentation +const string st1 := "endmodule ("; +pers string st_Appl_Info{3,3}:=[ +[ +"[" +, +"default" +, +"case" +], +[ +"else" +, +"then" +, +"endif" +], +[ +"do" +, +"}" +, +")" +], +]; + +pers tooldata tTool1:=[TRUE, +[ +[97.4, 0, 223.1], +[0.924, 0, 0.383 ,0] +], +[5, +[23, 0, 75], +[1, 0, 0, 0], 0, 0, 0 +] +]; +const robtarget p1:=[ +[600, 500, 225.3], +[1, 0, 0, 0], +[1, 1, 0, 0], +[ 11, 12.3, 9E9, 9E9, 9E9, 9E9] +]; + +record myRec +num nRecNum1 +bool bRecBool1 +endrecord + +proc proc1(num n1, +num n2) +var string st1; +n1 := n1+1; +MoveJSync p1, vmax, z30, tool1, "proc2"; +backward +MoveJSync p1, v100, fine, tool1, "proc2"; +undo +n1 := n1-1; +error +trynext; +endproc + +func num nFunc1( +switch s1 +|switch s2 +,num n1 +,bool b1) +var num nVar; +if not Present(s1) return; +if Present(s1) then +Incr n1;' +elseif Present(s2) then +b1:=false; +else +while n1>0 do +Decr n1; +test n1 + +case 1: +test1; +case 2: +test2; +default: +WaitUntil false; +endtest +endwhile +endif +for i from 1 to 10 step 2 do +for j from 1 to 10 do +st_Appl_Info{i,j} := ""; +endfor +endfor +! return 1; +return 0; +error +return -1; +endfunc + +trap Trap1 +Reset do1; +endtrap + +endmodule + +MODULE UpperCaseModule(SYSMODULE,NOSTEPIN) +TASK pers num n1 := 0; +LOCAL pers num n2 := 1; +VAR bool b1 := false; +VAR intnum i1; + +LOCAL FUNC num nFunc1( +switch s1 +|switch s2 +,num n1 +,bool b1) +VAR num nVar; +IF NOT PRESENT(s1) RETURN; +IF PRESENT(s1) THEN +INCR n1;' +ELSEIF PRESENT(s2) THEN +b1:=FALSE; +ELSE +WHILE n1>0 DO +DECR n1; +TEST n1 + +CASE 1: +test1; +CASE 2: +test2; +DEFAULT: +WAITUNTIL FALSE; +ENDTEST +ENDWHILE +ENDIF +FOR i FROM 1 TO 10 STEP 2 DO +FOR j FROM 1 TO 10 DO +st_Appl_Info{i,j} := ""; +ENDFOR +ENDFOR +! RETURN 1; +RETURN 0; +ERROR +RETURN -1; +ENDFUNC + +TRAP Trap1 +Reset do1; +ENDTRAP + +ENDMODULE + +Module MixedCaseModule(SysModule) +Task pers num n1 := 0; +Local pers num n2 := 1; +Var bool b1 := false; +Var intnum i1; + +Task Func num nFunc1( +switch s1 +|switch s2 +,num n1 +,bool b1) +Var num nVar; +If Not Present(s1) Return; +If Present(s1) Then +Incr n1;' +ElseIf Present(s2) Then +b1:=false; +Else +While n1>0 Do +Decr n1; +Test n1 + +Case 1: +test1; +Case 2: +test2; +Default: +WaitUntil false; +EndTest +EndWhile +EndIf +For i From 1 To 10 Step 2 Do +For j From 1 To 10 Do +st_Appl_Info{i,j} := ""; +EndFor +EndFor +! Return 1; +Return 0; +Error +Return -1; +EndFunc + +Trap Trap1 +Reset do1; +EndTrap + +EndModule + +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidSpaceIndent = 0 +! INDENT_EXE set shiftwidth=4 + +proc bla() +var num i; +Incr i; +endproc + +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidCommentIndent = 1 +! +proc bla() +! indent this first column comment because of g:rapidCommentIndent=1 +endproc +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidNewStyleIndent = 1 +pers string st_Appl_Info{3,3}:= +[ +[ +"[" +, +"default" +, +"case" +] +, +[ +"else" +, +"then" +, +"endif" +] +, +[ +"do" +, +"}" +, +")" +] +, +]; +! END_INDENT diff --git a/runtime/indent/testdir/rapid.ok b/runtime/indent/testdir/rapid.ok new file mode 100644 index 0000000000..ce336821c4 --- /dev/null +++ b/runtime/indent/testdir/rapid.ok @@ -0,0 +1,266 @@ +! vim: set ft=rapid : + +! START_INDENT + +%%% +VERSION:1 +LANGUAGE:ENGLISH +%%% + +module LowerCaseModule + + task pers num n1 := 0; + local pers num n2 := 1; + var bool b1 := false; + var intnum i1; + +! put some stuff in those strings that may confuse indentation + const string st1 := "endmodule ("; + pers string st_Appl_Info{3,3}:=[ + [ + "[" + , + "default" + , + "case" + ], + [ + "else" + , + "then" + , + "endif" + ], + [ + "do" + , + "}" + , + ")" + ], + ]; + + pers tooldata tTool1:=[TRUE, + [ + [97.4, 0, 223.1], + [0.924, 0, 0.383 ,0] + ], + [5, + [23, 0, 75], + [1, 0, 0, 0], 0, 0, 0 + ] + ]; + const robtarget p1:=[ + [600, 500, 225.3], + [1, 0, 0, 0], + [1, 1, 0, 0], + [ 11, 12.3, 9E9, 9E9, 9E9, 9E9] + ]; + + record myRec + num nRecNum1 + bool bRecBool1 + endrecord + + proc proc1(num n1, + num n2) + var string st1; + n1 := n1+1; + MoveJSync p1, vmax, z30, tool1, "proc2"; + backward + MoveJSync p1, v100, fine, tool1, "proc2"; + undo + n1 := n1-1; + error + trynext; + endproc + + func num nFunc1( + switch s1 + |switch s2 + ,num n1 + ,bool b1) + var num nVar; + if not Present(s1) return; + if Present(s1) then + Incr n1;' + elseif Present(s2) then + b1:=false; + else + while n1>0 do + Decr n1; + test n1 + + case 1: + test1; + case 2: + test2; + default: + WaitUntil false; + endtest + endwhile + endif + for i from 1 to 10 step 2 do + for j from 1 to 10 do + st_Appl_Info{i,j} := ""; + endfor + endfor +! return 1; + return 0; + error + return -1; + endfunc + + trap Trap1 + Reset do1; + endtrap + +endmodule + +MODULE UpperCaseModule(SYSMODULE,NOSTEPIN) + TASK pers num n1 := 0; + LOCAL pers num n2 := 1; + VAR bool b1 := false; + VAR intnum i1; + + LOCAL FUNC num nFunc1( + switch s1 + |switch s2 + ,num n1 + ,bool b1) + VAR num nVar; + IF NOT PRESENT(s1) RETURN; + IF PRESENT(s1) THEN + INCR n1;' + ELSEIF PRESENT(s2) THEN + b1:=FALSE; + ELSE + WHILE n1>0 DO + DECR n1; + TEST n1 + + CASE 1: + test1; + CASE 2: + test2; + DEFAULT: + WAITUNTIL FALSE; + ENDTEST + ENDWHILE + ENDIF + FOR i FROM 1 TO 10 STEP 2 DO + FOR j FROM 1 TO 10 DO + st_Appl_Info{i,j} := ""; + ENDFOR + ENDFOR +! RETURN 1; + RETURN 0; + ERROR + RETURN -1; + ENDFUNC + + TRAP Trap1 + Reset do1; + ENDTRAP + +ENDMODULE + +Module MixedCaseModule(SysModule) + Task pers num n1 := 0; + Local pers num n2 := 1; + Var bool b1 := false; + Var intnum i1; + + Task Func num nFunc1( + switch s1 + |switch s2 + ,num n1 + ,bool b1) + Var num nVar; + If Not Present(s1) Return; + If Present(s1) Then + Incr n1;' + ElseIf Present(s2) Then + b1:=false; + Else + While n1>0 Do + Decr n1; + Test n1 + + Case 1: + test1; + Case 2: + test2; + Default: + WaitUntil false; + EndTest + EndWhile + EndIf + For i From 1 To 10 Step 2 Do + For j From 1 To 10 Do + st_Appl_Info{i,j} := ""; + EndFor + EndFor +! Return 1; + Return 0; + Error + Return -1; + EndFunc + + Trap Trap1 + Reset do1; + EndTrap + +EndModule + +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidSpaceIndent = 0 +! INDENT_EXE set shiftwidth=4 + +proc bla() + var num i; + Incr i; +endproc + +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidCommentIndent = 1 +! +proc bla() + ! indent this first column comment because of g:rapidCommentIndent=1 +endproc +! END_INDENT + +! START_INDENT +! INDENT_EXE let g:rapidNewStyleIndent = 1 +pers string st_Appl_Info{3,3}:= +[ + [ + "[" + , + "default" + , + "case" + ] + , + [ + "else" + , + "then" + , + "endif" + ] + , + [ + "do" + , + "}" + , + ")" + ] + , +]; +! END_INDENT diff --git a/runtime/indent/testdir/vim.in b/runtime/indent/testdir/vim.in index c60d2d1160..c2e149ab37 100644 --- a/runtime/indent/testdir/vim.in +++ b/runtime/indent/testdir/vim.in @@ -484,6 +484,13 @@ endif " END_INDENT " START_INDENT +if true +var d = { +end: 0} +endif +" END_INDENT + +" START_INDENT nunmap <buffer> ( nunmap <buffer> ) inoremap [ { diff --git a/runtime/indent/testdir/vim.ok b/runtime/indent/testdir/vim.ok index 57f0dbf34d..b10e081dd8 100644 --- a/runtime/indent/testdir/vim.ok +++ b/runtime/indent/testdir/vim.ok @@ -484,6 +484,13 @@ endif " END_INDENT " START_INDENT +if true + var d = { + end: 0} +endif +" END_INDENT + +" START_INDENT nunmap <buffer> ( nunmap <buffer> ) inoremap [ { diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 25bfdeb004..e26d3a17ab 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -298,6 +298,7 @@ def s:GetFilenameChecks(): dict<list<string>> handlebars: ['file.hbs'], hare: ['file.ha'], haskell: ['file.hs', 'file.hsc', 'file.hs-boot', 'file.hsig'], + haskellpersistent: ['file.persistentmodels'], haste: ['file.ht'], hastepreproc: ['file.htpp'], hb: ['file.hb'], @@ -316,6 +317,7 @@ def s:GetFilenameChecks(): dict<list<string>> html: ['file.html', 'file.htm', 'file.cshtml'], htmlm4: ['file.html.m4'], httest: ['file.htt', 'file.htb'], + hurl: ['file.hurl'], i3config: ['/home/user/.i3/config', '/home/user/.config/i3/config', '/etc/i3/config', '/etc/xdg/i3/config'], ibasic: ['file.iba', 'file.ibi'], icemenu: ['/.icewm/menu', 'any/.icewm/menu'], @@ -564,6 +566,7 @@ def s:GetFilenameChecks(): dict<list<string>> readline: ['.inputrc', 'inputrc'], rego: ['file.rego'], remind: ['.reminders', 'file.remind', 'file.rem', '.reminders-file'], + requirements: ['file.pip', 'requirements.txt'], rescript: ['file.res', 'file.resi'], resolv: ['resolv.conf'], reva: ['file.frt'], diff --git a/src/testdir/test_lua.vim b/src/testdir/test_lua.vim index 2f9e21fb62..81e9262ca2 100644 --- a/src/testdir/test_lua.vim +++ b/src/testdir/test_lua.vim @@ -616,10 +616,10 @@ endfunc func Test_lua_blob() call assert_equal(0z, luaeval('vim.blob("")')) call assert_equal(0z31326162, luaeval('vim.blob("12ab")')) - call assert_equal(0z00010203, luaeval('vim.blob("\x00\x01\x02\x03")')) - call assert_equal(0z8081FEFF, luaeval('vim.blob("\x80\x81\xfe\xff")')) + call assert_equal(0z00010203, luaeval('vim.blob("\000\001\002\003")')) + call assert_equal(0z8081FEFF, luaeval('vim.blob("\128\129\254\255")')) - lua b = vim.blob("\x00\x00\x00\x00") + lua b = vim.blob("\000\000\000\000") call assert_equal(0z00000000, luaeval('b')) call assert_equal(4, luaeval('#b')) lua b[0], b[1], b[2], b[3] = 1, 32, 256, 0xff diff --git a/src/testdir/test_mapping.vim b/src/testdir/test_mapping.vim index f9c21bb073..e81173d2bc 100644 --- a/src/testdir/test_mapping.vim +++ b/src/testdir/test_mapping.vim @@ -1341,13 +1341,13 @@ func Test_map_cmdkey_op_pending_mode() call assert_equal(['lines', 'of test text'], getline(1, '$')) call assert_equal(['some short '], getreg('"', 1, 1)) " create a new undo point - let &undolevels = &undolevels + let &g:undolevels = &g:undolevels call feedkeys(".", 'xt') call assert_equal(['test text'], getline(1, '$')) call assert_equal(['lines', 'of '], getreg('"', 1, 1)) " create a new undo point - let &undolevels = &undolevels + let &g:undolevels = &g:undolevels call feedkeys("uu", 'xt') call assert_equal(['some short lines', 'of test text'], getline(1, '$')) diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim index 95e8d44869..ffde9b8739 100644 --- |