let g:acp_behaviorKeywordIgnores = ['new', 'var', 'in', 'do', 'els', 'end', 'ret', 'for', 'fun']
" Use nitls to compute all interesting files from the current directory and the standard library
- for file in split(system('nitls -M standard .', '\n'))
+ for file in split(system('nitls -M core .', '\n'))
silent let &complete = &complete . ',s' . file
silent set complete?
endfor
" All possible docs (there may be more than one entity with the same name)
let docs = []
+ let prefix_matches = []
+ let substring_matches = []
+ let synopsis_matches = []
+ let doc_matches = []
" Search in all metadata files
for file in ['modules', 'classes', 'properties']
for line in readfile(path)
let words = split(line, '#====#', 1)
let name = get(words, 0, '')
- if name =~ '^' . word . '\>'
- " It fits our word, get long doc
- let desc = get(words,3,'')
- let desc = join(split(desc, '#nnnn#', 1), "\n")
- call add(docs, desc)
+ if name =~ '^'.word.'\>'
+ " Exact match
+ call s:NitdocAdd(docs, words)
+ elseif name =~? '^'.word
+ " Common-prefix match
+ call s:NitdocAdd(prefix_matches, words)
+ elseif name =~? word
+ " Substring match
+ call s:NitdocAdd(substring_matches, words)
+ elseif get(words, 2, '') =~? word
+ " Match in the synopsis
+ call s:NitdocAdd(synopsis_matches, words)
+ elseif get(words, 3, '') =~? word
+ " Match in the longer doc
+ call s:NitdocAdd(doc_matches, words)
endif
endfor
endfor
+ " Unite all results in prefered order
+ call extend(docs, sort(prefix_matches))
+ call extend(docs, sort(substring_matches))
+ call extend(docs, sort(synopsis_matches))
+ call extend(docs, sort(doc_matches))
+
" Found no doc, give up
if empty(docs) || !(join(docs, '') =~ '\w')
+ echo 'Nitdoc found nothing for "' . word . '"'
return
endif
silent put = ''
endif
endfor
+ execute 0
+ delete " the first empty line
" Set options
setlocal buftype=nofile
redraw!
endfun
+" Internal function to search parse the information from a metadata line
+fun s:NitdocAdd(matches, words)
+ let desc = get(a:words, 3, '')
+ let desc = join(split(desc, '#nnnn#', 1), "\n")
+ call add(a:matches, desc)
+endfun
+
" Call `git grep` on the word under the cursor
"
" Shows declarations first, then all matches, in the preview window.
redraw!
endfun
-" Activate the omnifunc on Nit files
-autocmd FileType nit set omnifunc=NitOmnifunc
+" Call `nit` on the current file
+fun NitExecute()
+ let path = expand('%')
+
+ if &modified
+ let path = tempname() . '.nit'
+ execute '%write '. path
+ endif
+
+ execute '!nit "' . path . '"'
+endfun
+command NitExecute call NitExecute()
+
+if !exists("g:nit_disable_omnifunc") || !g:nit_disable_omnifunc
+ " Activate the omnifunc on Nit files
+ autocmd FileType nit set omnifunc=NitOmnifunc
+endif
" Define the user command Nitdoc for ease of use
command -nargs=* Nitdoc call Nitdoc("<args>")