annotate runtime/indent/typescript.vim @ 35229:925475d6ebae default tip

runtime(matchit): update matchit plugin to v1.20 Commit: https://github.com/vim/vim/commit/8cf29e4c4a2af75bf31ef16ef108aea61c165af8 Author: Christian Brabandt <cb@256bit.org> Date: Mon May 20 20:02:16 2024 +0200 runtime(matchit): update matchit plugin to v1.20 fixes: https://github.com/vim/vim/issues/14814 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Mon, 20 May 2024 20:15:02 +0200
parents 5c220cf30f1f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16971
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 " Vim indent file
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2 " Language: TypeScript
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 " Maintainer: See https://github.com/HerringtonDarkholme/yats.vim
18456
6d11fc4aa683 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 16971
diff changeset
4 " Last Change: 2019 Oct 18
33052
5c220cf30f1f runtime: Set b:undo_indent where missing (#12944)
Christian Brabandt <cb@256bit.org>
parents: 25773
diff changeset
5 " 2023 Aug 28 by Vim Project (undo_indent)
16971
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
6 " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
7
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8 " 0. Initialization {{{1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9 " =================
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
11 " Only load this indent file when no other was loaded.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
12 if exists("b:did_indent")
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
13 finish
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15 let b:did_indent = 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
16
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
17 setlocal nosmartindent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
18
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
19 " Now, set up our indentation expression and keys that trigger it.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
20 setlocal indentexpr=GetTypescriptIndent()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
21 setlocal formatexpr=Fixedgq(v:lnum,v:count)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
22 setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23
33052
5c220cf30f1f runtime: Set b:undo_indent where missing (#12944)
Christian Brabandt <cb@256bit.org>
parents: 25773
diff changeset
24 let b:undo_indent = "setlocal formatexpr< indentexpr< indentkeys< smartindent<"
5c220cf30f1f runtime: Set b:undo_indent where missing (#12944)
Christian Brabandt <cb@256bit.org>
parents: 25773
diff changeset
25
16971
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
26 " Only define the function once.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
27 if exists("*GetTypescriptIndent")
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
28 finish
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
29 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
30
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
31 let s:cpo_save = &cpo
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
32 set cpo&vim
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
33
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
34 " 1. Variables {{{1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
35 " ============
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
36
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
37 let s:js_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
38
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
39 " Regex of syntax group names that are or delimit string or are comments.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
40 let s:syng_strcom = 'string\|regex\|comment\c'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
41
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
42 " Regex of syntax group names that are strings.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
43 let s:syng_string = 'regex\c'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
44
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
45 " Regex of syntax group names that are strings or documentation.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
46 let s:syng_multiline = 'comment\c'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
47
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
48 " Regex of syntax group names that are line comment.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
49 let s:syng_linecom = 'linecomment\c'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
50
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
51 " Expression used to check whether we should skip a match with searchpair().
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
52 let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'"
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
53
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
54 let s:line_term = '\s*\%(\%(\/\/\).*\)\=$'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
55
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
56 " Regex that defines continuation lines, not including (, {, or [.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
57 let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\|[^=]=[^=].*,\)' . s:line_term
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
58
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
59 " Regex that defines continuation lines.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
60 " TODO: this needs to deal with if ...: and so on
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
61 let s:msl_regex = s:continuation_regex
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
62
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
63 let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
64
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
65 " Regex that defines blocks.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
66 let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
67
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
68 let s:var_stmt = '^\s*var'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
69
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
70 let s:comma_first = '^\s*,'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
71 let s:comma_last = ',\s*$'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
72
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
73 let s:ternary = '^\s\+[?|:]'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
74 let s:ternary_q = '^\s\+?'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
75
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
76 " 2. Auxiliary Functions {{{1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
77 " ======================
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
78
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
79 " Check if the character at lnum:col is inside a string, comment, or is ascii.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
80 function s:IsInStringOrComment(lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
81 return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
82 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
83
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
84 " Check if the character at lnum:col is inside a string.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
85 function s:IsInString(lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
86 return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
87 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
88
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
89 " Check if the character at lnum:col is inside a multi-line comment.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
90 function s:IsInMultilineComment(lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
91 return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
92 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
93
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
94 " Check if the character at lnum:col is a line comment.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
95 function s:IsLineComment(lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
96 return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
97 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
98
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
99 " Find line above 'lnum' that isn't empty, in a comment, or in a string.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
100 function s:PrevNonBlankNonString(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 let in_block = 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
102 let lnum = prevnonblank(a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
103 while lnum > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
104 " Go in and out of blocks comments as necessary.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
105 " If the line isn't empty (with opt. comment) or in a string, end search.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
106 let line = getline(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
107 if line =~ '/\*'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
108 if in_block
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 let in_block = 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
110 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
111 break
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
112 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
113 elseif !in_block && line =~ '\*/'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
114 let in_block = 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
115 elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line)))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
116 break
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118 let lnum = prevnonblank(lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
119 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
120 return lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
121 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
122
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
123 " Find line above 'lnum' that started the continuation 'lnum' may be part of.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 function s:GetMSL(lnum, in_one_line_scope)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
125 " Start on the line we're at and use its indent.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
126 let msl = a:lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 let lnum = s:PrevNonBlankNonString(a:lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
128 while lnum > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129 " If we have a continuation line, or we're in a string, use line as MSL.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
130 " Otherwise, terminate search as we have found our MSL already.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
131 let line = getline(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
132 let col = match(line, s:msl_regex) + 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
133 if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
134 let msl = lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
135 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
136 " Don't use lines that are part of a one line scope as msl unless the
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
137 " flag in_one_line_scope is set to 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
138 "
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
139 if a:in_one_line_scope
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
140 break
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
141 end
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
142 let msl_one_line = s:Match(lnum, s:one_line_scope_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
143 if msl_one_line == 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
144 break
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
145 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
146 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
147 let lnum = s:PrevNonBlankNonString(lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
148 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 return msl
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
150 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
151
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
152 function s:RemoveTrailingComments(content)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 let single = '\/\/\(.*\)\s*$'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
154 let multi = '\/\*\(.*\)\*\/\s*$'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
155 return substitute(substitute(a:content, single, '', ''), multi, '', '')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
156 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
157
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
158 " Find if the string is inside var statement (but not the first string)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159 function s:InMultiVarStatement(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
160 let lnum = s:PrevNonBlankNonString(a:lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162 " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
164 " loop through previous expressions to find a var statement
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
165 while lnum > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
166 let line = getline(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
167
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168 " if the line is a js keyword
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169 if (line =~ s:js_keywords)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 " check if the line is a var stmt
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171 " if the line has a comma first or comma last then we can assume that we
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172 " are in a multiple var statement
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 if (line =~ s:var_stmt)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174 return lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
175 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
176
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 " other js keywords, not a var
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
179 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
180
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
181 let lnum = s:PrevNonBlankNonString(lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
182 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
183
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
184 " beginning of program, not a var
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
185 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
186 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
187
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
188 " Find line above with beginning of the var statement or returns 0 if it's not
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
189 " this statement
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
190 function s:GetVarIndent(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
191 let lvar = s:InMultiVarStatement(a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
192 let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
193
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
194 if lvar
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
195 let line = s:RemoveTrailingComments(getline(prev_lnum))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
196
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
197 " if the previous line doesn't end in a comma, return to regular indent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
198 if (line !~ s:comma_last)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 return indent(prev_lnum) - shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
200 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
201 return indent(lvar) + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
202 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
203 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
204
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
205 return -1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
206 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
207
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
208
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
209 " Check if line 'lnum' has more opening brackets than closing ones.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
210 function s:LineHasOpeningBrackets(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
211 let open_0 = 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
212 let open_2 = 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
213 let open_4 = 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
214 let line = getline(a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
215 let pos = match(line, '[][(){}]', 0)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
216 while pos != -1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
217 if !s:IsInStringOrComment(a:lnum, pos + 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
218 let idx = stridx('(){}[]', line[pos])
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
219 if idx % 2 == 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
220 let open_{idx} = open_{idx} + 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
221 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
222 let open_{idx - 1} = open_{idx - 1} - 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
224 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
225 let pos = match(line, '[][(){}]', pos + 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
226 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
227 return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
228 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
229
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
230 function s:Match(lnum, regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
231 let col = match(getline(a:lnum), a:regex) + 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
232 return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
234
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
235 function s:IndentWithContinuation(lnum, ind, width)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
236 " Set up variables to use and search for MSL to the previous line.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
237 let p_lnum = a:lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
238 let lnum = s:GetMSL(a:lnum, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
239 let line = getline(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
240
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
241 " If the previous line wasn't a MSL and is continuation return its indent.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
242 " TODO: the || s:IsInString() thing worries me a bit.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 if p_lnum != lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
244 if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
245 return a:ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
246 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
248
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
249 " Set up more variables now that we know we aren't continuation bound.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
250 let msl_ind = indent(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
251
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
252 " If the previous line ended with [*+/.-=], start a continuation that
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
253 " indents an extra level.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
254 if s:Match(lnum, s:continuation_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
255 if lnum == p_lnum
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
256 return msl_ind + a:width
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
257 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
258 return msl_ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
259 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
260 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
261
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
262 return a:ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
263 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
264
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
265 function s:InOneLineScope(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
266 let msl = s:GetMSL(a:lnum, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
267 if msl > 0 && s:Match(msl, s:one_line_scope_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
268 return msl
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
269 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
270 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
271 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
272
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
273 function s:ExitingOneLineScope(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
274 let msl = s:GetMSL(a:lnum, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
275 if msl > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
276 " if the current line is in a one line scope ..
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
277 if s:Match(msl, s:one_line_scope_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
278 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
279 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
280 let prev_msl = s:GetMSL(msl - 1, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
281 if s:Match(prev_msl, s:one_line_scope_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
282 return prev_msl
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
283 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
284 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
285 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
286 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
287 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
288
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
289 " 3. GetTypescriptIndent Function {{{1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
290 " =========================
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
291
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
292 function GetTypescriptIndent()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
293 " 3.1. Setup {{{2
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
294 " ----------
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
295
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
296 " Set up variables for restoring position in file. Could use v:lnum here.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
297 let vcol = col('.')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
298
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
299 " 3.2. Work on the current line {{{2
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
300 " -----------------------------
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
301
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
302 let ind = -1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
303 " Get the current line.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
304 let line = getline(v:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
305 " previous nonblank line number
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
306 let prevline = prevnonblank(v:lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
307
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
308 " If we got a closing bracket on an empty line, find its match and indent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
309 " according to it. For parentheses we indent to its column - 1, for the
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
310 " others we indent to the containing line's MSL's level. Return -1 if fail.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
311 let col = matchend(line, '^\s*[],})]')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
312 if col > 0 && !s:IsInStringOrComment(v:lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
313 call cursor(v:lnum, col)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
314
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
315 let lvar = s:InMultiVarStatement(v:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
316 if lvar
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
317 let prevline_contents = s:RemoveTrailingComments(getline(prevline))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
318
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
319 " check for comma first
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
320 if (line[col - 1] =~ ',')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
321 " if the previous line ends in comma or semicolon don't indent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
322 if (prevline_contents =~ '[;,]\s*$')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
323 return indent(s:GetMSL(line('.'), 0))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
324 " get previous line indent, if it's comma first return prevline indent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
325 elseif (prevline_contents =~ s:comma_first)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
326 return indent(prevline)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
327 " otherwise we indent 1 level
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
328 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
329 return indent(lvar) + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
330 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
331 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
332 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
333
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
334
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
335 let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
336 if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
337 if line[col-1]==')' && col('.') != col('$') - 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
338 let ind = virtcol('.')-1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
339 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
340 let ind = indent(s:GetMSL(line('.'), 0))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
341 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
342 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
343 return ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
344 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
345
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
346 " If the line is comma first, dedent 1 level
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
347 if (getline(prevline) =~ s:comma_first)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
348 return indent(prevline) - shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
349 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
350
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
351 if (line =~ s:ternary)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
352 if (getline(prevline) =~ s:ternary_q)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
353 return indent(prevline)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
354 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
355 return indent(prevline) + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
356 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
357 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
358
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
359 " If we are in a multi-line comment, cindent does the right thing.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
360 if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
361 return cindent(v:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
362 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
363
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
364 " Check for multiple var assignments
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
365 " let var_indent = s:GetVarIndent(v:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
366 " if var_indent >= 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
367 " return var_indent
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
368 " endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
369
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
370 " 3.3. Work on the previous line. {{{2
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
371 " -------------------------------
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
372
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
373 " If the line is empty and the previous nonblank line was a multi-line
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
374 " comment, use that comment's indent. Deduct one char to account for the
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
375 " space in ' */'.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
376 if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
377 return indent(prevline) - 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
378 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
379
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
380 " Find a non-blank, non-multi-line string line above the current line.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
381 let lnum = s:PrevNonBlankNonString(v:lnum - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
382
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 " If the line is empty and inside a string, use the previous line.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384 if line =~ '^\s*$' && lnum != prevline
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
385 return indent(prevnonblank(v:lnum))
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
386 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388 " At the start of the file use zero indent.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389 if lnum == 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
390 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
391 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
392
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
393 " Set up variables for current line.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
394 let line = getline(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
395 let ind = indent(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
396
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
397 " If the previous line ended with a block opening, add a level of indent.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
398 if s:Match(lnum, s:block_regex)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
399 return indent(s:GetMSL(lnum, 0)) + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
400 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
401
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
402 " If the previous line contained an opening bracket, and we are still in it,
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
403 " add indent depending on the bracket type.
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
404 if line =~ '[[({]'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
405 let counts = s:LineHasOpeningBrackets(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
406 if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
407 if col('.') + 1 == col('$')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
408 return ind + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
409 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
410 return virtcol('.')
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
411 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
412 elseif counts[1] == '1' || counts[2] == '1'
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413 return ind + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
414 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
415 call cursor(v:lnum, vcol)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
416 end
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
417 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
418
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
419 " 3.4. Work on the MSL line. {{{2
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
420 " --------------------------
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
421
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
422 let ind_con = ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
423 let ind = s:IndentWithContinuation(lnum, ind_con, shiftwidth())
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
424
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
425 " }}}2
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
426 "
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
427 "
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
428 let ols = s:InOneLineScope(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
429 if ols > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
430 let ind = ind + shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
431 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
432 let ols = s:ExitingOneLineScope(lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
433 while ols > 0 && ind > 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
434 let ind = ind - shiftwidth()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
435 let ols = s:InOneLineScope(ols - 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
436 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
437 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
438
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
439 return ind
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
440 endfunction
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
441
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
442 " }}}1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
443
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
444 let &cpo = s:cpo_save
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
445 unlet s:cpo_save
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
446
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
447 function! Fixedgq(lnum, count)
18456
6d11fc4aa683 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 16971
diff changeset
448 let l:tw = &tw ? &tw : 80
16971
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
449
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
450 let l:count = a:count
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
451 let l:first_char = indent(a:lnum) + 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
452
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
453 if mode() == 'i' " gq was not pressed, but tw was set
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
454 return 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
455 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
456
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
457 " This gq is only meant to do code with strings, not comments
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
458 if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
459 return 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
460 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
461
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
462 if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
463 return 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
464 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
465
25773
11b656e74444 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18456
diff changeset
466 " Put all the lines on one line and do normal splitting after that
16971
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
467 if l:count > 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
468 while l:count > 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
469 let l:count -= 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
470 normal J
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
471 endwhile
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
472 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
473
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
474 let l:winview = winsaveview()
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
475
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
476 call cursor(a:lnum, l:tw + 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
477 let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
478 call cursor(a:lnum, l:tw + 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
479 let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
480
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
481 " No need for special treatment, normal gq handles edgecases better
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
482 if breakpoint[1] == orig_breakpoint[1]
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
483 call winrestview(l:winview)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
484 return 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
485 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
486
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
487 " Try breaking after string
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
488 if breakpoint[1] <= indent(a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
489 call cursor(a:lnum, l:tw + 1)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
490 let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum)
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
491 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
492
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
493
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
494 if breakpoint[1] != 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
495 call feedkeys("r\<CR>")
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
496 else
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
497 let l:count = l:count - 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
498 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
499
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
500 " run gq on new lines
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
501 if l:count == 1
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
502 call feedkeys("gqq")
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
503 endif
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
504
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
505 return 0
e18b1c654d09 Update runtime files - Add typescript syntax and indent.
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
506 endfunction