misc/vim: nitdoc function search for a precise word
[nit.git] / misc / vim / plugin / nit.vim
index b1b115b..f19224a 100644 (file)
@@ -110,13 +110,17 @@ 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:
+" Will order the results in 5 levels:
 " 1. Exact matches
 " 2. Common prefix matches
 " 3. Substring matches
+" 4. Synopsis matches
+" 5. Doc matches
 fun NitOmnifuncAddFromFile(base, matches, path)
        let prefix_matches = []
        let substring_matches = []
+       let synopsis_matches = []
+       let doc_matches = []
 
        let path = NitMetadataFile(a:path)
        if empty(path)
@@ -131,18 +135,26 @@ fun NitOmnifuncAddFromFile(base, matches, path)
                if name == a:base
                        " Exact match
                        call NitOmnifuncAddAMatch(a:matches, words, name)
-               elseif name =~ '^'.a:base
+               elseif name =~? '^'.a:base
                        " Common-prefix match
                        call NitOmnifuncAddAMatch(prefix_matches, words, name)
-               elseif name =~ a:base
+               elseif name =~? a:base
                        " Substring match
                        call NitOmnifuncAddAMatch(substring_matches, words, name)
+               elseif get(words, 2, '') =~? a:base
+                       " Match in the synopsis
+                       call NitOmnifuncAddAMatch(synopsis_matches, words, name)
+               elseif get(words, 3, '') =~? a:base
+                       " Match in the longer doc
+                       call NitOmnifuncAddAMatch(synopsis_matches, words, name)
                endif
        endfor
 
        " Assemble the final match list
        call extend(a:matches, sort(prefix_matches))
        call extend(a:matches, sort(substring_matches))
+       call extend(a:matches, sort(synopsis_matches))
+       call extend(a:matches, sort(doc_matches))
 endfun
 
 " Internal function to search parse the information from a metadata line
@@ -271,7 +283,7 @@ fun Nitdoc()
                for line in readfile(path)
                        let words = split(line, '#====#', 1)
                        let name = get(words, 0, '')
-                       if name =~ '^' . word
+                       if name =~ '^' . word . '\>'
                                " It fits our word, get long doc
                                let desc = get(words,3,'')
                                let desc = join(split(desc, '#nnnn#', 1), "\n")