diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index d40c7187b0..b80a841a74 100644 --- a/lib/std/special/docs/main.js +++ b/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; - } else { - continue decl_loop; } + // 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; + } + 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, '