1
0
forked from aniani/vim

Update a few runtime files.

This commit is contained in:
Bram Moolenaar
2015-03-02 23:16:07 +01:00
parent 2b8388bd01
commit f3c2afb77f
4 changed files with 209 additions and 71 deletions

View File

@@ -3,7 +3,7 @@
" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com ) " Maintainer: Dávid Szabó ( complex857 AT gmail DOT com )
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
" URL: https://github.com/shawncplus/phpcomplete.vim " URL: https://github.com/shawncplus/phpcomplete.vim
" Last Change: 2014 Dec 01 " Last Change: 2015 Feb 28
" "
" OPTIONS: " OPTIONS:
" "
@@ -145,7 +145,7 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.'))) let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.')))
if context =~? '^use\s' if context =~? '^use\s' || context ==? 'use'
return phpcomplete#CompleteUse(a:base) return phpcomplete#CompleteUse(a:base)
endif endif
@@ -189,7 +189,7 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
" }}} " }}}
elseif context =~? 'implements' elseif context =~? 'implements'
return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports) return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports)
elseif context =~? 'extends\s\+.\+$' elseif context =~? 'extends\s\+.\+$' && a:base == ''
return ['implements'] return ['implements']
elseif context =~? 'extends' elseif context =~? 'extends'
let kinds = context =~? 'class\s' ? ['c'] : ['i'] let kinds = context =~? 'class\s' ? ['c'] : ['i']
@@ -244,12 +244,13 @@ function! phpcomplete#CompleteUse(base) " {{{
if has_key(tag, 'namespace') if has_key(tag, 'namespace')
let patched_ctags_detected = 1 let patched_ctags_detected = 1
endif endif
if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern
let patched_ctags_detected = 1 let patched_ctags_detected = 1
call add(namespaced_matches, {'word': tag.name, 'kind': 'n', 'menu': tag.filename, 'info': tag.filename }) call add(namespaced_matches, {'word': tag.name, 'kind': 'n', 'menu': tag.filename, 'info': tag.filename })
elseif has_key(tag, 'namespace') && (tag.kind ==? 'c' || tag.kind ==? 'i') && tag.namespace ==? namespace_for_class elseif has_key(tag, 'namespace') && (tag.kind ==? 'c' || tag.kind ==? 'i' || tag.kind ==? 't') && tag.namespace ==? namespace_for_class
call add(namespaced_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) call add(namespaced_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename })
elseif (tag.kind ==? 'c' || tag.kind ==? 'i') elseif (tag.kind ==? 'c' || tag.kind ==? 'i' || tag.kind ==? 't')
call add(no_namespace_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) call add(no_namespace_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename })
endif endif
endfor endfor
@@ -272,6 +273,10 @@ function! phpcomplete#CompleteUse(base) " {{{
endfor endfor
endif endif
for comp in res
let comp.word = substitute(comp.word, '^\\', '', '')
endfor
return res return res
endfunction endfunction
" }}} " }}}
@@ -326,6 +331,7 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
let ext_functions = {} let ext_functions = {}
let ext_constants = {} let ext_constants = {}
let ext_classes = {} let ext_classes = {}
let ext_traits = {}
let ext_interfaces = {} let ext_interfaces = {}
let ext_namespaces = {} let ext_namespaces = {}
@@ -420,7 +426,7 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
endif endif
endif endif
endif endif
elseif tag.kind ==? 'c' || tag.kind ==? 'i' elseif tag.kind ==? 'c' || tag.kind ==? 'i' || tag.kind ==? 't'
let info = ' - '.tag.filename let info = ' - '.tag.filename
let key = '' let key = ''
@@ -441,6 +447,8 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
let ext_classes[key] = info let ext_classes[key] = info
elseif tag.kind ==? 'i' elseif tag.kind ==? 'i'
let ext_interfaces[key] = info let ext_interfaces[key] = info
elseif tag.kind ==? 't'
let ext_traits[key] = info
endif endif
endif endif
endif endif
@@ -463,7 +471,7 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
endfor endfor
for [interfacename, info] in items(g:php_builtin_interfacenames) for [interfacename, info] in items(g:php_builtin_interfacenames)
if interfacename =~? '^'.base if interfacename =~? '^'.base
let builtin_interfaces[leading_slash.interfacename] = info let builtin_interfaces[leading_slash.g:php_builtin_interfaces[tolower(interfacename)].name] = info
endif endif
endfor endfor
endif endif
@@ -511,6 +519,8 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
else else
let ext_interfaces[imported_name] = ' '.import.name.' - '.import.filename let ext_interfaces[imported_name] = ' '.import.name.' - '.import.filename
endif endif
elseif import.kind ==? 't'
let ext_traits[imported_name] = ' '.import.name.' - '.import.filename
endif endif
" no builtin interfaces " no builtin interfaces
@@ -540,6 +550,9 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
" Add external interfaces " Add external interfaces
call extend(all_values, ext_interfaces) call extend(all_values, ext_interfaces)
" Add external traits
call extend(all_values, ext_traits)
" Add built-in classes " Add built-in classes
call extend(all_values, builtin_classnames) call extend(all_values, builtin_classnames)
@@ -566,6 +579,8 @@ function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{
elseif has_key(ext_interfaces, i) || has_key(builtin_interfaces, i) elseif has_key(ext_interfaces, i) || has_key(builtin_interfaces, i)
let info = has_key(ext_interfaces, i) ? ext_interfaces[i] : builtin_interfaces[i].' - builtin' let info = has_key(ext_interfaces, i) ? ext_interfaces[i] : builtin_interfaces[i].' - builtin'
let final_list += [{'word':i, 'kind': 'i', 'menu': info, 'info': i.info}] let final_list += [{'word':i, 'kind': 'i', 'menu': info, 'info': i.info}]
elseif has_key(ext_traits, i)
let final_list += [{'word':i, 'kind': 't', 'menu': ext_traits[i], 'info': ext_traits[i]}]
elseif has_key(int_constants, i) || has_key(builtin_constants, i) elseif has_key(int_constants, i) || has_key(builtin_constants, i)
let info = has_key(int_constants, i) ? int_constants[i] : ' - builtin' let info = has_key(int_constants, i) ? int_constants[i] : ' - builtin'
let final_list += [{'word':i, 'kind': 'd', 'menu': info, 'info': i.info}] let final_list += [{'word':i, 'kind': 'd', 'menu': info, 'info': i.info}]
@@ -784,7 +799,7 @@ function! phpcomplete#CompleteClassName(base, kinds, current_namespace, imports)
let tags = [] let tags = []
if len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion if len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion
let tags = phpcomplete#GetTaglist('^'.tag_match_pattern) let tags = phpcomplete#GetTaglist('^\c'.tag_match_pattern)
endif endif
if len(tags) if len(tags)
@@ -861,6 +876,39 @@ function! phpcomplete#CompareCompletionRow(i1, i2) " {{{
endfunction endfunction
" }}} " }}}
function! s:getNextCharWithPos(filelines, current_pos) " {{{
let line_no = a:current_pos[0]
let col_no = a:current_pos[1]
let last_line = a:filelines[len(a:filelines) - 1]
let end_pos = [len(a:filelines) - 1, strlen(last_line) - 1]
if line_no > end_pos[0] || line_no == end_pos[0] && col_no > end_pos[1]
return ['EOF', 'EOF']
endif
" we've not reached the end of the current line break
if col_no + 1 < strlen(a:filelines[line_no])
let col_no += 1
else
" we've reached the end of the current line, jump to the next
" non-blank line (blank lines have no position where we can read from,
" not even a whitespace. The newline char does not positionable by vim
let line_no += 1
while strlen(a:filelines[line_no]) == 0
let line_no += 1
endwhile
let col_no = 0
endif
" return 'EOF' string to signal end of file, normal results only one char
" in length
if line_no == end_pos[0] && col_no > end_pos[1]
return ['EOF', 'EOF']
endif
return [[line_no, col_no], a:filelines[line_no][col_no]]
endfunction " }}}
function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) " {{{ function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) " {{{
" if theres no modifier, and no modifier is allowed and no modifier is required " if theres no modifier, and no modifier is allowed and no modifier is required
if len(a:modifiers) == 0 && len(a:required_modifiers) == 0 if len(a:modifiers) == 0 && len(a:required_modifiers) == 0
@@ -1602,26 +1650,26 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
endif endif
endif endif
" in-file lookup for typehinted function arguments " function declaration line
" - the function can have a name or be anonymous (e.g., function qux() { ... } vs. function () { ... }) if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*('
" - the type-hinted argument can be anywhere in the arguments list. let function_lines = join(reverse(lines), " ")
if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.class_name_pattern.'\s\+'.object && !object_is_array " search for type hinted arguments
let f_args = matchstr(line, '\cfunction\(\s\+'.function_name_pattern.'\)\?\s*(\zs.\{-}\ze)') if function_lines =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.class_name_pattern.'\s\+'.object && !object_is_array
let args = split(f_args, '\s*\zs,\ze\s*') let f_args = matchstr(function_lines, '\cfunction\(\s\+'.function_name_pattern.'\)\?\s*(\zs.\{-}\ze)')
for arg in args let args = split(f_args, '\s*\zs,\ze\s*')
if arg =~# object.'\(,\|$\)' for arg in args
let classname_candidate = matchstr(arg, '\s*\zs'.class_name_pattern.'\ze\s\+'.object) if arg =~# object.'\(,\|$\)'
let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) let classname_candidate = matchstr(arg, '\s*\zs'.class_name_pattern.'\ze\s\+'.object)
let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports)
break
endif
endfor
if classname_candidate != ''
break break
endif endif
endfor
if classname_candidate != ''
break
endif endif
endif
" if we see a function declaration, try loading the docblock for it and look for matching @params " search for docblock for the function
if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.object
let match_line = substitute(line, '\\', '\\\\', 'g') let match_line = substitute(line, '\\', '\\\\', 'g')
let sccontent = getline(0, a:start_line - i) let sccontent = getline(0, a:start_line - i)
let doc_str = phpcomplete#GetDocBlock(sccontent, match_line) let doc_str = phpcomplete#GetDocBlock(sccontent, match_line)
@@ -1641,13 +1689,14 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
endif endif
" assignment for the variable in question with a variable on the right hand side " assignment for the variable in question with a variable on the right hand side
if line =~# '^\s*'.object.'\s*=&\?\s*'.variable_name_pattern if line =~# '^\s*'.object.'\s*=&\?\s\+\(clone\)\?\s*'.variable_name_pattern
" try to find the next non-comment or string ";" char " try to find the next non-comment or string ";" char
let start_col = match(line, '^\s*'.object.'\C\s*=\zs&\?\s*'.variable_name_pattern) let start_col = match(line, '^\s*'.object.'\C\s*=\zs&\?\s\+\(clone\)\?\s*'.variable_name_pattern)
let filelines = reverse(lines) let filelines = reverse(lines)
let [pos, char] = s:getNextCharWithPos(filelines, [a:start_line - i - 1, start_col]) let [pos, char] = s:getNextCharWithPos(filelines, [a:start_line - i - 1, start_col])
let chars_read = 1 let chars_read = 1
let last_pos = pos
" read while end of the file " read while end of the file
while char != 'EOF' && chars_read < 1000 while char != 'EOF' && chars_read < 1000
let last_pos = pos let last_pos = pos
@@ -1689,6 +1738,7 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
let filelines = reverse(lines) let filelines = reverse(lines)
let [pos, char] = s:getNextCharWithPos(filelines, [a:start_line - i - 1, start_col]) let [pos, char] = s:getNextCharWithPos(filelines, [a:start_line - i - 1, start_col])
let chars_read = 1 let chars_read = 1
let last_pos = pos
" read while end of the file " read while end of the file
while char != 'EOF' && chars_read < 1000 while char != 'EOF' && chars_read < 1000
let last_pos = pos let last_pos = pos
@@ -1819,7 +1869,7 @@ function! phpcomplete#GetClassLocation(classname, namespace) " {{{
let i = 1 let i = 1
while i < line('.') while i < line('.')
let line = getline(line('.')-i) let line = getline(line('.')-i)
if line =~? '^\s*\(abstract\s\+\|final\s\+\)*\s*class\s*'.a:classname.'\(\s\+\|$\)' && tolower(current_namespace) == search_namespace if line =~? '^\s*\(abstract\s\+\|final\s\+\)*\s*\(class\|interface\|trait\)\s*'.a:classname.'\(\s\+\|$\)' && tolower(current_namespace) == search_namespace
return expand('%:p') return expand('%:p')
else else
let i += 1 let i += 1
@@ -1831,7 +1881,9 @@ function! phpcomplete#GetClassLocation(classname, namespace) " {{{
let no_namespace_candidate = '' let no_namespace_candidate = ''
let tags = phpcomplete#GetTaglist('^'.a:classname.'$') let tags = phpcomplete#GetTaglist('^'.a:classname.'$')
for tag in tags for tag in tags
if tag.kind == 'c' || tag.kind == 'i' " We'll allow interfaces and traits to be handled classes since you
" can't have colliding names with different kinds anyway
if tag.kind == 'c' || tag.kind == 'i' || tag.kind == 't'
if !has_key(tag, 'namespace') if !has_key(tag, 'namespace')
let no_namespace_candidate = tag.filename let no_namespace_candidate = tag.filename
else else
@@ -1979,9 +2031,9 @@ function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_nam
" remember the window we started at " remember the window we started at
let phpcomplete_original_window = winnr() let phpcomplete_original_window = winnr()
silent! below 1new silent! tab 1new
silent! 0put =cfile silent! 0put =cfile
call search('\(class\|interface\)\_s\+'.a:class_name.'\(\>\|$\)') call search('\c\(class\|interface\|trait\)\_s\+'.a:class_name.'\(\>\|$\)')
let cfline = line('.') let cfline = line('.')
call search('{') call search('{')
let endline = line('.') let endline = line('.')
@@ -1994,8 +2046,48 @@ function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_nam
let extends_class = '' let extends_class = ''
endif endif
call searchpair('{', '', '}', 'W') call searchpair('{', '', '}', 'W')
let classcontent = join(getline(cfline, line('.')), "\n") let class_closing_bracket_line = line('.')
let classcontent = join(getline(cfline, class_closing_bracket_line), "\n")
let used_traits = []
" move back to the line next to the class's definition
call cursor(endline + 1, 1)
let keep_searching = 1
while keep_searching != 0
" try to grab "use..." keywords
let [lnum, col] = searchpos('\c^\s\+use\s\+'.class_name_pattern, 'cW', class_closing_bracket_line)
let syn_name = synIDattr(synID(lnum, col, 0), "name")
if syn_name =~? 'string\|comment'
call cursor(lnum + 1, 1)
continue
endif
let trait_line = getline(lnum)
if trait_line !~? ';'
" try to find the next line containing ';'
let l = lnum
let search_line = trait_line
" add lines from the file until theres no ';' in them
while search_line !~? ';' && l > 0
" file lines are reversed so we need to go backwards
let l += 1
let search_line = getline(l)
let trait_line .= ' '.substitute(search_line, '\(^\s\+\|\s\+$\)', '', 'g')
endwhile
endif
let use_expression = matchstr(trait_line, '^\s*use\s\+\zs.\{-}\ze;')
let use_parts = map(split(use_expression, '\s*,\s*'), 'substitute(v:val, "\\s+", " ", "g")')
let used_traits += map(use_parts, 'substitute(v:val, "\\s", "", "g")')
call cursor(lnum + 1, 1)
if [lnum, col] == [0, 0]
let keep_searching = 0
endif
endwhile
silent! bw! % silent! bw! %
let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(a:file_lines[0:cfline]) let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(a:file_lines[0:cfline])
" go back to original window " go back to original window
exe phpcomplete_original_window.'wincmd w' exe phpcomplete_original_window.'wincmd w'
@@ -2008,21 +2100,27 @@ function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_nam
\ 'mtime': getftime(full_file_path), \ 'mtime': getftime(full_file_path),
\ }) \ })
let all_extends = used_traits
if extends_class != '' if extends_class != ''
let [extends_class, namespace] = phpcomplete#ExpandClassName(extends_class, current_namespace, imports) call add(all_extends, extends_class)
if namespace == '' endif
let namespace = '\' if len(all_extends) > 0
endif for class in all_extends
let classlocation = phpcomplete#GetClassLocation(extends_class, namespace) let [class, namespace] = phpcomplete#ExpandClassName(class, current_namespace, imports)
if classlocation == "VIMPHP_BUILTINOBJECT" if namespace == ''
let result += [phpcomplete#GenerateBuiltinClassStub(g:php_builtin_classes[tolower(extends_class)])] let namespace = '\'
elseif classlocation != '' && filereadable(classlocation) endif
let full_file_path = fnamemodify(classlocation, ':p') let classlocation = phpcomplete#GetClassLocation(class, namespace)
let result += phpcomplete#GetClassContentsStructure(full_file_path, readfile(full_file_path), extends_class) if classlocation == "VIMPHP_BUILTINOBJECT"
elseif tolower(current_namespace) == tolower(namespace) let result += [phpcomplete#GenerateBuiltinClassStub(g:php_builtin_classes[tolower(class)])]
" try to find the declaration in the same file. elseif classlocation != '' && filereadable(classlocation)
let result += phpcomplete#GetClassContentsStructure(full_file_path, a:file_lines, extends_class) let full_file_path = fnamemodify(classlocation, ':p')
endif let result += phpcomplete#GetClassContentsStructure(full_file_path, readfile(full_file_path), class)
elseif tolower(current_namespace) == tolower(namespace)
" try to find the declaration in the same file.
let result += phpcomplete#GetClassContentsStructure(full_file_path, a:file_lines, class)
endif
endfor
endif endif
return result return result
@@ -2270,19 +2368,40 @@ endfunction!
" }}} " }}}
function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
let original_window = winnr()
silent! tab 1new
silent! 0put =a:file_lines
normal! G
" clear out classes, functions and other blocks
while 1
let block_start_pos = searchpos('\c\(class\|trait\|function\|interface\)\s\+\_.\{-}\zs{', 'Web')
if block_start_pos == [0, 0]
break
endif
let block_end_pos = searchpairpos('{', '', '}\|\%$', 'W', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
silent! exec block_start_pos[0].','.block_end_pos[0].'d'
endwhile
normal! G
" grab the remains
let file_lines = reverse(getline(1, line('.') - 1))
silent! bw! %
exe original_window.'wincmd w'
let namespace_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' let namespace_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*'
let file_lines = reverse(copy(a:file_lines))
let i = 0 let i = 0
let file_length = len(file_lines) let file_length = len(file_lines)
let imports = {} let imports = {}
let current_namespace = '\' let current_namespace = '\'
while i < file_length while i < file_length
let line = file_lines[i] let line = file_lines[i]
if line =~? '^\s*namespace\s*'.namespace_name_pattern if line =~? '^\s*namespace\s*'.namespace_name_pattern
let current_namespace = matchstr(line, '^\s*namespace\s*\zs'.namespace_name_pattern.'\ze') let current_namespace = matchstr(line, '\c^\s*namespace\s*\zs'.namespace_name_pattern.'\ze')
break break
endif endif
@@ -2303,11 +2422,11 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
let use_line .= ' '.substitute(search_line, '\(^\s\+\|\s\+$\)', '', 'g') let use_line .= ' '.substitute(search_line, '\(^\s\+\|\s\+$\)', '', 'g')
endwhile endwhile
endif endif
let use_expression = matchstr(use_line, '^\s*use\s\+\zs.\{-}\ze;') let use_expression = matchstr(use_line, '^\c\s*use\s\+\zs.\{-}\ze;')
let use_parts = map(split(use_expression, '\s*,\s*'), 'substitute(v:val, "\\s+", " ", "g")') let use_parts = map(split(use_expression, '\s*,\s*'), 'substitute(v:val, "\\s+", " ", "g")')
for part in use_parts for part in use_parts
if part =~? '\s\+as\s\+' if part =~? '\s\+as\s\+'
let [object, name] = split(part, '\s\+as\s\+') let [object, name] = split(part, '\s\+as\s\+\c')
let object = substitute(object, '^\\', '', '') let object = substitute(object, '^\\', '', '')
let name = substitute(name, '^\\', '', '') let name = substitute(name, '^\\', '', '')
else else
@@ -2343,7 +2462,7 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
break break
endif endif
" if the name matches with the extracted classname and namespace " if the name matches with the extracted classname and namespace
if (tag.kind == 'c' || tag.kind == 'i') && tag.name == classname if (tag.kind == 'c' || tag.kind == 'i' || tag.kind == 't') && tag.name == classname
if has_key(tag, 'namespace') if has_key(tag, 'namespace')
let patched_ctags_detected = 1 let patched_ctags_detected = 1
if tag.namespace == namespace_for_classes if tag.namespace == namespace_for_classes
@@ -2386,7 +2505,7 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
let tags = phpcomplete#GetTaglist('^'.import['name'].'$') let tags = phpcomplete#GetTaglist('^'.import['name'].'$')
for tag in tags for tag in tags
" search for the first matchin namespace, class, interface with no namespace " search for the first matchin namespace, class, interface with no namespace
if !has_key(tag, 'namespace') && (tag.kind == 'n' || tag.kind == 'c' || tag.kind == 'i') if !has_key(tag, 'namespace') && (tag.kind == 'n' || tag.kind == 'c' || tag.kind == 'i' || tag.kind == 't')
call extend(import, tag) call extend(import, tag)
let import['builtin'] = 0 let import['builtin'] = 0
break break

View File

@@ -1,4 +1,4 @@
*remote.txt* For Vim version 7.4. Last change: 2008 May 24 *remote.txt* For Vim version 7.4. Last change: 2015 Mar 01
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -36,7 +36,8 @@ The following command line arguments are available:
The remote Vim is raised. If you don't want The remote Vim is raised. If you don't want
this use > this use >
vim --remote-send "<C-\><C-N>:n filename<CR>" vim --remote-send "<C-\><C-N>:n filename<CR>"
< --remote-silent [+{cmd}] {file} ... *--remote-silent* <
--remote-silent [+{cmd}] {file} ... *--remote-silent*
As above, but don't complain if there is no As above, but don't complain if there is no
server and the file is edited locally. server and the file is edited locally.
--remote-wait [+{cmd}] {file} ... *--remote-wait* --remote-wait [+{cmd}] {file} ... *--remote-wait*

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.4. Last change: 2015 Feb 27 *todo.txt* For Vim version 7.4. Last change: 2015 Mar 02
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -78,9 +78,14 @@ https://github.com/neovim/neovim/commit/77ace65bdce379f2d9b13ee81ab3fc01951f92dc
Still using freed memory after using setloclist(). (lcd, 2014 Jul 23) Still using freed memory after using setloclist(). (lcd, 2014 Jul 23)
More info Jul 24. Not clear why. More info Jul 24. Not clear why.
Patch for c.vim and cpp.vim. (Yasuhiro Matsumoto, 2015 Feb 28)
Better .ico file for Windows. (Pat Suwalski, 2015 Feb 13) Better .ico file for Windows. (Pat Suwalski, 2015 Feb 13)
Waiting for response on remark from Edward Fox. Waiting for response on remark from Edward Fox.
Patch to put -ldl in LIBs rather than LDFLAGS, so that python2 and python3 can
both be used. (Oazki Kiichi, 2015 Feb 28)
Patch to make getregtype() return the right size for non-linux systems. Patch to make getregtype() return the right size for non-linux systems.
(Yasuhiro Matsumoto, 2014 Jul 8) (Yasuhiro Matsumoto, 2014 Jul 8)
Breaks test_eval. Inefficient, can we only compute y_width when needed? Breaks test_eval. Inefficient, can we only compute y_width when needed?
@@ -93,6 +98,10 @@ Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
":cd C:\Windows\System32\drivers\etc*" does not work, even though the ":cd C:\Windows\System32\drivers\etc*" does not work, even though the
directory exists. (Sergio Gallelli, 2013 Dec 29) directory exists. (Sergio Gallelli, 2013 Dec 29)
Patch to make 7.4.582 work for multi-byte. (Yasuhiro Matsumoto, 2015 Mar 1)
C indent: should recognize C11 raw strings. (Mark Lodato, 2015 Mar 1)
Gvim: when both Tab and CTRL-I are mapped, use CTRL-I not for Tab. Gvim: when both Tab and CTRL-I are mapped, use CTRL-I not for Tab.
Python: ":py raw_input('prompt')" doesn't work. (Manu Hack) Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
@@ -138,6 +147,7 @@ glob() omits symbolic links to non-existing files.
Patch by James McCoy, 2015 Feb 20. Patch by James McCoy, 2015 Feb 20.
Docs change suggestion by Roland Eggner, 2015 Feb 21. Docs change suggestion by Roland Eggner, 2015 Feb 21.
Probably "to a not existing file" should be "to a non-existing file". Probably "to a not existing file" should be "to a non-existing file".
Also fix globpath().
Cursorline background color not mixed with character highlight. Cursorline background color not mixed with character highlight.
Patch by Yasuhiro Matsumoto, 2014 Dec 3. Patch by Yasuhiro Matsumoto, 2014 Dec 3.

View File

@@ -2,7 +2,7 @@
" Language: Java " Language: Java
" Maintainer: Claudio Fleiner <claudio@fleiner.com> " Maintainer: Claudio Fleiner <claudio@fleiner.com>
" URL: http://www.fleiner.com/vim/syntax/java.vim " URL: http://www.fleiner.com/vim/syntax/java.vim
" Last Change: 2012 Oct 05 " Last Change: 2015 March 01
" Please check :help java.vim for comments on some of the options available. " Please check :help java.vim for comments on some of the options available.
@@ -30,7 +30,7 @@ endif
" some characters that cannot be in a java program (outside a string) " some characters that cannot be in a java program (outside a string)
syn match javaError "[\\@`]" syn match javaError "[\\@`]"
syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/" syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
syn match javaOK "\.\.\." syn match javaOK "\.\.\."
@@ -63,7 +63,7 @@ syn match javaTypedef "\.\s*\<class\>"ms=s+1
syn keyword javaClassDecl enum syn keyword javaClassDecl enum
syn match javaClassDecl "^class\>" syn match javaClassDecl "^class\>"
syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1 syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>\(([^)]*)\)\=" contains=javaString
syn match javaClassDecl "@interface\>" syn match javaClassDecl "@interface\>"
syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
syn match javaUserLabelRef "\k\+" contained syn match javaUserLabelRef "\k\+" contained
@@ -121,7 +121,7 @@ if exists("java_space_errors")
endif endif
endif endif
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
syn keyword javaLabel default syn keyword javaLabel default
@@ -188,10 +188,10 @@ syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaS
syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
syn match javaCharacter "'\\''" contains=javaSpecialChar syn match javaCharacter "'\\''" contains=javaSpecialChar
syn match javaCharacter "'[^\\]'" syn match javaCharacter "'[^\\]'"
syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" syn match javaNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" syn match javaNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" syn match javaNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" syn match javaNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
" unicode characters " unicode characters
syn match javaSpecial "\\u\d\{4\}" syn match javaSpecial "\\u\d\{4\}"
@@ -200,19 +200,21 @@ syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStri
if exists("java_highlight_functions") if exists("java_highlight_functions")
if java_highlight_functions == "indent" if java_highlight_functions == "indent"
syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
else else
" This line catches method declarations at any indentation>0, but it assumes " This line catches method declarations at any indentation>0, but it assumes
" two things: " two things:
" 1. class names are always capitalized (ie: Button) " 1. class names are always capitalized (ie: Button)
" 2. method names are never capitalized (except constructors, of course) " 2. method names are never capitalized (except constructors, of course)
syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses "syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses
syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(<.*>\s\+\)\?\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^(){}]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*(+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses,javaAnnotation
endif endif
syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
syn match javaBraces "[{}]" syn match javaBraces "[{}]"
syn cluster javaTop add=javaFuncDef,javaBraces syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
endif endif
if exists("java_highlight_debug") if exists("java_highlight_debug")
@@ -266,18 +268,23 @@ if exists("java_mark_braces_in_parens_as_errors")
endif endif
" catch errors caused by wrong parenthesis " catch errors caused by wrong parenthesis
syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1 syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
syn match javaParenError ")" syn match javaParenError ")"
" catch errors caused by wrong square parenthesis " catch errors caused by wrong square parenthesis
syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1 syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
syn match javaParenError "\]" syn match javaParenError "\]"
JavaHiLink javaParenError javaError JavaHiLink javaParenError javaError
if exists("java_highlight_functions")
syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
" needs to be defined after the parenthesis error catcher to work
endif
if !exists("java_minlines") if !exists("java_minlines")
let java_minlines = 10 let java_minlines = 10
endif endif
@@ -288,6 +295,7 @@ if version >= 508 || !exists("did_java_syn_inits")
if version < 508 if version < 508
let did_java_syn_inits = 1 let did_java_syn_inits = 1
endif endif
JavaHiLink javaLambdaDef Function
JavaHiLink javaFuncDef Function JavaHiLink javaFuncDef Function
JavaHiLink javaVarArg Function JavaHiLink javaVarArg Function
JavaHiLink javaBraces Function JavaHiLink javaBraces Function