Commits

Matthew Marshall committed 66d8d92

remove omnicomplete.

Comments (0)

Files changed (14)

after/ftplugin/c.vim

-" OmniCppComplete initialization
-call omni#cpp#complete#Init()

after/ftplugin/cpp.vim

-" OmniCppComplete initialization
-call omni#cpp#complete#Init()

autoload/omni/common/debug.vim

-" Description: Omni completion debug functions
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-let s:CACHE_DEBUG_TRACE = []
-
-" Start debug, clear the debug file
-function! omni#common#debug#Start()
-    let s:CACHE_DEBUG_TRACE = []
-    call extend(s:CACHE_DEBUG_TRACE, ['============ Debug Start ============'])
-    call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg")
-endfunc
-
-" End debug, write to debug file
-function! omni#common#debug#End()
-    call extend(s:CACHE_DEBUG_TRACE, ["============= Debug End ============="])
-    call extend(s:CACHE_DEBUG_TRACE, [""])
-    call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg")
-endfunc
-
-" Debug trace function
-function! omni#common#debug#Trace(szFuncName, ...)
-    let szTrace = a:szFuncName
-    let paramNum = a:0
-    if paramNum>0
-        let szTrace .= ':'
-    endif
-    for i in range(paramNum)
-        let szTrace = szTrace .' ('. string(eval('a:'.string(i+1))).')'
-    endfor
-    call extend(s:CACHE_DEBUG_TRACE, [szTrace])
-endfunc

autoload/omni/common/utils.vim

-" Description: Omni completion utils
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-" For sort numbers in list
-function! omni#common#utils#CompareNumber(i1, i2)
-    let num1 = eval(a:i1)
-    let num2 = eval(a:i2)
-    return num1 == num2 ? 0 : num1 > num2 ? 1 : -1
-endfunc
-
-" TagList function calling the vim taglist() with try catch
-" The only throwed exception is 'TagList:UserInterrupt'
-" We also force the noignorecase option to avoid linear search when calling
-" taglist()
-function! omni#common#utils#TagList(szTagQuery)
-    let result = []
-    let bUserIgnoreCase = &ignorecase
-    " Forcing noignorecase search => binary search can be used in taglist()
-    " if tags in the tag file are sorted
-    if bUserIgnoreCase
-        set noignorecase
-    endif
-    try
-        let result = taglist(a:szTagQuery)
-    catch /^Vim:Interrupt$/
-        " Restoring user's setting
-        if bUserIgnoreCase
-            set ignorecase
-        endif
-        throw 'TagList:UserInterrupt'
-    catch
-        "Note: it seems that ctags can generate corrupted files, in this case
-        "taglist() will fail to read the tagfile and an exception from
-        "has_add() is thrown
-    endtry
-
-    " Restoring user's setting
-    if bUserIgnoreCase
-        set ignorecase
-    endif
-    return result
-endfunc
-
-" Same as TagList but don't throw exception
-function! omni#common#utils#TagListNoThrow(szTagQuery)
-    let result = []
-    try
-        let result = omni#common#utils#TagList(a:szTagQuery)
-    catch
-    endtry
-    return result
-endfunc
-
-" Get the word under the cursor
-function! omni#common#utils#GetWordUnderCursor()
-    let szLine = getline('.')
-    let startPos = getpos('.')[2]-1
-    let startPos = (startPos < 0)? 0 : startPos
-    if szLine[startPos] =~ '\w'
-        let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
-    endif
-
-    let startPos = (startPos < 0)? 0 : startPos
-    let szResult = matchstr(szLine, '\w\+', startPos)
-    return szResult
-endfunc

autoload/omni/cpp/complete.vim

