From f8de155a366dd427166549ed5a0839a823baeee1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Fri, 6 Mar 2015 23:21:05 -0500 Subject: [PATCH] misc/vim: extract the service to find metadata files from the omnifunc MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- misc/vim/plugin/nit.vim | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/misc/vim/plugin/nit.vim b/misc/vim/plugin/nit.vim index 23e557a..d1e92ef 100644 --- a/misc/vim/plugin/nit.vim +++ b/misc/vim/plugin/nit.vim @@ -81,17 +81,10 @@ function ForceNitComplete() call NitComplete() endfunction -" Internal function to search for lines in `path` corresponding to the partial -" word `base`. Adds found and formated match to `matches`. +" Get path to the best metadata file named `name` " -" Will order the results in 3 levels: -" 1. Exact matches -" 2. Common prefix matches -" 3. Substring matches -fun NitOmnifuncAddFromFile(base, matches, path) - let prefix_matches = [] - let substring_matches = [] - +" Returns an empty string if not found. +fun NitMetadataFile(name) " Where are the generated metadata files? if empty($NIT_VIM_DIR) let metadata_dir = $HOME . '/.vim/nit' @@ -99,17 +92,37 @@ fun NitOmnifuncAddFromFile(base, matches, path) let metadata_dir = $NIT_VIM_DIR end - let path = metadata_dir . '/' . a:path + let path = metadata_dir . '/' . a:name + " Is there generated custom metadata files? if ! filereadable(path) - let path = s:script_dir . '/' . a:path + let path = s:script_dir . '/' . a:name " Is there standard metadata files? if ! filereadable(path) - return + return '' endif endif + return path +endfun + +" Internal function to search for lines in `path` corresponding to the partial +" word `base`. Adds found and formated match to `matches`. +" +" Will order the results in 3 levels: +" 1. Exact matches +" 2. Common prefix matches +" 3. Substring matches +fun NitOmnifuncAddFromFile(base, matches, path) + let prefix_matches = [] + let substring_matches = [] + + let path = NitMetadataFile(a:path) + if empty(path) + return + endif + for line in readfile(path) let words = split(line, '#====#', 1) let name = get(words, 0, '') @@ -159,10 +172,10 @@ fun NitOmnifunc(findstart, base) " find keyword matching with "a:base" let matches = [] - " Advanced suggestions + " advanced suggestions let cursor_line = getline('.') - " Content of the line before the partial word + " content of the line before the partial word let line_prev_cursor = cursor_line[:col('.')-1] let prev_char_at = strlen(line_prev_cursor) - 1 -- 1.7.9.5