summaryrefslogtreecommitdiff
path: root/runtime/autoload/adacomplete.vim
blob: 2659f51d5c52a4e37bb4c75327b527cae32313df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"------------------------------------------------------------------------------
"  Description: Vim Ada omnicompletion file
"     Language:	Ada (2005)
"	   $Id: adacomplete.vim 887 2008-07-08 14:29:01Z krischik $
"   Maintainer:	Martin Krischik
"      $Author: krischik $
"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
"      Version: 4.6
"    $Revision: 887 $
"     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/adacomplete.vim $
"      History: 24.05.2006 MK Unified Headers
"		26.05.2006 MK improved search for begin of word.
"		16.07.2006 MK Ada-Mode as vim-ball
"		15.10.2006 MK Bram's suggestion for runtime integration
"		05.11.2006 MK Bram suggested not to use include protection for
"			      autoload
"		05.11.2006 MK Bram suggested agaist using setlocal omnifunc 
"		05.11.2006 MK Bram suggested to save on spaces
"    Help Page: ft-ada-omni
"------------------------------------------------------------------------------

if version < 700
   finish
endif

" Section: adacomplete#Complete () {{{1
"
" This function is used for the 'omnifunc' option.
"
function! adacomplete#Complete (findstart, base)
   if a:findstart == 1
      return ada#User_Complete (a:findstart, a:base)
   else
      "
      " look up matches
      "
      if exists ("g:ada_omni_with_keywords")
	 call ada#User_Complete (a:findstart, a:base)
      endif
      "
      "  search tag file for matches
      "
      let l:Pattern  = '^' . a:base . '.*$'
      let l:Tag_List = taglist (l:Pattern)
      "
      " add symbols
      "
      for Tag_Item in l:Tag_List
	 if l:Tag_Item['kind'] == ''
	    "
	    " Tag created by gnat xref
	    "
	    let l:Match_Item = {
	       \ 'word':  l:Tag_Item['name'],
	       \ 'menu':  l:Tag_Item['filename'],
	       \ 'info':  "Symbol from file " . l:Tag_Item['filename'] . " line " . l:Tag_Item['cmd'],
	       \ 'kind':  's',
	       \ 'icase': 1}
	 else
	    "
	    " Tag created by ctags
	    "
	    let l:Info	= 'Symbol		 : ' . l:Tag_Item['name']  . "\n"
	    let l:Info .= 'Of type		 : ' . g:ada#Ctags_Kinds[l:Tag_Item['kind']][1]  . "\n"
	    let l:Info .= 'Defined in File	 : ' . l:Tag_Item['filename'] . "\n"

	    if has_key( l:Tag_Item, 'package')
	       let l:Info .= 'Package		    : ' . l:Tag_Item['package'] . "\n"
	       let l:Menu  = l:Tag_Item['package']
	    elseif has_key( l:Tag_Item, 'separate')
	       let l:Info .= 'Separate from Package : ' . l:Tag_Item['separate'] . "\n"
	       let l:Menu  = l:Tag_Item['separate']
	    elseif has_key( l:Tag_Item, 'packspec')
	       let l:Info .= 'Package Specification : ' . l:Tag_Item['packspec'] . "\n"
	       let l:Menu  = l:Tag_Item['packspec']
	    elseif has_key( l:Tag_Item, 'type')
	       let l:Info .= 'Datetype		    : ' . l:Tag_Item['type'] . "\n"
	       let l:Menu  = l:Tag_Item['type']
	    else
	       let l:Menu  = l:Tag_Item['filename']
	    endif

	    let l:Match_Item = {
	       \ 'word':  l:Tag_Item['name'],
	       \ 'menu':  l:Menu,
	       \ 'info':  l:Info,
	       \ 'kind':  l:Tag_Item['kind'],
	       \ 'icase': 1}
	 endif
	 if complete_add (l:Match_Item) == 0
	    return []
	 endif
	 if complete_check ()
	    return []
	 endif
      endfor
      return []
   endif
endfunction adacomplete#Complete

finish " 1}}}

"------------------------------------------------------------------------------
"   Copyright (C) 2006	Martin Krischik
"
"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
"------------------------------------------------------------------------------
" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
" vim: foldmethod=marker