-" Description: Omni completion script for cpp files
-" Maintainer:  Vissale NEANG
-" Last Change: 27 sept. 2007
-
-if v:version < 700
-    echohl WarningMsg
-    echomsg "omni#cpp#complete.vim: Please install vim 7.0 or higher for omni-completion"
-    echohl None
-    finish
-endif
-
-call omni#cpp#settings#Init()
-let s:OmniCpp_ShowScopeInAbbr = g:OmniCpp_ShowScopeInAbbr
-let s:OmniCpp_ShowPrototypeInAbbr = g:OmniCpp_ShowPrototypeInAbbr
-let s:OmniCpp_ShowAccess = g:OmniCpp_ShowAccess
-let s:szCurrentWorkingDir = getcwd()
-
-" Cache data
-let s:CACHE_TAG_POPUP_ITEMS = {}
-let s:CACHE_TAG_FILES = {}
-let s:CACHE_TAG_ENV = ''
-let s:CACHE_OVERLOADED_FUNCTIONS = {}
-
-" Has preview window?
-let s:hasPreviewWindow = match(&completeopt, 'preview')>=0
-let s:hasPreviewWindowOld = s:hasPreviewWindow
-
-" Popup item list
-let s:popupItemResultList = []
-
-" May complete indicator
-let s:bMayComplete = 0
-
-" Init mappings
-function! omni#cpp#complete#Init()
-    call omni#cpp#settings#Init()
-    set omnifunc=omni#cpp#complete#Main
-    inoremap <expr> <C-X><C-O> omni#cpp#maycomplete#Complete()
-    inoremap <expr> . omni#cpp#maycomplete#Dot()
-    inoremap <expr> > omni#cpp#maycomplete#Arrow()
-    inoremap <expr> : omni#cpp#maycomplete#Scope()
-endfunc
-
-" Find the start position of the completion
-function! s:FindStartPositionOfCompletion()
-    " Locate the start of the item, including ".", "->" and "[...]".
-    let line = getline('.')
-    let start = col('.') - 1
-
-    let lastword = -1
-    while start > 0
-        if line[start - 1] =~ '\w'
-            let start -= 1
-        elseif line[start - 1] =~ '\.'
-            " Searching for dot '.'
-            if lastword == -1
-                let lastword = start
-            endif
-            let start -= 1
-        elseif start > 1 && line[start - 2] == '-' && line[start - 1] == '>'
-            " Searching for '->'
-            if lastword == -1
-                let lastword = start
-            endif
-            let start -= 2
-        elseif start > 1 && line[start - 2] == ':' && line[start - 1] == ':'
-            " Searching for '::' for namespaces and class
-            if lastword == -1
-                let lastword = start
-            endif
-            let start -= 2
-        elseif line[start - 1] == ']'
-            " Skip over [...].
-            let n = 0
-            let start -= 1
-            while start > 0
-                let start -= 1
-                if line[start] == '['
-                    if n == 0
-                        break
-                    endif
-                    let n -= 1
-                elseif line[start] == ']'  " nested []
-                    let n += 1
-                endif
-            endwhile
-        else
-            break
-        endif
-    endwhile
-    if lastword==-1
-        " For completion on the current scope
-        let lastword = start
-    endif
-    return lastword
-endfunc
-
-" Returns if szKey1.szKey2 is in the cache
-" @return
-"   - 0 = key not found
-"   - 1 = szKey1.szKey2 found
-"   - 2 = szKey1.[part of szKey2] found
-function! s:IsCached(cache, szKey1, szKey2)
-    " Searching key in the result cache
-    let szResultKey = a:szKey1 . a:szKey2
-    let result = [0, szResultKey]
-    if a:szKey2 != ''
-        let szKey = a:szKey2
-        while len(szKey)>0
-            if has_key(a:cache, a:szKey1 . szKey)
-                let result[1] = a:szKey1 . szKey
-                if szKey != a:szKey2
-                    let result[0] = 2
-                else
-                    let result[0] = 1
-                endif
-                break
-            endif
-            let szKey = szKey[:-2]
-        endwhile
-    else
-        if has_key(a:cache, szResultKey)
-            let result[0] = 1
-        endif
-    endif
-    return result
-endfunc
-
-" Extend a tag item to a popup item
-function! s:ExtendTagItemToPopupItem(tagItem, szTypeName)
-    let tagItem = a:tagItem
-
-    " Add the access
-    let szItemMenu = ''
-    let accessChar = {'public': '+','protected': '#','private': '-'}
-    if g:OmniCpp_ShowAccess
-        if has_key(tagItem, 'access') && has_key(accessChar, tagItem.access)
-            let szItemMenu = szItemMenu.accessChar[tagItem.access]
-        else
-            let szItemMenu = szItemMenu." "
-        endif
-    endif
-
-    " Formating optional menu string we extract the scope information
-    let szName = substitute(tagItem.name, '.*::', '', 'g')
-    let szItemWord = szName
-    let szAbbr = szName
-
-    if !g:OmniCpp_ShowScopeInAbbr
-        let szScopeOfTag = omni#cpp#utils#ExtractScope(tagItem)
-        let szItemMenu = szItemMenu.' '.szScopeOfTag[2:]
-        let szItemMenu = substitute(szItemMenu, '\s\+$', '', 'g')
-    else
-        let szAbbr = tagItem.name
-    endif
-    if g:OmniCpp_ShowAccess
-        let szItemMenu = substitute(szItemMenu, '^\s\+$', '', 'g')
-    else
-        let szItemMenu = substitute(szItemMenu, '\(^\s\+\)\|\(\s\+$\)', '', 'g')
-    endif
-
-    " Formating information for the preview window
-    if index(['f', 'p'], tagItem.kind[0])>=0
-        let szItemWord .= '('
-        if g:OmniCpp_ShowPrototypeInAbbr && has_key(tagItem, 'signature')
-            let szAbbr .= tagItem.signature
-        else
-            let szAbbr .= '('
-        endif
-    endif
-    let szItemInfo = ''
-    if s:hasPreviewWindow
-        let szItemInfo = omni#cpp#utils#GetPreviewWindowStringFromTagItem(tagItem)
-    endif
-
-    " If a function is a ctor we add a new key in the tagItem
-    if index(['f', 'p'], tagItem.kind[0])>=0
-        if match(szName, '^\~') < 0 && a:szTypeName =~ '\C\<'.szName.'$'
-            " It's a ctor
-            let tagItem['ctor'] = 1
-        elseif has_key(tagItem, 'access') && tagItem.access == 'friend'
-            " Friend function
-            let tagItem['friendfunc'] = 1
-        endif
-    endif
-
-    " Extending the tag item to a popup item
-    let tagItem['word'] = szItemWord
-    let tagItem['abbr'] = szAbbr
-    let tagItem['menu'] = szItemMenu
-    let tagItem['info'] = szItemInfo
-    let tagItem['dup'] = (s:hasPreviewWindow && index(['f', 'p', 'm'], tagItem.kind[0])>=0)
-    return tagItem
-endfunc
-
-" Get tag popup item list
-function! s:TagPopupList(szTypeName, szBase)
-    let result = []
-
-    " Searching key in the result cache
-    let cacheResult = s:IsCached(s:CACHE_TAG_POPUP_ITEMS, a:szTypeName, a:szBase)
-
-    " Building the tag query, we don't forget dtors when a:szBase==''
-    if a:szTypeName!=''
-        " Scope search
-        let szTagQuery = '^' . a:szTypeName . '::' . a:szBase . '\~\?\w\+$'
-    else
-        " Global search
-        let szTagQuery = '^' . a:szBase . '\w\+$'
-    endif
-
-    " If the result is already in the cache we return it
-    if cacheResult[0]
-        let result = s:CACHE_TAG_POPUP_ITEMS[ cacheResult[1] ]
-        if cacheResult[0] == 2
-            let result = filter(copy(result), 'v:val.name =~ szTagQuery' )
-        endif
-        return result
-    endif
-
-    try
-        " Getting tags
-        let result = omni#common#utils#TagList(szTagQuery)
-
-        " We extend tag items to popup items
-        call map(result, 's:ExtendTagItemToPopupItem(v:val, a:szTypeName)')
-
-        " We store the result in a cache
-        if cacheResult[1] != ''
-            let s:CACHE_TAG_POPUP_ITEMS[ cacheResult[1] ] = result
-        endif
-    catch /^TagList:UserInterrupt$/
-    endtry
-
-    return result
-endfunc
-
-" Find complete matches for a completion on the global scope
-function! s:SearchGlobalMembers(szBase)
-    if a:szBase != ''
-        let tagPopupList = s:TagPopupList('', a:szBase)
-        let tagPopupList = filter(copy(tagPopupList), g:omni#cpp#utils#szFilterGlobalScope)
-        call extend(s:popupItemResultList, tagPopupList)
-    endif
-endfunc
-
-" Search class, struct, union members
-" @param resolvedTagItem: a resolved tag item
-" @param szBase: string base
-" @return list of tag items extended to popup items
-function! s:SearchMembers(resolvedTagItem, szBase)
-    let result = []
-    if a:resolvedTagItem == {}
-        return result
-    endif
-
-    " Get type info without the starting '::'
-    let szTagName = omni#cpp#utils#ExtractTypeInfoFromTag(a:resolvedTagItem)[2:]
-
-    " Unnamed type case. A tag item representing an unnamed type is a variable 
-    " ('v') a member ('m') or a typedef ('t')
-    if index(['v', 't', 'm'], a:resolvedTagItem.kind[0])>=0 && has_key(a:resolvedTagItem, 'typeref')
-        " We remove the 'struct:' or 'class:' etc...
-        let szTagName = substitute(a:resolvedTagItem.typeref, '^\w\+:', '', 'g')
-    endif
-
-    return copy(s:TagPopupList(szTagName, a:szBase))
-endfunc
-
-" Return if the tag env has changed
-function! s:HasTagEnvChanged()
-    if s:CACHE_TAG_ENV == &tags
-        return 0
-    else
-        let s:CACHE_TAG_ENV = &tags
-        return 1
-    endif
-endfunc
-
-" Return if a tag file has changed in tagfiles()
-function! s:HasATagFileOrTagEnvChanged()
-    if s:HasTagEnvChanged()
-        let s:CACHE_TAG_FILES = {}
-        return 1
-    endif
-
-    let result = 0
-    for tagFile in tagfiles()
-        if tagFile == ""
-            continue
-        endif
-
-        if has_key(s:CACHE_TAG_FILES, tagFile)
-            let currentFiletime = getftime(tagFile)
-            if currentFiletime > s:CACHE_TAG_FILES[tagFile]
-                " The file has changed, updating the cache
-                let s:CACHE_TAG_FILES[tagFile] = currentFiletime
-                let result = 1
-            endif
-        else
-            " We store the time of the file
-            let s:CACHE_TAG_FILES[tagFile] = getftime(tagFile)
-            let result = 1
-        endif
-    endfor
-    return result
-endfunc
-" Initialization
-call s:HasATagFileOrTagEnvChanged()
-
-" Filter same function signatures of base classes
-function! s:FilterOverloadedFunctions(tagPopupList)
-    let result = []
-    for tagPopupItem in a:tagPopupList
-        if has_key(tagPopupItem, 'kind') && index(['f', 'p'], tagPopupItem.kind[0])>=0 && has_key(tagPopupItem, 'signature')
-            if !has_key(s:CACHE_OVERLOADED_FUNCTIONS, tagPopupItem.word . tagPopupItem.signature)
-                let s:CACHE_OVERLOADED_FUNCTIONS[tagPopupItem.word . tagPopupItem.signature] = 1
-                call extend(result, [tagPopupItem])
-            endif
-        else
-            call extend(result, [tagPopupItem])
-        endif
-    endfor
-    return result
-endfunc
-
-" Access filter
-function! s:GetAccessFilter(szFilter, szAccessFilter)
-    let szFilter = a:szFilter
-    if g:OmniCpp_DisplayMode == 0
-        if a:szAccessFilter == 'public'
-            " We only get public members
-            let szFilter .= "&& v:val.access == 'public'"
-        elseif a:szAccessFilter == 'protected'
-            " We get public and protected members
-            let szFilter .= "&& v:val.access != 'private'"
-        endif
-    endif
-    return szFilter
-endfunc
-
-" Filter class members in the popup menu after a completion with -> or .
-function! s:FilterClassMembers(tagPopupList, szAccessFilter)
-    let szFilter = "(!has_key(v:val, 'friendfunc') && !has_key(v:val, 'ctor') && has_key(v:val, 'kind') && index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access'))"
-    call filter(a:tagPopupList, s:GetAccessFilter(szFilter, a:szAccessFilter))
-    call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList))
-endfunc
-
-" Filter class scope members in the popup menu after a completion with ::
-" We only display attribute and functions members that
-" have an access information. We also display nested
-" class, struct, union, and enums, typedefs
-function! s:FilterClassScopeMembers(tagPopupList, szAccessFilter)
-    let szFilter = "!has_key(v:val, 'friendfunc') && has_key(v:val, 'kind') && (index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access'))"
-    let szFilter = s:GetAccessFilter(szFilter, a:szAccessFilter)
-    let szFilter .= "|| index(['c','e','g','s','t','u'], v:val.kind[0])>=0"
-    call filter(a:tagPopupList, szFilter)
-    call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList))
-endfunc
-
-" Filter static class members in the popup menu
-function! s:FilterStaticClassMembers(tagPopupList, szAccessFilter)
-    let szFilter = "!has_key(v:val, 'friendfunc') && has_key(v:val, 'kind') && (index(['m', 'p', 'f'], v:val.kind[0])>=0 && has_key(v:val, 'access') && match(v:val.cmd, '\\Cstatic')!=-1)"
-    let szFilter = s:GetAccessFilter(szFilter, a:szAccessFilter)
-    let szFilter = szFilter . "|| index(['c','e','g','n','s','t','u','v'], v:val.kind[0])>=0"
-    call filter(a:tagPopupList, szFilter)
-    call extend(s:popupItemResultList, s:FilterOverloadedFunctions(a:tagPopupList))
-endfunc
-
-" Filter scope members in the popup menu
-function! s:FilterNamespaceScopeMembers(tagPopupList)
-    call extend(s:popupItemResultList, a:tagPopupList)
-endfunc
-
-" Init data at the start of completion
-function! s:InitComplete()
-    " Reset the popup item list
-    let s:popupItemResultList = []
-    let s:CACHE_OVERLOADED_FUNCTIONS = {}
-
-    " Reset includes cache when the current working directory has changed
-    let szCurrentWorkingDir = getcwd()
-    if s:szCurrentWorkingDir != szCurrentWorkingDir
-        let s:szCurrentWorkingDir = szCurrentWorkingDir
-        let g:omni#cpp#includes#CACHE_INCLUDES = {}
-        let g:omni#cpp#includes#CACHE_FILE_TIME = {}
-    endif
-
-    " Has preview window ?
-    let s:hasPreviewWindow = match(&completeopt, 'preview')>=0
-
-    let bResetCache = 0
-
-    " Reset tag env or tag files dependent caches
-    if s:HasATagFileOrTagEnvChanged()
-        let bResetCache = 1
-    endif
-
-    if  (s:OmniCpp_ShowScopeInAbbr !=  g:OmniCpp_ShowScopeInAbbr)
-        \|| (s:OmniCpp_ShowPrototypeInAbbr != g:OmniCpp_ShowPrototypeInAbbr)
-        \|| (s:OmniCpp_ShowAccess != g:OmniCpp_ShowAccess)
-
-        let s:OmniCpp_ShowScopeInAbbr = g:OmniCpp_ShowScopeInAbbr
-        let s:OmniCpp_ShowPrototypeInAbbr = g:OmniCpp_ShowPrototypeInAbbr
-        let s:OmniCpp_ShowAccess = g:OmniCpp_ShowAccess
-        let bResetCache = 1
-    endif
-
-    if s:hasPreviewWindow != s:hasPreviewWindowOld
-        let s:hasPreviewWindowOld = s:hasPreviewWindow
-        let bResetCache = 1
-    endif
-
-    if bResetCache
-        let g:omni#cpp#namespaces#CacheResolve = {}
-        let s:CACHE_TAG_POPUP_ITEMS = {}
-        let g:omni#cpp#utils#CACHE_TAG_INHERITS = {}
-        call garbagecollect()
-    endif
-
-    " Check for updates
-    for szIncludeName in keys(g:omni#cpp#includes#CACHE_INCLUDES)
-        let fTime = getftime(szIncludeName)
-        let bNeedUpdate = 0
-        if has_key(g:omni#cpp#includes#CACHE_FILE_TIME, szIncludeName)
-            if fTime != g:omni#cpp#includes#CACHE_FILE_TIME[szIncludeName]
-                let bNeedUpdate = 1
-            endif
-        else
-            let g:omni#cpp#includes#CACHE_FILE_TIME[szIncludeName] = fTime
-            let bNeedUpdate = 1
-        endif
-        
-        if bNeedUpdate
-            " We have to update include list and namespace map of this file
-            call omni#cpp#includes#GetList(szIncludeName, 1)
-            call omni#cpp#namespaces#GetMapFromBuffer(szIncludeName, 1)
-        endif
-    endfor
-
-    let s:bDoNotComplete = 0
-endfunc
-
-
-" This function is used for the 'omnifunc' option.
-function! omni#cpp#complete#Main(findstart, base)
-    if a:findstart
-        "call omni#common#debug#Start()
-
-        call s:InitComplete()
-
-        " Note: if s:bMayComplete==1 g:omni#cpp#items#data is build by MayComplete functions
-        if !s:bMayComplete
-            " If the cursor is in a comment we go out
-            if omni#cpp#utils#IsCursorInCommentOrString()
-                " Returning -1 is not enough we have to set a variable to let
-                " the second call of omni#cpp#complete knows that the
-                " cursor was in a comment
-                " Why is there a second call when the first call returns -1 ?
-                let s:bDoNotComplete = 1
-                return -1
-            endif
-
-            " We get items here (whend a:findstart==1) because GetItemsToComplete()
-            " depends on the cursor position.
-            " When a:findstart==0 the cursor position is modified
-            let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction())
-        endif
-
-        " Get contexts stack
-        let s:contextStack = omni#cpp#namespaces#GetContexts()
-
-        " Reinit of may complete indicator
-        let s:bMayComplete = 0
-        return s:FindStartPositionOfCompletion()
-    endif
-
-    " If the cursor is in a comment we return an empty result
-    if s:bDoNotComplete
-        let s:bDoNotComplete = 0
-        return []
-    endif
-
-    if len(g:omni#cpp#items#data)==0
-        " A) CURRENT_SCOPE_COMPLETION_MODE
-
-        " 1) Displaying data of each context
-        let szAccessFilter = 'all'
-        for szCurrentContext in s:contextStack
-            if szCurrentContext == '::'
-                continue
-            endif
-
-            let resolvedTagItem = omni#cpp#utils#GetResolvedTagItem(s:contextStack, omni#cpp#utils#CreateTypeInfo(szCurrentContext))
-            if resolvedTagItem != {}
-                " We don't search base classes because bases classes are
-                " already in the context stack
-                let tagPopupList = s:SearchMembers(resolvedTagItem, a:base)
-                if index(['c','s'], resolvedTagItem.kind[0])>=0
-                    " It's a class or struct
-                    call s:FilterClassScopeMembers(tagPopupList, szAccessFilter)
-                    let szAccessFilter = 'protected'
-                else
-                    " It's a namespace or union, we display all members
-                    call s:FilterNamespaceScopeMembers(tagPopupList)
-                endif
-            endif
-        endfor
-
-        " 2) Displaying global scope members
-        if g:OmniCpp_GlobalScopeSearch
-            call s:SearchGlobalMembers(a:base)
-        endif
-    else
-        let typeInfo = omni#cpp#items#ResolveItemsTypeInfo(s:contextStack, g:omni#cpp#items#data)
-
-        if typeInfo != {}
-            if g:omni#cpp#items#data[-1].kind == 'itemScope'
-                " B) SCOPE_COMPLETION_MODE
-                if omni#cpp#utils#GetTypeInfoString(typeInfo)==''
-                    call s:SearchGlobalMembers(a:base)
-                else
-                    for resolvedTagItem in omni#cpp#utils#GetResolvedTags(s:contextStack, typeInfo)
-                        let tagPopupList = s:SearchMembers(resolvedTagItem, a:base)
-                        if index(['c','s'], resolvedTagItem.kind[0])>=0
-                            let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTag(resolvedTagItem)
-                            if g:OmniCpp_DisplayMode==0
-                                " We want to complete a class or struct
-                                " If this class is a base class so we display all class members
-                                if index(s:contextStack, szTypeInfo)<0
-                                    let szAccessFilter = 'public'
-                                    call s:FilterStaticClassMembers(tagPopupList, szAccessFilter)
-                                else
-                                    let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected'
-                                    call s:FilterClassScopeMembers(tagPopupList, szAccessFilter)
-                                endif
-                            else
-                                if index(s:contextStack, szTypeInfo)<0
-                                    let szAccessFilter = 'public'
-                                else
-                                    let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected'
-                                endif
-                                call s:FilterClassScopeMembers(tagPopupList, szAccessFilter)
-                            endif
-                        else
-                            " We want to complete a namespace
-                            call s:FilterNamespaceScopeMembers(tagPopupList)
-                        endif
-                    endfor
-                endif
-            else
-                " C) CLASS_MEMBERS_COMPLETION_MODE
-                for resolvedTagItem in omni#cpp#utils#GetResolvedTags(s:contextStack, typeInfo)
-                    let szTypeInfo = omni#cpp#utils#ExtractTypeInfoFromTag(resolvedTagItem)
-                    if index(s:contextStack, szTypeInfo)<0
-                        let szAccessFilter = 'public'
-                    else
-                        let szAccessFilter = (s:contextStack[0] == szTypeInfo)? 'all' : 'protected'
-                    endif
-                    call s:FilterClassMembers(s:SearchMembers(resolvedTagItem, a:base), szAccessFilter)
-                endfor
-            endif
-        endif
-    endif
-
-    "call omni#common#debug#End()
-
-    return s:popupItemResultList
-endfunc

autoload/omni/cpp/includes.vim

-" Description: Omni completion script for cpp files
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-let g:omni#cpp#includes#CACHE_INCLUDES = {}
-let g:omni#cpp#includes#CACHE_FILE_TIME = {}
-
-let s:rePreprocIncludePart = '\C#\s*include\s*'
-let s:reIncludeFilePart = '\(<\|"\)\(\f\|\s\)\+\(>\|"\)'
-let s:rePreprocIncludeFile = s:rePreprocIncludePart . s:reIncludeFilePart
-
-" Get the include list of a file
-function! omni#cpp#includes#GetList(...)
-    if a:0 > 0
-        return s:GetIncludeListFromFile(a:1, (a:0 > 1)? a:2 : 0 )
-    else
-        return s:GetIncludeListFromCurrentBuffer()
-    endif
-endfunc
-
-" Get the include list from the current buffer
-function! s:GetIncludeListFromCurrentBuffer()
-    let listIncludes = []
-    let originalPos = getpos('.')
-
-    call setpos('.', [0, 1, 1, 0])
-    let curPos = [1,1]
-    let alreadyInclude = {}
-    while curPos != [0,0]
-        let curPos = searchpos('\C\(^'.s:rePreprocIncludeFile.'\)', 'W')
-        if curPos != [0,0]
-            let szLine = getline('.')
-            let startPos = curPos[1]
-            let endPos = matchend(szLine, s:reIncludeFilePart, startPos-1)
-            if endPos!=-1
-                let szInclusion = szLine[startPos-1:endPos-1]
-                let szIncludeFile = substitute(szInclusion, '\('.s:rePreprocIncludePart.'\)\|[<>""]', '', 'g')
-                let szResolvedInclude = omni#cpp#utils#ResolveFilePath(szIncludeFile)
-
-                " Protection over self inclusion
-                if szResolvedInclude != '' && szResolvedInclude != omni#cpp#utils#ResolveFilePath(getreg('%'))
-                    let includePos = curPos
-                    if !has_key(alreadyInclude, szResolvedInclude)
-                        call extend(listIncludes, [{'pos' : includePos, 'include' : szResolvedInclude}])
-                        let alreadyInclude[szResolvedInclude] = 1
-                    endif
-                endif
-            endif
-        endif
-    endwhile
-
-    call setpos('.', originalPos)
-    return listIncludes
-endfunc
-
-" Get the include list from a file
-function! s:GetIncludeListFromFile(szFilePath, bUpdate) 
-    let listIncludes = []
-    if a:szFilePath == ''
-        return listIncludes
-    endif
-
-    if !a:bUpdate && has_key(g:omni#cpp#includes#CACHE_INCLUDES, a:szFilePath)
-        return copy(g:omni#cpp#includes#CACHE_INCLUDES[a:szFilePath])
-    endif
-
-    let g:omni#cpp#includes#CACHE_FILE_TIME[a:szFilePath] = getftime(a:szFilePath)
-
-    let szFixedPath = escape(a:szFilePath, g:omni#cpp#utils#szEscapedCharacters)
-    execute 'silent! lvimgrep /\C\(^'.s:rePreprocIncludeFile.'\)/gj '.szFixedPath
-
-    let listQuickFix = getloclist(0)
-    let alreadyInclude = {}
-    for qf in listQuickFix
-        let szLine = qf.text
-        let startPos = qf.col
-        let endPos = matchend(szLine, s:reIncludeFilePart, startPos-1)
-        if endPos!=-1
-            let szInclusion = szLine[startPos-1:endPos-1]
-            let szIncludeFile = substitute(szInclusion, '\('.s:rePreprocIncludePart.'\)\|[<>""]', '', 'g')
-            let szResolvedInclude = omni#cpp#utils#ResolveFilePath(szIncludeFile)
-            
-            " Protection over self inclusion
-            if szResolvedInclude != '' && szResolvedInclude != a:szFilePath
-                let includePos = [qf.lnum, qf.col]
-                if !has_key(alreadyInclude, szResolvedInclude)
-                    call extend(listIncludes, [{'pos' : includePos, 'include' : szResolvedInclude}])
-                    let alreadyInclude[szResolvedInclude] = 1
-                endif
-            endif
-        endif
-    endfor
-
-    let g:omni#cpp#includes#CACHE_INCLUDES[a:szFilePath] = listIncludes
-
-    return copy(listIncludes)
-endfunc
-
-" For debug purpose
-function! omni#cpp#includes#Display()
-    let szPathBuffer = omni#cpp#utils#ResolveFilePath(getreg('%'))
-    call s:DisplayIncludeTree(szPathBuffer, 0)
-endfunc
-
-" For debug purpose
-function! s:DisplayIncludeTree(szFilePath, indent, ...)
-    let includeGuard = {}
-    if a:0 >0
-        let includeGuard = a:1
-    endif
-    let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath)
-    if has_key(includeGuard, szFilePath)
-        return
-    else
-        let includeGuard[szFilePath] = 1
-    endif
-
-    let szIndent = repeat('    ', a:indent)
-    echo szIndent . a:szFilePath
-    let incList = omni#cpp#includes#GetList(a:szFilePath)
-    for inc in incList
-        call s:DisplayIncludeTree(inc.include, a:indent+1, includeGuard)
-    endfor
-endfunc
-
-

autoload/omni/cpp/items.vim

-" Description: Omni completion script for cpp files
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-" Build the item list of an instruction
-" An item is an instruction between a -> or . or ->* or .*
-" We can sort an item in different kinds:
-" eg: ((MyClass1*)(pObject))->_memberOfClass1.get()     ->show()
-"     |        cast        |  |    member   | | method |  | method |
-" @return a list of item
-" an item is a dictionnary where keys are:
-"   tokens = list of token
-"   kind = itemVariable|itemCast|itemCppCast|itemTemplate|itemFunction|itemUnknown|itemThis|itemScope
-function! omni#cpp#items#Get(tokens, ...)
-    let bGetWordUnderCursor = (a:0>0)? a:1 : 0
-
-    let result = []
-    let itemsDelimiters = ['->', '.', '->*', '.*']
-
-    let tokens = reverse(omni#cpp#utils#BuildParenthesisGroups(a:tokens))
-
-    " fsm states:
-    "   0 = initial state
-    "   TODO: add description of fsm states
-    let state=(bGetWordUnderCursor)? 1 : 0
-    let item = {'tokens' : [], 'kind' : 'itemUnknown'}
-    let parenGroup=-1
-    for token in tokens
-        if state==0
-            if index(itemsDelimiters, token.value)>=0
-                let item = {'tokens' : [], 'kind' : 'itemUnknown'}
-                let state = 1
-            elseif token.value=='::'
-                let state = 9
-                let item.kind = 'itemScope'
-                " Maybe end of tokens
-            elseif token.kind =='cppOperatorPunctuator'
-                " If it's a cppOperatorPunctuator and the current token is not
-                " a itemsDelimiters or '::' we can exit
-                let state=-1
-                break
-            endif
-        elseif state==1
-            call insert(item.tokens, token)
-            if token.kind=='cppWord'
-                " It's an attribute member or a variable
-                let item.kind = 'itemVariable'
-                let state = 2
-                " Maybe end of tokens
-            elseif token.value=='this'
-                let item.kind = 'itemThis'
-                let state = 2
-                " Maybe end of tokens
-            elseif token.value==')'
-                let parenGroup = token.group
-                let state = 3
-            elseif token.value==']'
-                let parenGroup = token.group
-                let state = 4
-            elseif token.kind == 'cppDigit'
-                let state = -1
-                break
-            endif
-        elseif state==2
-            if index(itemsDelimiters, token.value)>=0
-                call insert(result, item)
-                let item = {'tokens' : [], 'kind' : 'itemUnknown'}
-                let state = 1
-            elseif token.value == '::'
-                call insert(item.tokens, token)
-                " We have to get namespace or classscope
-                let state = 8
-                " Maybe end of tokens
-            else
-                call insert(result, item)
-                let state=-1
-                break
-            endif
-        elseif state==3
-            call insert(item.tokens, token)
-            if token.value=='(' && token.group == parenGroup
-                let state = 5
-                " Maybe end of tokens
-            endif
-        elseif state==4
-            call insert(item.tokens, token)
-            if token.value=='[' && token.group == parenGroup
-                let state = 1
-            endif
-        elseif state==5
-            if token.kind=='cppWord'
-                " It's a function or method
-                let item.kind = 'itemFunction'
-                call insert(item.tokens, token)
-                let state = 2
-                " Maybe end of tokens
-            elseif token.value == '>'
-                " Maybe a cpp cast or template
-                let item.kind = 'itemTemplate'
-                call insert(item.tokens, token)
-                let parenGroup = token.group
-                let state = 6
-            else
-                " Perhaps it's a C cast eg: ((void*)(pData)) or a variable eg:(*pData)
-                let item.kind = omni#cpp#utils#GetCastType(item.tokens)
-                let state=-1
-                call insert(result, item)
-                break
-            endif
-        elseif state==6
-            call insert(item.tokens, token)
-            if token.value == '<' && token.group == parenGroup
-                " Maybe a cpp cast or template
-                let state = 7
-            endif
-        elseif state==7
-            call insert(item.tokens, token)
-            if token.kind=='cppKeyword'
-                " It's a cpp cast
-                let item.kind = omni#cpp#utils#GetCastType(item.tokens)
-                let state=-1
-                call insert(result, item)
-                break
-            else
-                " Template ?
-                let state=-1
-                call insert(result, item)
-                break
-            endif
-        elseif state==8
-            if token.kind=='cppWord'
-                call insert(item.tokens, token)
-                let state = 2
-                " Maybe end of tokens
-            else
-                let state=-1
-                call insert(result, item)
-                break
-            endif
-        elseif state==9
-            if token.kind == 'cppWord'
-                call insert(item.tokens, token)
-                let state = 10
-                " Maybe end of tokens
-            else
-                let state=-1
-                call insert(result, item)
-                break
-            endif
-        elseif state==10
-            if token.value == '::'
-                call insert(item.tokens, token)
-                let state = 9
-                " Maybe end of tokens
-            else
-                let state=-1
-                call insert(result, item)
-                break
-            endif
-        endif
-    endfor
-
-    if index([2, 5, 8, 9, 10], state)>=0
-        if state==5
-            let item.kind = omni#cpp#utils#GetCastType(item.tokens)
-        endif
-        call insert(result, item)
-    endif
-
-    return result
-endfunc
-
-" Resolve type information of items
-" @param namespaces: list of namespaces used in the file
-" @param szCurrentClassScope: the current class scope, only used for the first
-" item to detect if this item is a class member (attribute, method)
-" @param items: list of item, can be an empty list @see GetItemsToComplete
-function! omni#cpp#items#ResolveItemsTypeInfo(contextStack, items)
-    " Note: kind = itemVariable|cCast|cppCast|template|function|itemUnknown|this
-    " For the first item, if it's a variable we try to detect the type of the
-    " variable with the function searchdecl. If it fails, thanks to the
-    " current class scope, we try to detect if the variable is an attribute
-    " member.
-    " If the kind of the item is a function, we have to first check if the
-    " function is a method of the class, if it fails we try to get a match in
-    " the global namespace. After that we get the returned type of the
-    " function.
-    " It the kind is a C cast or C++ cast, there is no problem, it's the
-    " easiest case. We just extract the type of the cast.
-
-    let szCurrentContext = ''
-    let typeInfo = {}
-    " Note: We search the decl only for the first item
-    let bSearchDecl = 1
-    for item in a:items
-        let curItem = item
-        if index(['itemVariable', 'itemFunction'], curItem.kind)>=0
-            " Note: a variable can be : MyNs::MyClass::_var or _var or (*pVar)
-            " or _var[0][0]
-            let szSymbol = s:GetSymbol(curItem.tokens)
-
-            " If we have MyNamespace::myVar
-            " We add MyNamespace in the context stack set szSymbol to myVar
-            if match(szSymbol, '::\w\+$') >= 0
-                let szCurrentContext = substitute(szSymbol, '::\w\+$', '', 'g')
-                let szSymbol = matchstr(szSymbol, '\w\+$')
-            endif
-            let tmpContextStack = a:contextStack
-            if szCurrentContext != ''
-                let tmpContextStack = [szCurrentContext] + a:contextStack
-            endif
-
-            if curItem.kind == 'itemVariable'
-                let typeInfo = s:GetTypeInfoOfVariable(tmpContextStack, szSymbol, bSearchDecl)
-            else
-                let typeInfo = s:GetTypeInfoOfReturnedType(tmpContextStack, szSymbol)
-            endif
-
-        elseif curItem.kind == 'itemThis'
-            if len(a:contextStack)
-                let typeInfo = omni#cpp#utils#CreateTypeInfo(substitute(a:contextStack[0], '^::', '', 'g'))
-            endif
-        elseif curItem.kind == 'itemCast'
-            let typeInfo = omni#cpp#utils#CreateTypeInfo(s:ResolveCCast(curItem.tokens))
-        elseif curItem.kind == 'itemCppCast'
-            let typeInfo = omni#cpp#utils#CreateTypeInfo(s:ResolveCppCast(curItem.tokens))
-        elseif curItem.kind == 'itemScope'
-            let typeInfo = omni#cpp#utils#CreateTypeInfo(substitute(s:TokensToString(curItem.tokens), '\s', '', 'g'))
-        endif
-
-        if omni#cpp#utils#IsTypeInfoValid(typeInfo)
-            let szCurrentContext = omni#cpp#utils#GetTypeInfoString(typeInfo)
-        endif
-        let bSearchDecl = 0
-    endfor
-
-    return typeInfo
-endfunc
-
-" Get symbol name
-function! s:GetSymbol(tokens)
-    let szSymbol = ''
-    let state = 0
-    for token in a:tokens
-        if state == 0
-            if token.value == '::'
-                let szSymbol .= token.value
-                let state = 1
-            elseif token.kind == 'cppWord'
-                let szSymbol .= token.value
-                let state = 2
-                " Maybe end of token
-            endif
-        elseif state == 1
-            if token.kind == 'cppWord'
-                let szSymbol .= token.value
-                let state = 2
-                " Maybe end of token
-            else
-                " Error
-                break
-            endif
-        elseif state == 2
-            if token.value == '::'
-                let szSymbol .= token.value
-                let state = 1
-            else
-                break
-            endif
-        endif
-    endfor
-    return szSymbol
-endfunc
-
-" Search a declaration.
-" eg: std::map
-" can be empty
-" Note: The returned type info can be a typedef
-" The typedef resolution is done later
-" @return
-"   - a dictionnary where keys are
-"       - type: the type of value same as type()
-"       - value: the value
-function! s:GetTypeInfoOfVariable(contextStack, szVariable, bSearchDecl)
-    let result = {}
-
-    if a:bSearchDecl
-        " Search type of declaration
-        "let result = s:SearchTypeInfoOfDecl(a:szVariable)
-        let result = s:SearchDecl(a:szVariable)
-    endif
-
-    if result=={}
-        let szFilter = "index(['m', 'v'], v:val.kind[0])>=0"
-        let tagItem = s:ResolveSymbol(a:contextStack, a:szVariable, szFilter)
-        if tagItem=={}
-            return result
-        endif
-
-        let szCmdWithoutVariable = substitute(omni#cpp#utils#ExtractCmdFromTagItem(tagItem), '\C\<'.a:szVariable.'\>.*', '', 'g')
-        let tokens = omni#cpp#tokenizer#Tokenize(omni#cpp#utils#GetCodeFromLine(szCmdWithoutVariable))
-        let result = omni#cpp#utils#CreateTypeInfo(omni#cpp#utils#ExtractTypeInfoFromTokens(tokens))
-        " TODO: Namespace resolution for result
-
-        if result != {} && result.value==''
-            " result.value==''
-            " eg: 
-            " struct
-            " {
-            " }gVariable;
-            if has_key(tagItem, 'typeref')
-                " Maybe the variable is a global var of an
-                " unnamed class, struct or union.
-                " eg:
-                " 1)
-                " struct
-                " {
-                " }gVariable;
-                " In this case we need the tags (the patched version)
-                " Note: We can have a named type like this:
-                " 2)
-                " class A
-                " {
-                " }gVariable;
-                if s:IsUnnamedType(tagItem)
-                    " It's an unnamed type we are in the case 1)
-                    let result = omni#cpp#utils#CreateTypeInfo(tagItem)
-                else
-                    " It's not an unnamed type we are in the case 2)
-
-                    " eg: tagItem.typeref = 'struct:MY_STRUCT::MY_SUBSTRUCT'
-                    let szTypeRef = substitute(tagItem.typeref, '^\w\+:', '', '')
-
-                    " eg: szTypeRef = 'MY_STRUCT::MY_SUBSTRUCT'
-                    let result = omni#cpp#utils#CreateTypeInfo(szTypeRef)
-                endif
-            endif
-        endif
-    endif
-    return result
-endfunc
-
-" Get the type info string from the returned type of function
-function! s:GetTypeInfoOfReturnedType(contextStack, szFunctionName)
-    let result = {}
-
-    let szFilter = "index(['f', 'p'], v:val.kind[0])>=0"
-    let tagItem = s:ResolveSymbol(a:contextStack, a:szFunctionName, szFilter)
-
-    if tagItem != {}
-        let szCmdWithoutVariable = substitute(omni#cpp#utils#ExtractCmdFromTagItem(tagItem), '\C\<'.a:szFunctionName.'\>.*', '', 'g')
-        let tokens = omni#cpp#tokenizer#Tokenize(omni#cpp#utils#GetCodeFromLine(szCmdWithoutVariable))
-        let result = omni#cpp#utils#CreateTypeInfo(omni#cpp#utils#ExtractTypeInfoFromTokens(tokens))
-        " TODO: Namespace resolution for result
-        return result
-    endif
-    return result
-endfunc
-
-" Resolve a symbol, return a tagItem
-" Gets the first symbol found in the context stack
-function! s:ResolveSymbol(contextStack, szSymbol, szTagFilter)
-    let tagItem = {}
-    for szCurrentContext in a:contextStack
-        if szCurrentContext != '::'
-            let szTagQuery = substitute(szCurrentContext, '^::', '', 'g').'::'.a:szSymbol
-        else
-            let szTagQuery = a:szSymbol
-        endif
-
-        let tagList = omni#common#utils#TagListNoThrow('^'.szTagQuery.'$')
-        call filter(tagList, a:szTagFilter)
-        if len(tagList)
-            let tagItem = tagList[0]
-            break
-        endif
-    endfor
-    return tagItem
-endfunc
-
-" Return if the tag item represent an unnamed type
-function! s:IsUnnamedType(tagItem)
-    let bResult = 0
-    if has_key(a:tagItem, 'typeref')
-        " Note: Thanks for __anon !
-        let bResult = match(a:tagItem.typeref, '\C\<__anon') >= 0
-    endif
-    return bResult
-endfunc
-
-" Search the declaration of a variable and return the type info
-function! s:SearchTypeInfoOfDecl(szVariable)
-    let szReVariable = '\C\<'.a:szVariable.'\>'
-
-    let originalPos = getpos('.')
-    let origPos = originalPos[1:2]
-    let curPos = origPos
-    let stopPos = origPos
-    
-    while curPos !=[0,0]
-        " We go to the start of the current scope
-        let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments)
-        if curPos != [0,0]
-            let matchPos = curPos
-            " Now want to search our variable but we don't want to go in child
-            " scope
-            while matchPos != [0,0]
-                let matchPos = searchpos('{\|'.szReVariable, 'W', stopPos[0])
-                if matchPos != [0,0]
-                    " We ignore matches under comment
-                    if omni#cpp#utils#IsCursorInCommentOrString()
-                        continue
-                    endif
-
-                    " Getting the current line
-                    let szLine = getline('.')
-                    if match(szLine, szReVariable)>=0
-                        " We found our variable
-                        " Check if the current instruction is a decl instruction
-                        let tokens = omni#cpp#utils#TokenizeCurrentInstruction()
-                        let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens)
-                        if szTypeInfo != ''
-                            call setpos('.', originalPos)
-                            return omni#cpp#utils#CreateTypeInfo(szTypeInfo)
-                        endif
-                    else
-                        " We found a child scope, we don't want to go in, thus
-                        " we search for the end } of this child scope
-                        let bracketEnd = searchpairpos('{', '', '}', 'nW', g:omni#cpp#utils#expIgnoreComments)
-                        if bracketEnd == [0,0]
-                            break
-                        endif
-
-                        if bracketEnd[0] >= stopPos[0]
-                            " The end of the scope is after our cursor we stop
-                            " the search
-                            break
-                        else
-                            " We move the cursor and continue to search our
-                            " variable
-                            call setpos('.', [0, bracketEnd[0], bracketEnd[1], 0])
-                        endif
-                    endif
-                endif
-            endwhile
-
-            " Backing to the start of the scope
-            call setpos('.', [0,curPos[0], curPos[1], 0])
-            let stopPos = curPos
-        endif
-    endwhile
-
-    let result = {}
-    if s:LocalSearchDecl(a:szVariable)==0 && !omni#cpp#utils#IsCursorInCommentOrString()
-        let tokens = omni#cpp#utils#TokenizeCurrentInstruction()
-        let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens)
-        if szTypeInfo != ''
-            let result = omni#cpp#utils#CreateTypeInfo(szTypeInfo)
-        endif
-    endif
-
-    call setpos('.', originalPos)
-
-    return result
-endfunc
-
-" Search a declaration
-" @return
-"   - tokens of the current instruction if success
-"   - empty list if failure
-function! s:SearchDecl(szVariable)
-    let result = {}
-    let originalPos = getpos('.')
-    let searchResult = s:LocalSearchDecl(a:szVariable)
-    if searchResult==0
-        " searchdecl() may detect a decl if the variable is in a conditional
-        " instruction (if, elseif, while etc...)
-        " We have to check if the detected decl is really a decl instruction
-        let tokens = omni#cpp#utils#TokenizeCurrentInstruction()
-
-        for token in tokens
-            " Simple test
-            if index(['if', 'elseif', 'while', 'for', 'switch'], token.value)>=0
-                " Invalid declaration instruction
-                call setpos('.', originalPos)
-                return result
-            endif
-        endfor
-
-        let szTypeInfo = s:ExtractTypeInfoFromDecl(tokens)
-        if szTypeInfo != ''
-            let result = omni#cpp#utils#CreateTypeInfo(szTypeInfo)
-        endif
-    endif
-    call setpos('.', originalPos)
-    return result
-endfunc
-
-" Extract the type info string from an instruction.
-" We use a small parser to extract the type
-" We parse the code according to a C++ BNF from: http://www.nongnu.org/hcb/#basic.link
-" @param tokens: token list of the current instruction
-function! s:ExtractTypeInfoFromDecl(tokens)
-    return omni#cpp#utils#ExtractTypeInfoFromTokens(a:tokens)
-endfunc
-
-" Convert tokens to string
-function! s:TokensToString(tokens)
-    let result = ''
-    for token in a:tokens
-        let result = result . token.value . ' '
-    endfor
-    return result[:-2]
-endfunc
-
-" Resolve a cast.
-" Resolve a C++ cast
-" @param list of token. tokens must be a list that represents
-" a cast expression (C++ cast) the function does not control
-" if it's a cast or not
-" eg: static_cast<MyClass*>(something)
-" @return type info string
-function! s:ResolveCppCast(tokens)
-    return omni#cpp#utils#ExtractTypeInfoFromTokens(s:ResolveCast(a:tokens, '<', '>'))
-endfunc
-
-" Resolve a cast.
-" Resolve a C cast
-" @param list of token. tokens must be a list that represents
-" a cast expression (C cast) the function does not control
-" if it's a cast or not
-" eg: (MyClass*)something
-" @return type info string
-function! s:ResolveCCast(tokens)
-    return omni#cpp#utils#ExtractTypeInfoFromTokens(s:ResolveCast(a:tokens, '(', ')'))
-endfunc
-
-" Resolve a cast.
-" Resolve a C cast
-" @param list of token. tokens must be a list that represents
-" a cast expression (C cast) the function does not control
-" if it's a cast or not
-" eg: (MyClass*)something
-" @return type tokens
-function! s:ResolveCast(tokens, startChar, endChar)
-    let tokens = omni#cpp#utils#BuildParenthesisGroups(a:tokens)
-
-    " We remove useless parenthesis eg: (((MyClass)))
-    let tokens = omni#cpp#utils#SimplifyParenthesis(tokens)
-
-    let countItem=0
-    let startIndex = -1
-    let endIndex = -1 
-    let i = 0
-    for token in tokens
-        if startIndex==-1
-            if token.value==a:startChar
-                let countItem += 1
-                let startIndex = i
-            endif
-        else
-            if token.value==a:startChar
-                let countItem += 1
-            elseif token.value==a:endChar
-                let countItem -= 1
-            endif
-
-            if countItem==0
-                let endIndex = i
-                break
-            endif
-        endif
-        let i+=1
-    endfor
-
-    return tokens[startIndex+1 : endIndex-1]
-endfunc
-
-" Replacement for build-in function 'searchdecl'
-" It does not require that the upper-level bracket is in the first column.
-" Otherwise it should be equal to 'searchdecl(name, 0, 1)'
-" @param name: name of variable to find declaration for
-function! s:LocalSearchDecl(name)
-
-    if g:OmniCpp_LocalSearchDecl == 0
-        let bUserIgnoreCase = &ignorecase
-
-        " Forcing the noignorecase option
-        " avoid bug when, for example, if we have a declaration like this : "A a;"
-        set noignorecase
-
-        let result = searchdecl(a:name, 0, 1)
-
-        " Restoring user's setting
-        let &ignorecase = bUserIgnoreCase
-
-        return result
-    endif
-
-    let lastpos = getpos('.')
-    let winview = winsaveview()
-    let lastfoldenable = &foldenable
-    let &foldenable = 0
-
-    " We add \C (noignorecase) to 
-    " avoid bug when, for example, if we have a declaration like this : "A a;"
-    let varname = "\\C\\<" . a:name . "\\>"
-
-    " Go to first blank line before begin of highest scope
-    normal 99[{
-    let scopepos = getpos('.')
-    while (line('.') > 1) && (len(split(getline('.'))) > 0)
-        call cursor(line('.')-1, 0)
-    endwhile
-
-    let declpos = [ 0, 0, 0, 0 ]
-    while search(varname, '', scopepos[1]) > 0
-        " Check if we are a string or a comment
-        if omni#cpp#utils#IsCursorInCommentOrString()
-            continue
-        endif
-
-        " Remember match
-        let declpos = getpos('.')
-    endwhile
-    if declpos[1] != 0
-        " We found a match
-        call winrestview(winview)
-        call setpos('.', declpos)
-        let &foldenable = lastfoldenable
-        return 0
-    endif
-
-    while search(varname, '', lastpos[1]) > 0
-        " Check if current scope is ending before variable
-        let old_cur = getpos('.')
-        normal ]}
-        let new_cur = getpos('.')
-        call setpos('.', old_cur)
-        if (new_cur[1] < lastpos[1]) || ((new_cur[1] == lastpos[1]) && (new_cur[2] < lastpos[2]))
-          continue
-        endif
-
-        " Check if we are a string or a comment
-        if omni#cpp#utils#IsCursorInCommentOrString()
-          continue
-        endif
-
-        " We found match
-        call winrestview(winview)
-        call setpos('.', old_cur)
-        let &foldenable = lastfoldenable
-        return 0
-    endwhile
-
-    " No match found.
-    call winrestview(winview)
-    let &foldenable = lastfoldenable
-    return 1
-endfunc

autoload/omni/cpp/maycomplete.vim

-" Description: Omni completion script for cpp files
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-" Check if we can use omni completion in the current buffer
-function! s:CanUseOmnicompletion()
-    " For C and C++ files and only if the omnifunc is omni#cpp#complete#Main
-    return (index(['c', 'cpp'], &filetype)>=0 && &omnifunc == 'omni#cpp#complete#Main' && !omni#cpp#utils#IsCursorInCommentOrString())
-endfunc
-
-" Return the mapping of omni completion
-function! omni#cpp#maycomplete#Complete()
-    let szOmniMapping = "\<C-X>\<C-O>"
-
-    "   0 = don't select first item
-    "   1 = select first item (inserting it to the text, default vim behaviour)
-    "   2 = select first item (without inserting it to the text)
-    if g:OmniCpp_SelectFirstItem == 0
-        " We have to force the menuone option to avoid confusion when there is
-        " only one popup item
-        set completeopt-=menu
-        set completeopt+=menuone
-        let szOmniMapping .= "\<C-P>"
-    elseif g:OmniCpp_SelectFirstItem == 2
-        " We have to force the menuone option to avoid confusion when there is
-        " only one popup item
-        set completeopt-=menu
-        set completeopt+=menuone
-        let szOmniMapping .= "\<C-P>"
-        let szOmniMapping .= "\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
-    endif
-    return szOmniMapping
-endfunc
-
-" May complete function for dot
-function! omni#cpp#maycomplete#Dot()
-    if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteDot
-        let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction('.'))
-        if len(g:omni#cpp#items#data)
-            let s:bMayComplete = 1
-            return '.' . omni#cpp#maycomplete#Complete()
-        endif
-    endif
-    return '.'
-endfunc
-" May complete function for arrow
-function! omni#cpp#maycomplete#Arrow()
-    if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteArrow
-        let index = col('.') - 2
-        if index >= 0
-            let char = getline('.')[index]
-            if char == '-'
-                let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction('>'))
-                if len(g:omni#cpp#items#data)
-                    let s:bMayComplete = 1
-                    return '>' . omni#cpp#maycomplete#Complete()
-                endif
-            endif
-        endif
-    endif
-    return '>'
-endfunc
-
-" May complete function for double points
-function! omni#cpp#maycomplete#Scope()
-    if s:CanUseOmnicompletion() && g:OmniCpp_MayCompleteScope
-        let index = col('.') - 2
-        if index >= 0
-            let char = getline('.')[index]
-            if char == ':'
-                let g:omni#cpp#items#data = omni#cpp#items#Get(omni#cpp#utils#TokenizeCurrentInstruction(':'))
-                if len(g:omni#cpp#items#data)
-                    if len(g:omni#cpp#items#data[-1].tokens) && g:omni#cpp#items#data[-1].tokens[-1].value != '::'
-                        let s:bMayComplete = 1
-                        return ':' . omni#cpp#maycomplete#Complete()
-                    endif
-                endif
-            endif
-        endif
-    endif
-    return ':'
-endfunc

autoload/omni/cpp/namespaces.vim

-" Description: Omni completion script for cpp files
-" Maintainer:  Vissale NEANG
-" Last Change: 26 sept. 2007
-
-let g:omni#cpp#namespaces#CacheResolve = {}
-let g:omni#cpp#namespaces#CacheUsing = {}
-" TODO: For the next release
-"let g:omni#cpp#namespaces#CacheAlias = {}
-
-" Get the using namespace list from a line
-function! s:GetNamespaceAliasListFromLine(szLine)
-    let result = {}
-    let tokens = omni#cpp#tokenizer#Tokenize(a:szLine)
-    let szAlias = ''
-    let szNamespace = ''
-    let state = 0
-    for token in tokens
-        if state==0
-            let szAlias = ''
-            let szNamespace = ''
-            if token.value == '/*'
-                let state = 1
-            elseif token.value == '//'
-                " It's a comment
-                let state = -1
-                break
-            elseif token.value == 'namespace'
-                let state = 2
-            endif
-        elseif state==1
-            if token.value == '*/'
-                let state=0
-            endif
-        elseif state==2
-            if token.kind == 'cppWord'
-                let szAlias .= token.value
-                let state = 3
-            else
-                let state = -1
-                break
-            endif
-        elseif state == 3
-            if token.value == '='
-                let state = 4
-            else
-                let state = -1
-                break
-            endif
-        elseif state == 4
-            if token.value == '::'
-                let szNamespace .= token.value
-                let state = 5
-            elseif token.kind == 'cppWord'
-                let szNamespace .= token.value
-                let state = 6
-                " Maybe end of tokens
-            endif
-        elseif state==5
-            if token.kind == 'cppWord'
-                let szNamespace .= token.value
-                let state = 6
-                " Maybe end of tokens
-            else
-                " Error, we can't have 'namespace ALIAS = Something::'
-                let state = -1
-                break
-            endif
-        elseif state==6
-            if token.value == '::'
-                let szNamespace .= token.value
-                let state = 5
-            else
-                call extend(result, {szAlias : szNamespace})
-                let state = 0
-            endif
-        endif
-    endfor
-
-    if state == 6
-        call extend(result, {szAlias : szNamespace})
-    endif
-
-    return result
-endfunc
-
-" Get the using namespace list from a line
-function! s:GetNamespaceListFromLine(szLine)
-    let result = []
-    let tokens = omni#cpp#tokenizer#Tokenize(a:szLine)
-    let szNamespace = ''
-    let state = 0
-    for token in tokens
-        if state==0
-            let szNamespace = ''
-            if token.value == '/*'
-                let state = 1
-            elseif token.value == '//'
-                " It's a comment
-                let state = -1
-                break
-            elseif token.value == 'using'
-                let state = 2
-            endif
-        elseif state==1
-            if token.value == '*/'
-                let state=0
-            endif
-        elseif state==2
-            if token.value == 'namespace'
-                let state = 3
-            else
-                " Error, 'using' must be followed by 'namespace'
-                let state = -1
-                break
-            endif
-        elseif state==3
-            if token.value == '::'
-                let szNamespace .= token.value
-                let state = 4
-            elseif token.kind == 'cppWord'
-                let szNamespace .= token.value
-                let state = 5
-                " Maybe end of tokens
-            endif
-        elseif state==4
-            if token.kind == 'cppWord'
-                let szNamespace .= token.value
-                let state = 5
-                " Maybe end of tokens
-            else
-                " Error, we can't have 'using namespace Something::'
-                let state = -1
-                break
-            endif
-        elseif state==5
-            if token.value == '::'
-                let szNamespace .= token.value
-                let state = 4
-            else
-                call extend(result, [szNamespace])
-                let state = 0
-            endif
-        endif
-    endfor
-
-    if state == 5
-        call extend(result, [szNamespace])
-    endif
-
-    return result
-endfunc
-
-" Get the namespace list from a namespace map
-function! s:GetUsingNamespaceListFromMap(namespaceMap, ...)
-    let stopLine = 0
-    if a:0>0
-        let stopLine = a:1
-    endif
-
-    let result = []
-    let keys = sort(keys(a:namespaceMap), 'omni#common#utils#CompareNumber')
-    for i in keys
-        if stopLine != 0 && i > stopLine
-            break
-        endif
-        call extend(result, a:namespaceMap[i])
-    endfor
-    return result
-endfunc
-
-" Get global using namespace list from the current buffer
-function! omni#cpp#namespaces#GetListFromCurrentBuffer(...)
-    let namespaceMap = s:GetAllUsingNamespaceMapFromCurrentBuffer()
-    let result = []
-    if namespaceMap != {}
-        let result = s:GetUsingNamespaceListFromMap(namespaceMap, (a:0 > 0)? a:1 : line('.'))
-    endif
-    return result
-endfunc
-
-" Get global using namespace map from the current buffer and include files recursively
-function! s:GetAllUsingNamespaceMapFromCurrentBuffer(...)
-    let includeGuard = (a:0>0)? a:1 : {}
-
-    let szBufferName = getreg("%")
-    let szFilePath = omni#cpp#utils#ResolveFilePath(szBufferName)
-    let szFilePath = (szFilePath=='')? szBufferName : szFilePath
-
-    let namespaceMap = {}
-    if has_key(includeGuard, szFilePath)
-        return namespaceMap
-    else
-        let includeGuard[szFilePath] = 1
-    endif
-
-    let namespaceMap = omni#cpp#namespaces#GetMapFromCurrentBuffer()
-
-    if g:OmniCpp_NamespaceSearch != 2
-        " We don't search included files if OmniCpp_NamespaceSearch != 2
-        return namespaceMap
-    endif
-
-    for inc in omni#cpp#includes#GetList()
-        let lnum = inc.pos[0]
-        let tmpMap = s:GetAllUsingNamespaceMapFromFile(inc.include, includeGuard)
-        if tmpMap != {}
-            if has_key(namespaceMap, lnum)
-                call extend(namespaceMap[lnum], s:GetUsingNamespaceListFromMap(tmpMap))
-            else
-                let namespaceMap[lnum] = s:GetUsingNamespaceListFromMap(tmpMap)
-            endif
-        endif
-    endfor
-
-    return namespaceMap
-endfunc
-
-" Get global using namespace map from a file and include files recursively
-function! s:GetAllUsingNamespaceMapFromFile(szFilePath, ...)
-    let includeGuard = {}
-    if a:0 >0
-        let includeGuard = a:1
-    endif
-
-    let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath)
-    let szFilePath = (szFilePath=='')? a:szFilePath : szFilePath
-
-    let namespaceMap = {}
-    if has_key(includeGuard, szFilePath)
-        return namespaceMap
-    else
-        let includeGuard[szFilePath] = 1
-    endif
-
-    " If g:OmniCpp_NamespaceSearch == 1 (search namespaces only in the current
-    " buffer) we don't use cache for the current buffer
-    let namespaceMap = omni#cpp#namespaces#GetMapFromBuffer(szFilePath, g:OmniCpp_NamespaceSearch==1)
-
-    if g:OmniCpp_NamespaceSearch != 2
-        " We don't search included files if OmniCpp_NamespaceSearch != 2
-        return namespaceMap
-    endif
-
-    for inc in omni#cpp#includes#GetList(szFilePath)
-        let lnum = inc.pos[0]
-        let tmpMap = s:GetAllUsingNamespaceMapFromFile(inc.include, includeGuard)
-        if tmpMap != {}
-            if has_key(namespaceMap, lnum)
-                call extend(namespaceMap[lnum], s:GetUsingNamespaceListFromMap(tmpMap))
-            else
-                let namespaceMap[lnum] = s:GetUsingNamespaceListFromMap(tmpMap)
-            endif
-        endif
-    endfor
-
-    return namespaceMap
-endfunc
-
-" Get global using namespace map from a the current buffer
-function! omni#cpp#namespaces#GetMapFromCurrentBuffer()
-    let namespaceMap = {}
-    let originalPos = getpos('.')
-
-    call setpos('.', [0, 1, 1, 0])
-    let curPos = [1,1]
-    while curPos != [0,0]
-        let curPos = searchpos('\C^using\s\+namespace', 'W')
-        if curPos != [0,0]
-            let szLine = getline('.')
-            let startPos = curPos[1]
-            let endPos = match(szLine, ';', startPos-1)
-            if endPos!=-1
-                " We get the namespace list from the line
-                let namespaceMap[curPos[0]] = s:GetNamespaceListFromLine(szLine)
-            endif
-        endif
-    endwhile
-
-    call setpos('.', originalPos)
-    return namespaceMap
-endfunc
-
-" Get global using namespace map from a file
-function! omni#cpp#namespaces#GetMapFromBuffer(szFilePath, ...)
-    let bUpdate = 0
-    if a:0 > 0
-        let bUpdate = a:1
-    endif
-
-    let szFilePath = omni#cpp#utils#ResolveFilePath(a:szFilePath)
-    let szFilePath = (szFilePath=='')? a:szFilePath : szFilePath
-
-    if !bUpdate && has_key(g:omni#cpp#namespaces#CacheUsing, szFilePath)
-        return copy(g:omni#cpp#namespaces#CacheUsing[szFilePath])
-    endif
-
-    let namespaceMap = {}
-    " The file exists, we get the global namespaces in this file
-    let szFixedPath = escape(szFilePath, g:omni#cpp#utils#szEscapedCharacters)
-    execute 'silent! lvimgrep /\C^using\s\+namespace/gj '.szFixedPath
-
-    " key = line number
-    " value = list of namespaces
-    let listQuickFix = getloclist(0)
-    for qf in listQuickFix
-        let szLine = qf.text
-        let startPos = qf.col
-        let endPos = match(szLine, ';', startPos-1)
-        if endPos!=-1
-            " We get the namespace list from the line
-            let namespaceMap[qf.lnum] = s:GetNamespaceListFromLine(szLine)
-        endif
-    endfor
-
-    if szFixedPath != ''
-        let g:omni#cpp#namespaces#CacheUsing[szFixedPath] = namespaceMap
-    endif
-
-    return copy(namespaceMap)
-endfunc
-
-" Get the stop position when searching for local variables
-function! s:GetStopPositionForLocalSearch()
-    " Stop position when searching a local variable
-    let originalPos = getpos('.')
-    let origPos = originalPos[1:2]
-    let stopPosition = origPos
-    let curPos = origPos
-    while curPos !=[0,0]
-        let stopPosition = curPos
-        let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments)
-    endwhile
-    call setpos('.', originalPos)
-
-    return stopPosition
-endfunc
-
-" Get namespaces alias used at the cursor postion in a vim buffer
-" Note: The result depends on the current cursor position
-" @return
-"   -   Map of namespace alias
-function! s:GetNamespaceAliasMap()
-    " We store the cursor position because searchpairpos() moves the cursor
-    let result = {}
-    let originalPos = getpos('.')
-    let origPos = originalPos[1:2]
-
-    let stopPos = s:GetStopPositionForLocalSearch()
-    let stopLine = stopPos[0]
-    let curPos = origPos
-    let lastLine = 0 
-    let nextStopLine = origPos[0]
-    let szReAlias = '\Cnamespace\s\+\w\+\s\+='
-    while curPos !=[0,0]
-        let curPos = searchpos('}\|\('. szReAlias .'\)', 'bW',stopLine)
-        if curPos!=[0,0] && curPos[0]!=lastLine
-            let lastLine = curPos[0]
-
-            let szLine = getline('.')
-            if origPos[0] == curPos[0]
-                " We get the line until cursor position
-                let szLine = szLine[:origPos[1]]
-            endif
-
-            let szLine = omni#cpp#utils#GetCodeFromLine(szLine)
-            if match(szLine, szReAlias)<0
-                " We found a '}'
-                let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments)
-            else
-                " We get the namespace alias from the line
-                call extend(result, s:GetNamespaceAliasListFromLine(szLine))
-                let nextStopLine = curPos[0]
-            endif
-        endif
-    endwhile
-
-    " Setting the cursor to the original position
-    call setpos('.', originalPos)
-
-    call s:ResolveAliasKeys(result)
-    return result
-endfunc
-
-" Resolve an alias
-" eg: namespace IAmAnAlias1 = Ns1
-" eg: namespace IAmAnAlias2 = IAmAnAlias1::Ns2
-" => IAmAnAlias2 = Ns1::Ns2
-function! s:ResolveAliasKey(mapNamespaceAlias, szAlias)
-    let szResult = a:mapNamespaceAlias[a:szAlias]
-    " ::Ns1::Ns2::Ns3 => ['Ns1', 'Ns2', 'Ns3']
-    let listNamespace = split(szResult, '::')
-    if len(listNamespace)
-        " szBeginPart = 'Ns1'
-        let szBeginPart = remove(listNamespace, 0)
-
-        " Is 'Ns1' an alias ?
-        if has_key(a:mapNamespaceAlias, szBeginPart) && szBeginPart != a:szAlias
-            " Resolving alias 'Ns1'
-            " eg: Ns1 = NsResolved
-            let szResult = s:ResolveAliasKey(a:mapNamespaceAlias, szBeginPart)
-            " szEndPart = 'Ns2::Ns3'
-            let szEndPart = join(listNamespace, '::')
-            if szEndPart != ''
-                " Concatenation => szResult = 'NsResolved::Ns2::Ns3'
-                let szResult .= '::' . szEndPart
-            endif
-        endif
-    endif
-    return szResult
-endfunc
-
-" Resolve all keys in the namespace alias map
-function! s:ResolveAliasKeys(mapNamespaceAlias)
-    let mapNamespaceAlias = a:mapNamespaceAlias
-    call map(mapNamespaceAlias, 's:ResolveAliasKey(mapNamespaceAlias, v:key)')
-endfunc
-
-" Resolve namespace alias
-function! omni#cpp#namespaces#ResolveAlias(mapNamespaceAlias, szNamespace)
-    let szResult = a:szNamespace
-    " ::Ns1::Ns2::Ns3 => ['Ns1', 'Ns2', 'Ns3']
-    let listNamespace = split(a:szNamespace, '::')
-    if len(listNamespace)
-        " szBeginPart = 'Ns1'
-        let szBeginPart = remove(listNamespace, 0)
-
-        " Is 'Ns1' an alias ?
-        if has_key(a:mapNamespaceAlias, szBeginPart)
-            " Resolving alias 'Ns1'
-            " eg: Ns1 = NsResolved
-            let szResult = a:mapNamespaceAlias[szBeginPart]
-            " szEndPart = 'Ns2::Ns3'
-            let szEndPart = join(listNamespace, '::')
-            if szEndPart != ''
-                " Concatenation => szResult = 'NsResolved::Ns2::Ns3'
-                let szResult .= '::' . szEndPart
-            endif
-
-            " If a:szNamespace starts with '::' we add '::' to the beginning
-            " of the result
-            if match(a:szNamespace, '^::')>=0
-                let szResult = omni#cpp#utils#SimplifyScope('::' .  szResult)
-            endif
-        endif
-    endif
-    return szResult
-endfunc
-
-" Resolve namespace alias
-function! s:ResolveAliasInNamespaceList(mapNamespaceAlias, listNamespaces)
-    call map(a:listNamespaces, 'omni#cpp#namespaces#ResolveAlias(a:mapNamespaceAlias, v:val)')
-endfunc
-
-" Get namespaces used at the cursor postion in a vim buffer
-" Note: The result depends on the current cursor position
-" @return
-"   -   List of namespace used in the reverse order
-function! omni#cpp#namespaces#GetUsingNamespaces()
-    " We have to get local using namespace declarations
-    " We need the current cursor position and the position of the start of the
-    " current scope
-
-    " We store the cursor position because searchpairpos() moves the cursor
-    let result = []
-    let originalPos = getpos('.')
-    let origPos = originalPos[1:2]
-
-    let stopPos = s:GetStopPositionForLocalSearch()
-
-    let stopLine = stopPos[0]
-    let curPos = origPos
-    let lastLine = 0 
-    let nextStopLine = origPos[0]
-    while curPos !=[0,0]
-        let curPos = searchpos('\C}\|\(using\s\+namespace\)', 'bW',stopLine)
-        if curPos!=[0,0] && curPos[0]!=lastLine
-            let lastLine = curPos[0]
-
-            let szLine = getline('.')
-            if origPos[0] == curPos[0]
-                " We get the line until cursor position
-                let szLine = szLine[:origPos[1]]
-            endif
-
-            let szLine = omni#cpp#utils#GetCodeFromLine(szLine)
-            if match(szLine, '\Cusing\s\+namespace')<0
-                " We found a '}'
-                let curPos = searchpairpos('{', '', '}', 'bW', g:omni#cpp#utils#expIgnoreComments)
-            else
-                " We get the namespace list from the line
-                let result = s:GetNamespaceListFromLine(szLine) + result
-                let nextStopLine = curPos[0]
-            endif
-        endif
-    endwhile
-
-    " Setting the cursor to the original position
-    call setpos('.', originalPos)
-
-    " 2) Now we can get all global using namespace declaration from the
-    " beginning of the file to nextStopLine
-    let result = omni#cpp#namespaces#GetListFromCurrentBuffer(nextStopLine) + result
-
-    " Resolving alias in the namespace list
-    " TODO: For the next release
-    "let g:omni#cpp#namespaces#CacheAlias= s:GetNamespaceAliasMap()
-    "call s:ResolveAliasInNamespaceList(g:omni#cpp#namespaces#CacheAlias, result)
-
-    return ['::'] + result
-endfunc
-
-" Resolve a using namespace regarding the current context
-" For each namespace used:
-"   -   We get all possible contexts where the namespace
-"       can be define
-"   -   We do a comparison test of each parent contexts with the current
-"       context list</