Skip to content

Instantly share code, notes, and snippets.

@complex857
Created February 17, 2015 08:02
Show Gist options
  • Save complex857/a996fe343ec389c54076 to your computer and use it in GitHub Desktop.
Save complex857/a996fe343ec389c54076 to your computer and use it in GitHub Desktop.
Patch tryin' to fix phpcomplete while "set noequalalways"
commit 101e3f4f349c8fe08c45bba1c00fa60bc50b1520
Author: dudu <[email protected]>
Date: Tue Feb 17 08:54:30 2015 +0100
Add equalalways manipulation to fix running out of space issues
diff --git a/autoload/phpcomplete.vim b/autoload/phpcomplete.vim
index 2a1329a..8a72a7d 100644
--- a/autoload/phpcomplete.vim
+++ b/autoload/phpcomplete.vim
@@ -217,6 +217,9 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
call phpcomplete#LoadData()
endif
+ let b:saved_equalalways = &equalalways
+ set equalalways
+
" a:base is very short - we need context
if exists("b:compl_context")
let context = b:compl_context
@@ -229,67 +232,84 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.')))
- if context =~? '^use\s' || context ==? 'use'
- return phpcomplete#CompleteUse(a:base)
- endif
+ let completion_results = []
+ while 1
+ if context =~? '^use\s' || context ==? 'use'
+ let completion_results = phpcomplete#CompleteUse(a:base)
+ break
+ endif
- if context =~ '\(->\|::\)$'
- " {{{
- " Get name of the class
- let classname = phpcomplete#GetClassName(line('.'), context, current_namespace, imports)
+ if context =~ '\(->\|::\)$'
+ " {{{
+ " Get name of the class
+ let classname = phpcomplete#GetClassName(line('.'), context, current_namespace, imports)
- " Get location of class definition, we have to iterate through all
- if classname != ''
- if classname =~ '\'
- " split the last \ segment as a classname, everything else is the namespace
- let classname_parts = split(classname, '\')
- let namespace = join(classname_parts[0:-2], '\')
- let classname = classname_parts[-1]
+ " Get location of class definition, we have to iterate through all
+ if classname != ''
+ if classname =~ '\'
+ " split the last \ segment as a classname, everything else is the namespace
+ let classname_parts = split(classname, '\')
+ let namespace = join(classname_parts[0:-2], '\')
+ let classname = classname_parts[-1]
+ else
+ let namespace = '\'
+ endif
+ let classlocation = phpcomplete#GetClassLocation(classname, namespace)
else
- let namespace = '\'
+ let classlocation = ''
endif
- let classlocation = phpcomplete#GetClassLocation(classname, namespace)
- else
- let classlocation = ''
- endif
- if classlocation != ''
- if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname))
- return phpcomplete#CompleteBuiltInClass(context, classname, a:base)
- endif
+ if classlocation != ''
+ if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname))
+ return phpcomplete#CompleteBuiltInClass(context, classname, a:base)
+ endif
- if filereadable(classlocation)
- let classfile = readfile(classlocation)
- let classcontent = ''
- let classcontent .= "\n".phpcomplete#GetClassContents(classlocation, classname)
- let sccontent = split(classcontent, "\n")
- let visibility = expand('%:p') == fnamemodify(classlocation, ':p') ? 'private' : 'public'
+ if filereadable(classlocation)
+ let classfile = readfile(classlocation)
+ let classcontent = ''
+ let classcontent .= "\n".phpcomplete#GetClassContents(classlocation, classname)
+ let sccontent = split(classcontent, "\n")
+ let visibility = expand('%:p') == fnamemodify(classlocation, ':p') ? 'private' : 'public'
- return phpcomplete#CompleteUserClass(context, a:base, sccontent, visibility)
+ let completion_results = phpcomplete#CompleteUserClass(context, a:base, sccontent, visibility)
+ break
+ endif
endif
+
+ let completion_results = phpcomplete#CompleteUnknownClass(a:base, context)
+ break
+ " }}}
+ elseif context =~? 'implements'
+ let completion_results = phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports)
+ elseif context =~? 'extends\s\+.\+$' && a:base == ''
+ let completion_results = ['implements']
+ elseif context =~? 'extends'
+ let kinds = context =~? 'class\s' ? ['c'] : ['i']
+ let completion_results = phpcomplete#CompleteClassName(a:base, kinds, current_namespace, imports)
+ elseif context =~? 'class [a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*'
+ " special case when you've typed the class keyword and the name too, only extends and implements allowed there
+ return filter(['extends', 'implements'], 'stridx(v:val, a:base) == 0')
+ elseif context =~? 'new'
+ let completion_results = phpcomplete#CompleteClassName(a:base, ['c'], current_namespace, imports)
+ endif
+
+ if a:base =~ '^\$'
+ let completion_results = phpcomplete#CompleteVariable(a:base)
+ else
+ let completion_results = phpcomplete#CompleteGeneral(a:base, current_namespace, imports)
endif
- return phpcomplete#CompleteUnknownClass(a:base, context)
- " }}}
- elseif context =~? 'implements'
- return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports)
- elseif context =~? 'extends\s\+.\+$' && a:base == ''
- return ['implements']
- elseif context =~? 'extends'
- let kinds = context =~? 'class\s' ? ['c'] : ['i']
- return phpcomplete#CompleteClassName(a:base, kinds, current_namespace, imports)
- elseif context =~? 'class [a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*'
- " special case when you've typed the class keyword and the name too, only extends and implements allowed there
- return filter(['extends', 'implements'], 'stridx(v:val, a:base) == 0')
- elseif context =~? 'new'
- return phpcomplete#CompleteClassName(a:base, ['c'], current_namespace, imports)
- endif
+ break
+ endwhile
- if a:base =~ '^\$'
- return phpcomplete#CompleteVariable(a:base)
- else
- return phpcomplete#CompleteGeneral(a:base, current_namespace, imports)
+ if exists('b:saved_equalalways')
+ if b:saved_equalalways == 0
+ set noequalalways
+ endif
+ unlet! b:saved_equalalways
endif
+
+ return completion_results
endfunction
" }}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment