annotate runtime/autoload/ccomplete.vim @ 33762:7b26c36e9b3b v9.0.2102

patch 9.0.2102: matchparen highlight not cleared in completion mode Commit: https://github.com/vim/vim/commit/9588666360e94de3ff58d4bc79aa9148fbf5fc44 Author: Christian Brabandt <cb@256bit.org> Date: Sun Nov 12 16:55:01 2023 +0100 patch 9.0.2102: matchparen highlight not cleared in completion mode Problem: matchparen highlight not cleared in completion mode Solution: Clear matchparen highlighting in completion mode Remove hard-coded hack in insexpand.c to clear the :3match before displaying the completion menu. Add a test for matchparen highlighting. While at it, move all test tests related to the matchparen plugin into a separate test file. closes: #13493 closes: #13524 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 12 Nov 2023 17:00:04 +0100
parents 4027cefc2aab
children 9dfa17769328
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
1 vim9script noclear
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
2
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
3 # Vim completion script
32770
4027cefc2aab Farewell to Bram and dedicate upcoming Vim 9.1 to him (#12749)
Christian Brabandt <cb@256bit.org>
parents: 27492
diff changeset
4 # Language: C
4027cefc2aab Farewell to Bram and dedicate upcoming Vim 9.1 to him (#12749)
Christian Brabandt <cb@256bit.org>
parents: 27492
diff changeset
5 # Maintainer: The Vim Project <https://github.com/vim/vim>
4027cefc2aab Farewell to Bram and dedicate upcoming Vim 9.1 to him (#12749)
Christian Brabandt <cb@256bit.org>
parents: 27492
diff changeset
6 # Last Change: 2023 Aug 10
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
7 # Rewritten in Vim9 script by github user lacygoill
32770
4027cefc2aab Farewell to Bram and dedicate upcoming Vim 9.1 to him (#12749)
Christian Brabandt <cb@256bit.org>
parents: 27492
diff changeset
8 # Former Maintainer: Bram Moolenaar <Bram@vim.org>
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
9
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
10 var prepended: string
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
11 var grepCache: dict<list<dict<any>>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
12
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
13 # This function is used for the 'omnifunc' option.
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
14 export def Complete(findstart: bool, abase: string): any # {{{1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
15 if findstart
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
16 # Locate the start of the item, including ".", "->" and "[...]".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
17 var line: string = getline('.')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
18 var start: number = charcol('.') - 1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
19 var lastword: number = -1
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
20 while start > 0
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
21 if line[start - 1] =~ '\w'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
22 --start
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
23 elseif line[start - 1] =~ '\.'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
24 if lastword == -1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
25 lastword = start
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
26 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
27 --start
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
28 elseif start > 1 && line[start - 2] == '-'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
29 && line[start - 1] == '>'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
30 if lastword == -1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
31 lastword = start
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
32 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
33 start -= 2
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
34 elseif line[start - 1] == ']'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
35 # Skip over [...].
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
36 var n: number = 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
37 --start
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
38 while start > 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
39 --start
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
40 if line[start] == '['
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
41 if n == 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
42 break
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
43 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
44 --n
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
45 elseif line[start] == ']' # nested []
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
46 ++n
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
47 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
48 endwhile
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
49 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
50 break
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
51 endif
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
52 endwhile
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
53
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
54 # Return the column of the last word, which is going to be changed.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
55 # Remember the text that comes before it in prepended.
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
56 if lastword == -1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
57 prepended = ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
58 return byteidx(line, start)
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
59 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
60 prepended = line[start : lastword - 1]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
61 return byteidx(line, lastword)
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
62 endif
52e76e2b5b65 updated for version 7.0140
vimboss
parents:
diff changeset
63
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
64 # Return list of matches.
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
65
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
66 var base: string = prepended .. abase
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
67
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
68 # Don't do anything for an empty base, would result in all the tags in the
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
69 # tags file.
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
70 if base == ''
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
71 return []
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
72 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
73
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
74 # init cache for vimgrep to empty
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
75 grepCache = {}
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
76
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
77 # Split item in words, keep empty word after "." or "->".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
78 # "aa" -> ['aa'], "aa." -> ['aa', ''], "aa.bb" -> ['aa', 'bb'], etc.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
79 # We can't use split, because we need to skip nested [...].
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
80 # "aa[...]" -> ['aa', '[...]'], "aa.bb[...]" -> ['aa', 'bb', '[...]'], etc.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
81 var items: list<string>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
82 var s: number = 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
83 var arrays: number = 0
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
84 while 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
85 var e: number = base->charidx(match(base, '\.\|->\|\[', s))
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
86 if e < 0
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
87 if s == 0 || base[s - 1] != ']'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
88 items->add(base[s :])
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
89 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
90 break
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
91 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
92 if s == 0 || base[s - 1] != ']'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
93 items->add(base[s : e - 1])
548
f43150a669dc updated for version 7.0155
vimboss
parents: 523
diff changeset
94 endif
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
95 if base[e] == '.'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
96 # skip over '.'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
97 s = e + 1
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
98 elseif base[e] == '-'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
99 # skip over '->'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
100 s = e + 2
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
101 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
102 # Skip over [...].
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
103 var n: number = 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
104 s = e
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
105 ++e
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
106 while e < strcharlen(base)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
107 if base[e] == ']'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
108 if n == 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
109 break
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
110 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
111 --n
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
112 elseif base[e] == '[' # nested [...]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
113 ++n
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
114 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
115 ++e
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
116 endwhile
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
117 ++e
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
118 items->add(base[s : e - 1])
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
119 ++arrays
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
120 s = e
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
121 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
122 endwhile
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
123
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
124 # Find the variable items[0].
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
125 # 1. in current function (like with "gd")
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
126 # 2. in tags file(s) (like with ":tag")
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
127 # 3. in current file (like with "gD")
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
128 var res: list<dict<any>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
129 if items[0]->searchdecl(false, true) == 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
130 # Found, now figure out the type.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
131 # TODO: join previous line if it makes sense
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
132 var line: string = getline('.')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
133 var col: number = charcol('.')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
134 if line[: col - 1]->stridx(';') >= 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
135 # Handle multiple declarations on the same line.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
136 var col2: number = col - 1
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
137 while line[col2] != ';'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
138 --col2
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
139 endwhile
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
140 line = line[col2 + 1 :]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
141 col -= col2
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
142 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
143 if line[: col - 1]->stridx(',') >= 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
144 # Handle multiple declarations on the same line in a function
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
145 # declaration.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
146 var col2: number = col - 1
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
147 while line[col2] != ','
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
148 --col2
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
149 endwhile
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
150 if line[col2 + 1 : col - 1] =~ ' *[^ ][^ ]* *[^ ]'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
151 line = line[col2 + 1 :]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
152 col -= col2
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
153 endif
18ee39301b82 updated for version 7.2a
vimboss
parents: 876
diff changeset
154 endif
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
155 if len(items) == 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
156 # Completing one word and it's a local variable: May add '[', '.' or
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
157 # '->'.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
158 var match: string = items[0]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
159 var kind: string = 'v'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
160 if match(line, '\<' .. match .. '\s*\[') > 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
161 match ..= '['
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
162 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
163 res = line[: col - 1]->Nextitem([''], 0, true)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
164 if len(res) > 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
165 # There are members, thus add "." or "->".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
166 if match(line, '\*[ \t(]*' .. match .. '\>') > 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
167 match ..= '->'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
168 else
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
169 match ..= '.'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
170 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
171 endif
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
172 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
173 res = [{match: match, tagline: '', kind: kind, info: line}]
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
174 elseif len(items) == arrays + 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
175 # Completing one word and it's a local array variable: build tagline
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
176 # from declaration line
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
177 var match: string = items[0]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
178 var kind: string = 'v'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
179 var tagline: string = "\t/^" .. line .. '$/'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
180 res = [{match: match, tagline: tagline, kind: kind, info: line}]
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
181 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
182 # Completing "var.", "var.something", etc.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
183 res = line[: col - 1]->Nextitem(items[1 :], 0, true)
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
184 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
185 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
186
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
187 if len(items) == 1 || len(items) == arrays + 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
188 # Only one part, no "." or "->": complete from tags file.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
189 var tags: list<dict<any>>
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
190 if len(items) == 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
191 tags = taglist('^' .. base)
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
192 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
193 tags = taglist('^' .. items[0] .. '$')
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
194 endif
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
195
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
196 tags
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
197 # Remove members, these can't appear without something in front.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
198 ->filter((_, v: dict<any>): bool =>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
199 v->has_key('kind') ? v.kind != 'm' : true)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
200 # Remove static matches in other files.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
201 ->filter((_, v: dict<any>): bool =>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
202 !v->has_key('static')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
203 || !v['static']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
204 || bufnr('%') == bufnr(v['filename']))
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
205
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
206 res = res->extend(tags->map((_, v: dict<any>) => Tag2item(v)))
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
207 endif
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
208
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
209 if len(res) == 0
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
210 # Find the variable in the tags file(s)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
211 var diclist: list<dict<any>> = taglist('^' .. items[0] .. '$')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
212 # Remove members, these can't appear without something in front.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
213 ->filter((_, v: dict<string>): bool =>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
214 v->has_key('kind') ? v.kind != 'm' : true)
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
215
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
216 res = []
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
217 for i: number in len(diclist)->range()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
218 # New ctags has the "typeref" field. Patched version has "typename".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
219 if diclist[i]->has_key('typename')
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
220 res = res->extend(diclist[i]['typename']->StructMembers(items[1 :], true))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
221 elseif diclist[i]->has_key('typeref')
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
222 res = res->extend(diclist[i]['typeref']->StructMembers(items[1 :], true))
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
223 endif
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
224
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
225 # For a variable use the command, which must be a search pattern that
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
226 # shows the declaration of the variable.
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
227 if diclist[i]['kind'] == 'v'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
228 var line: string = diclist[i]['cmd']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
229 if line[: 1] == '/^'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
230 var col: number = line->charidx(match(line, '\<' .. items[0] .. '\>'))
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
231 res = res->extend(line[2 : col - 1]->Nextitem(items[1 :], 0, true))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
232 endif
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
233 endif
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
234 endfor
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
235 endif
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
236
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
237 if len(res) == 0 && items[0]->searchdecl(true) == 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
238 # Found, now figure out the type.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
239 # TODO: join previous line if it makes sense
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
240 var line: string = getline('.')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
241 var col: number = charcol('.')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
242 res = line[: col - 1]->Nextitem(items[1 :], 0, true)
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
243 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
244
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
245 # If the last item(s) are [...] they need to be added to the matches.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
246 var last: number = len(items) - 1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
247 var brackets: string = ''
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
248 while last >= 0
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
249 if items[last][0] != '['
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
250 break
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
251 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
252 brackets = items[last] .. brackets
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
253 --last
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
254 endwhile
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
255
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
256 return res->map((_, v: dict<any>): dict<string> => Tagline2item(v, brackets))
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
257 enddef
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
258
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
259 def GetAddition( # {{{1
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
260 line: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
261 match: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
262 memarg: list<dict<any>>,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
263 bracket: bool): string
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
264 # Guess if the item is an array.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
265 if bracket && match(line, match .. '\s*\[') > 0
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
266 return '['
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
267 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
268
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
269 # Check if the item has members.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
270 if SearchMembers(memarg, [''], false)->len() > 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
271 # If there is a '*' before the name use "->".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
272 if match(line, '\*[ \t(]*' .. match .. '\>') > 0
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
273 return '->'
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
274 else
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
275 return '.'
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
276 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
277 endif
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
278 return ''
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
279 enddef
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
280
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
281 def Tag2item(val: dict<any>): dict<any> # {{{1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
282 # Turn the tag info "val" into an item for completion.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
283 # "val" is is an item in the list returned by taglist().
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
284 # If it is a variable we may add "." or "->". Don't do it for other types,
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
285 # such as a typedef, by not including the info that GetAddition() uses.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
286 var res: dict<any> = {match: val['name']}
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
287
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
288 res['extra'] = Tagcmd2extra(val['cmd'], val['name'], val['filename'])
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
289
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
290 var s: string = Dict2info(val)
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
291 if s != ''
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
292 res['info'] = s
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
293 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
294
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
295 res['tagline'] = ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
296 if val->has_key('kind')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
297 var kind: string = val['kind']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
298 res['kind'] = kind
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
299 if kind == 'v'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
300 res['tagline'] = "\t" .. val['cmd']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
301 res['dict'] = val
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
302 elseif kind == 'f'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
303 res['match'] = val['name'] .. '('
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
304 endif
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
305 endif
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
306
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
307 return res
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
308 enddef
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
309
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
310 def Dict2info(dict: dict<any>): string # {{{1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
311 # Use all the items in dictionary for the "info" entry.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
312 var info: string = ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
313 for k: string in dict->keys()->sort()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
314 info ..= k .. repeat(' ', 10 - strlen(k))
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
315 if k == 'cmd'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
316 info ..= dict['cmd']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
317 ->matchstr('/^\s*\zs.*\ze$/')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
318 ->substitute('\\\(.\)', '\1', 'g')
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
319 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
320 var dictk: any = dict[k]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
321 if typename(dictk) != 'string'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
322 info ..= dictk->string()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
323 else
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
324 info ..= dictk
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
325 endif
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
326 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
327 info ..= "\n"
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
328 endfor
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
329 return info
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
330 enddef
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
331
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
332 def ParseTagline(line: string): dict<any> # {{{1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
333 # Parse a tag line and return a dictionary with items like taglist()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
334 var l: list<string> = split(line, "\t")
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
335 var d: dict<any>
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
336 if len(l) >= 3
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
337 d['name'] = l[0]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
338 d['filename'] = l[1]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
339 d['cmd'] = l[2]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
340 var n: number = 2
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
341 if l[2] =~ '^/'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
342 # Find end of cmd, it may contain Tabs.
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
343 while n < len(l) && l[n] !~ '/;"$'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
344 ++n
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
345 d['cmd'] ..= ' ' .. l[n]
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
346 endwhile
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
347 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
348 for i: number in range(n + 1, len(l) - 1)
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
349 if l[i] == 'file:'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
350 d['static'] = 1
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
351 elseif l[i] !~ ':'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
352 d['kind'] = l[i]
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
353 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
354 d[l[i]->matchstr('[^:]*')] = l[i]->matchstr(':\zs.*')
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
355 endif
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
356 endfor
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
357 endif
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
358
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
359 return d
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
360 enddef
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
361
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
362 def Tagline2item(val: dict<any>, brackets: string): dict<string> # {{{1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
363 # Turn a match item "val" into an item for completion.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
364 # "val['match']" is the matching item.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
365 # "val['tagline']" is the tagline in which the last part was found.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
366 var line: string = val['tagline']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
367 var add: string = GetAddition(line, val['match'], [val], brackets == '')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
368 var res: dict<string> = {word: val['match'] .. brackets .. add}
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
369
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
370 if val->has_key('info')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
371 # Use info from Tag2item().
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
372 res['info'] = val['info']
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
373 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
374 # Parse the tag line and add each part to the "info" entry.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
375 var s: string = ParseTagline(line)->Dict2info()
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
376 if s != ''
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
377 res['info'] = s
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
378 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
379 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
380
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
381 if val->has_key('kind')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
382 res['kind'] = val['kind']
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
383 elseif add == '('
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
384 res['kind'] = 'f'
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
385 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
386 var s: string = line->matchstr('\t\(kind:\)\=\zs\S\ze\(\t\|$\)')
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
387 if s != ''
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
388 res['kind'] = s
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
389 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
390 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
391
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
392 if val->has_key('extra')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
393 res['menu'] = val['extra']
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
394 return res
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 654
diff changeset
395 endif
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
396
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
397 # Isolate the command after the tag and filename.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
398 var s: string = line->matchstr('[^\t]*\t[^\t]*\t\zs\(/^.*$/\|[^\t]*\)\ze\(;"\t\|\t\|$\)')
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
399 if s != ''
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
400 res['menu'] = s->Tagcmd2extra(val['match'], line->matchstr('[^\t]*\t\zs[^\t]*\ze\t'))
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
401 endif
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
402 return res
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
403 enddef
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
404
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
405 def Tagcmd2extra( # {{{1
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
406 cmd: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
407 name: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
408 fname: string): string
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
409 # Turn a command from a tag line to something that is useful in the menu
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
410 var x: string
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
411 if cmd =~ '^/^'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
412 # The command is a search command, useful to see what it is.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
413 x = cmd
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
414 ->matchstr('^/^\s*\zs.*\ze$/')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
415 ->substitute('\<' .. name .. '\>', '@@', '')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
416 ->substitute('\\\(.\)', '\1', 'g')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
417 .. ' - ' .. fname
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
418 elseif cmd =~ '^\d*$'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
419 # The command is a line number, the file name is more useful.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
420 x = fname .. ' - ' .. cmd
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
421 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
422 # Not recognized, use command and file name.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
423 x = cmd .. ' - ' .. fname
666
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
424 endif
0137e7c3d31b updated for version 7.0196
vimboss
parents: 659
diff changeset
425 return x
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
426 enddef
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
427
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
428 def Nextitem( # {{{1
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
429 lead: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
430 items: list<string>,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
431 depth: number,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
432 all: bool): list<dict<string>>
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
433 # Find composing type in "lead" and match items[0] with it.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
434 # Repeat this recursively for items[1], if it's there.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
435 # When resolving typedefs "depth" is used to avoid infinite recursion.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
436 # Return the list of matches.
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
437
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
438 # Use the text up to the variable name and split it in tokens.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
439 var tokens: list<string> = split(lead, '\s\+\|\<')
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
440
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
441 # Try to recognize the type of the variable. This is rough guessing...
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
442 var res: list<dict<string>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
443 for tidx: number in len(tokens)->range()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
444
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
445 # Skip tokens starting with a non-ID character.
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
446 if tokens[tidx] !~ '^\h'
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
447 continue
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
448 endif
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
449
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
450 # Recognize "struct foobar" and "union foobar".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
451 # Also do "class foobar" when it's C++ after all (doesn't work very well
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
452 # though).
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
453 if (tokens[tidx] == 'struct'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
454 || tokens[tidx] == 'union'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
455 || tokens[tidx] == 'class')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
456 && tidx + 1 < len(tokens)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
457 res = StructMembers(tokens[tidx] .. ':' .. tokens[tidx + 1], items, all)
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
458 break
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
459 endif
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
460
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
461 # TODO: add more reserved words
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
462 if ['int', 'short', 'char', 'float',
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
463 'double', 'static', 'unsigned', 'extern']->index(tokens[tidx]) >= 0
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
464 continue
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
465 endif
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
466
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
467 # Use the tags file to find out if this is a typedef.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
468 var diclist: list<dict<any>> = taglist('^' .. tokens[tidx] .. '$')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
469 for tagidx: number in len(diclist)->range()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
470 var item: dict<any> = diclist[tagidx]
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
471
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
472 # New ctags has the "typeref" field. Patched version has "typename".
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
473 if item->has_key('typeref')
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
474 res = res->extend(item['typeref']->StructMembers(items, all))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
475 continue
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
476 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
477 if item->has_key('typename')
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
478 res = res->extend(item['typename']->StructMembers(items, all))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
479 continue
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
480 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
481
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
482 # Only handle typedefs here.
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
483 if item['kind'] != 't'
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
484 continue
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
485 endif
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
486
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
487 # Skip matches local to another file.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
488 if item->has_key('static') && item['static']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
489 && bufnr('%') != bufnr(item['filename'])
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
490 continue
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
491 endif
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
492
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
493 # For old ctags we recognize "typedef struct aaa" and
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
494 # "typedef union bbb" in the tags file command.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
495 var cmd: string = item['cmd']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
496 var ei: number = cmd->charidx(matchend(cmd, 'typedef\s\+'))
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
497 if ei > 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
498 var cmdtokens: list<string> = cmd[ei :]->split('\s\+\|\<')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
499 if len(cmdtokens) > 1
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
500 if cmdtokens[0] == 'struct'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
501 || cmdtokens[0] == 'union'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
502 || cmdtokens[0] == 'class'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
503 var name: string = ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
504 # Use the first identifier after the "struct" or "union"
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
505 for ti: number in (len(cmdtokens) - 1)->range()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
506 if cmdtokens[ti] =~ '^\w'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
507 name = cmdtokens[ti]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
508 break
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
509 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
510 endfor
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
511 if name != ''
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
512 res = res->extend(StructMembers(cmdtokens[0] .. ':' .. name, items, all))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
513 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
514 elseif depth < 10
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
515 # Could be "typedef other_T some_T".
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
516 res = res->extend(cmdtokens[0]->Nextitem(items, depth + 1, all))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
517 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
518 endif
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
519 endif
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
520 endfor
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
521 if len(res) > 0
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
522 break
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
523 endif
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
524 endfor
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
525
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
526 return res
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
527 enddef
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
528
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
529 def StructMembers( # {{{1
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
530 atypename: string,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
531 items: list<string>,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
532 all: bool): list<dict<string>>
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
533
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
534 # Search for members of structure "typename" in tags files.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
535 # Return a list with resulting matches.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
536 # Each match is a dictionary with "match" and "tagline" entries.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
537 # When "all" is true find all, otherwise just return 1 if there is any member.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
538
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
539 # Todo: What about local structures?
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
540 var fnames: string = tagfiles()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
541 ->map((_, v: string) => escape(v, ' \#%'))
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
542 ->join()
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
543 if fnames == ''
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
544 return []
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
545 endif
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
546
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
547 var typename: string = atypename
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
548 var qflist: list<dict<any>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
549 var cached: number = 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
550 var n: string
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
551 if !all
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
552 n = '1' # stop at first found match
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
553 if grepCache->has_key(typename)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
554 qflist = grepCache[typename]
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
555 cached = 1
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
556 endif
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 666
diff changeset
557 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
558 n = ''
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 666
diff changeset
559 endif
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
560 if !cached
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
561 while 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
562 execute 'silent! keepjumps noautocmd '
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
563 .. n .. 'vimgrep ' .. '/\t' .. typename .. '\(\t\|$\)/j '
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
564 .. fnames
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
565
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
566 qflist = getqflist()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
567 if len(qflist) > 0 || match(typename, '::') < 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
568 break
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
569 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
570 # No match for "struct:context::name", remove "context::" and try again.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
571 typename = typename->substitute(':[^:]*::', ':', '')
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
572 endwhile
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
573
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
574 if !all
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
575 # Store the result to be able to use it again later.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
576 grepCache[typename] = qflist
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
577 endif
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
578 endif
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
579
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
580 # Skip over [...] items
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
581 var idx: number = 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
582 var target: string
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
583 while 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
584 if idx >= len(items)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
585 target = '' # No further items, matching all members
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
586 break
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
587 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
588 if items[idx][0] != '['
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
589 target = items[idx]
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
590 break
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
591 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
592 ++idx
14668
34fd018452ed Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 3682
diff changeset
593 endwhile
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
594 # Put matching members in matches[].
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
595 var matches: list<dict<string>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
596 for l: dict<any> in qflist
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
597 var memb: string = l['text']->matchstr('[^\t]*')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
598 if memb =~ '^' .. target
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
599 # Skip matches local to another file.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
600 if match(l['text'], "\tfile:") < 0
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
601 || bufnr('%') == l['text']->matchstr('\t\zs[^\t]*')->bufnr()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
602 var item: dict<string> = {match: memb, tagline: l['text']}
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
603
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
604 # Add the kind of item.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
605 var s: string = l['text']->matchstr('\t\(kind:\)\=\zs\S\ze\(\t\|$\)')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
606 if s != ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
607 item['kind'] = s
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
608 if s == 'f'
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
609 item['match'] = memb .. '('
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
610 endif
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
611 endif
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
612
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
613 matches->add(item)
734
5220ea46cb9a updated for version 7.0221
vimboss
parents: 720
diff changeset
614 endif
516
b7abd41f91da updated for version 7.0144
vimboss
parents: 511
diff changeset
615 endif
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
616 endfor
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
617
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
618 if len(matches) > 0
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
619 # Skip over next [...] items
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
620 ++idx
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
621 while 1
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
622 if idx >= len(items)
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
623 return matches # No further items, return the result.
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
624 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
625 if items[idx][0] != '['
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
626 break
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
627 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
628 ++idx
654
441f938ea9e9 updated for version 7.0192
vimboss
parents: 651
diff changeset
629 endwhile
505
7e6d264ec0a2 updated for version 7.0141
vimboss
parents: 502
diff changeset
630
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
631 # More items following. For each of the possible members find the
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
632 # matching following members.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
633 return SearchMembers(matches, items[idx :], all)
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
634 endif
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
635
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
636 # Failed to find anything.
511
32cf0d2e14b4 updated for version 7.0143
vimboss
parents: 505
diff changeset
637 return []
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
638 enddef
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
639
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
640 def SearchMembers( # {{{1
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
641 matches: list<dict<any>>,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
642 items: list<string>,
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
643 all: bool): list<dict<string>>
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
644
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
645 # For matching members, find matches for following items.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
646 # When "all" is true find all, otherwise just return 1 if there is any member.
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
647 var res: list<dict<string>>
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
648 for i: number in len(matches)->range()
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
649 var typename: string = ''
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
650 var line: string
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
651 if matches[i]->has_key('dict')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
652 if matches[i]['dict']->has_key('typename')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
653 typename = matches[i]['dict']['typename']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
654 elseif matches[i]['dict']->has_key('typeref')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
655 typename = matches[i]['dict']['typeref']
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
656 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
657 line = "\t" .. matches[i]['dict']['cmd']
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
658 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
659 line = matches[i]['tagline']
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
660 var eb: number = matchend(line, '\ttypename:')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
661 var e: number = charidx(line, eb)
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
662 if e < 0
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
663 eb = matchend(line, '\ttyperef:')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
664 e = charidx(line, eb)
800
d8f905020502 updated for version 7.0b
vimboss
parents: 787
diff changeset
665 endif
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
666 if e > 0
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
667 # Use typename field
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
668 typename = line->matchstr('[^\t]*', eb)
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
669 endif
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
670 endif
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 666
diff changeset
671
648
9032e4668296 updated for version 7.0189
vimboss
parents: 610
diff changeset
672 if typename != ''
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
673 res = res->extend(StructMembers(typename, items, all))
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
674 else
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
675 # Use the search command (the declaration itself).
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
676 var sb: number = line->match('\t\zs/^')
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
677 var s: number = charidx(line, sb)
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
678 if s > 0
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
679 var e: number = line
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
680 ->charidx(match(line, '\<' .. matches[i]['match'] .. '\>', sb))
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
681 if e > 0
27492
4789f29c9595 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26779
diff changeset
682 res = res->extend(line[s : e - 1]->Nextitem(items, 0, all))
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
683 endif
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
684 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
685 endif
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
686 if !all && len(res) > 0
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 666
diff changeset
687 break
8ae24f338cab updated for version 7.0217
vimboss
parents: 666
diff changeset
688 endif
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
689 endfor
a7ae7e043e43 updated for version 7.0146
vimboss
parents: 520
diff changeset
690 return res
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
691 enddef
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
692 #}}}1
3237
91e53bcb7946 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2152
diff changeset
693
26779
edb7d53fc7e3 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 22958
diff changeset
694 # vim: noet sw=2 sts=2