Commit 2e26aaa70c

Andrew Kelley <andrew@ziglang.org>
2019-10-08 02:48:53
generated docs: prioritized sort ranking
1 parent 7688100
Changed files (1)
lib
std
special
docs
lib/std/special/docs/main.js
@@ -280,10 +280,10 @@
             }
         }
         typesList.sort(function(a, b) {
-            return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
+            return operatorCompare(a.name, b.name);
         });
         fnsList.sort(function(a, b) {
-            return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
+            return operatorCompare(a.name, b.name);
         });
 
         if (typesList.length !== 0) {
@@ -488,11 +488,9 @@
     function onSearchKeyDown(ev) {
         switch (ev.which) {
             case 13:
-                var liDom = null;
-                if (domListSearchResults.children.length === 1) {
+                var liDom = domListSearchResults.children[curSearchIndex];
+                if (liDom == null && domListSearchResults.children.length !== 0) {
                     liDom = domListSearchResults.children[0];
-                } else {
-                    liDom = domListSearchResults.children[curSearchIndex];
                 }
                 if (liDom != null) {
                     var aDom = liDom.children[0];
@@ -604,29 +602,49 @@
 
             var decl = zigAnalysis.decls[declIndex];
             var lastPkgName = canonPath.pkgNames[canonPath.pkgNames.length - 1];
-            var searchText = lastPkgName + "." + canonPath.declNames.join('.');
+            var fullPathSearchText = lastPkgName + "." + canonPath.declNames.join('.');
             var astNode = zigAnalysis.astNodes[decl.src];
+            var fileAndDocs = zigAnalysis.files[astNode.file];
             if (astNode.docs != null) {
-                searchText += "\n" + astNode.docs;
+                fileAndDocs += "\n" + astNode.docs;
             }
-            var file = zigAnalysis.files[astNode.file];
-            searchText += "\n" + file;
+            var fullPathSearchTextLower = fullPathSearchText;
             if (ignoreCase) {
-                searchText = searchText.toLowerCase();
+                fullPathSearchTextLower = fullPathSearchTextLower.toLowerCase();
+                fileAndDocs = fileAndDocs.toLowerCase();
             }
 
+            var points = 0;
             for (var termIndex = 0; termIndex < terms.length; termIndex += 1) {
                 var term = terms[termIndex];
-                if (searchText.indexOf(term) >= 0) {
+
+                // exact, case sensitive match of full decl path
+                if (fullPathSearchText === term) {
+                    points += 4;
+                    continue;
+                }
+                // exact, case sensitive match of just decl name
+                if (decl.name == term) {
+                    points += 3;
+                    continue;
+                }
+                // substring, case insensitive match of full decl path
+                if (fullPathSearchTextLower.indexOf(term) >= 0) {
+                    points += 2;
                     continue;
-                } else {
-                    continue decl_loop;
                 }
+                if (fileAndDocs.indexOf(term) >= 0) {
+                    points += 1;
+                    continue;
+                }
+
+                continue decl_loop;
             }
 
             matchedItems.push({
                 decl: decl,
                 path: canonPath,
+                points: points,
             });
         }
 
@@ -634,6 +652,8 @@
             resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>');
 
             matchedItems.sort(function(a, b) {
+                var cmp = operatorCompare(b.points, a.points);
+                if (cmp != 0) return cmp;
                 return operatorCompare(a.decl.name, b.decl.name);
             });