updated for version 7.0141

This commit is contained in:
Bram Moolenaar
2005-09-05 22:14:46 +00:00
parent 92d640fad1
commit dd2436f352
5 changed files with 146 additions and 8 deletions

View File

@ -1,7 +1,7 @@
" Vim completion script
" Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2005 Sep 01
" Last Change: 2005 Sep 05
function! ccomplete#Complete(findstart, base)
if a:findstart
@ -21,12 +21,81 @@ function! ccomplete#Complete(findstart, base)
endif
" return list of matches
let items = split(a:base, '\.\|->')
if len(items) == 1
if a:base !~ '\.\|->'
" Only one part, no "." or "->": complete from tags file.
let diclist = taglist(items[0])
let diclist = taglist(a:base)
return map(diclist, 'v:val["name"]')
endif
return items
" Find variable locally in function or file.
let items = split(a:base, '\.\|->')
" At the moment we only do "aa.bb", not "aa.bb.cc"
if len(items) > 2
return []
endif
let line = ''
if searchdecl(items[0]) == 0 || searchdecl(items[0], 1) == 0
" Found, now figure out the type.
" TODO: join previous line if it makes sense
let line = getline('.')
let col = col('.')
else
" Find the variable in the tags file
let diclist = taglist(items[0])
for i in range(len(diclist))
" For now we only recognize a variable.
if diclist[i]['kind'] == 'v'
let line = diclist[i]['cmd']
if line[0] == '/' && line[1] == '^'
" the command is a search pattern, remove the leading /^
let line = strpart(line, 2)
endif
let col = match(line, items[0])
break
endif
endfor
endif
if line == ''
return []
endif
" Is there a * before the variable name?
let col -= 1
let star = 0
while col > 0
let col -= 1
if line[col] == '*'
let star = 1
elseif line[col] !~ '\s'
break
endif
endwhile
" Use the line up to the variable name and split it in tokens.
let lead = strpart(line, 0, col + 1)
let tokens = split(lead, '\s\+\|\<')
let basetext = matchstr(a:base, '.*\.\|->')
for i in range(len(tokens) - 1)
if tokens[i] == 'struct'
let name = tokens[i + 1]
" Todo: Use all tags files; What about local structures?
exe 'vimgrep /\<struct:' . name . '\>/j tags'
let res = []
for l in getqflist()
let memb = matchstr(l['text'], '[^\t]*')
if len(items) == 1 || memb =~ '^' . items[1]
call add(res, basetext . memb)
endif
endfor
return res
endif
endfor
return tokens
endfunction

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 01
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 05
VIM REFERENCE MANUAL by Bram Moolenaar
@ -86,6 +86,7 @@ PLANNED FOR VERSION 7.0:
How to get the type of "var"?
tags file doesn't give type of typedef! E.g., oparg_T is
listed with "^} oparg_T;$"
mlcscope may do it, but I can't find the sources
How to get the members of that type?
tags file has struct: and class: fields

View File

@ -1,4 +1,4 @@
*version7.txt* For Vim version 7.0aa. Last change: 2005 Aug 31
*version7.txt* For Vim version 7.0aa. Last change: 2005 Sep 05
VIM REFERENCE MANUAL by Bram Moolenaar
@ -123,6 +123,10 @@ When making a string upper-case with "vlllU" or similar then the German sharp
s is replaced with "SS". This does not happen with "~" to avoid backwards
compatibility problems and because "SS" can't be changed back to a sharp s.
"gd" previously found the very first occurrence of a variable in a function,
that could be the function argument without type. Now it finds the position
where the type is given.
==============================================================================
NEW FEATURES *new-7*
@ -569,6 +573,8 @@ When 'verbose' is set the output of the ":map", ":abbreviate", ":command",
":function" and ":autocmd" commands will show where it was last defined.
(Yegappan Lakshmanan)
":function /pattern" lists functions matching the pattern.
==============================================================================
IMPROVEMENTS *improvements-7*