Skip to content

Commit d6d00c4

Browse files
committed
feat: simplest possible docstring search
1 parent 0e96bb6 commit d6d00c4

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

nav.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,14 @@ if (tse != null) {
106106
// Simple declaration search
107107
// -------------------------
108108

109-
const declURL = new URL(`${siteRoot}decl.bmp`, window.location);
109+
const declURL = new URL(`${siteRoot}searchable_data.bmp`, window.location);
110110
const getDecls = (() => {
111111
let decls;
112112
return () => {
113113
if (!decls) decls = new Promise((resolve, reject) => {
114114
const req = new XMLHttpRequest();
115-
req.addEventListener('load', () => resolve(loadDecls(req.responseText)));
115+
req.responseType = 'json';
116+
req.addEventListener('load', () => resolve(loadDecls(req.response)));
116117
req.addEventListener('error', () => reject());
117118
req.open('GET', declURL);
118119
req.send();

search.js

+14-9
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,22 @@ function matchCaseSensitive(declName, lowerDeclName, pat) {
2222
}
2323
}
2424

25-
function loadDecls(declBmpCnt) {
26-
return declBmpCnt.split('\n').map(d => [d, d.toLowerCase()]);
25+
function loadDecls(searchableDataCnt) {
26+
return searchableDataCnt.map(({name, description}) => [name, name.toLowerCase(), description.toLowerCase()])
2727
}
2828

29-
function getMatches(decls, pat, maxResults = 20) {
30-
// const lowerPat = pat.toLowerCase();
31-
// const caseSensitive = pat !== lowerPat;
29+
function getMatches(decls, pat, maxResults = 30) {
30+
const lowerPats = pat.toLowerCase().split(/\s/g);
3231
const patNoSpaces = pat.replace(/\s/g, '');
3332
const results = [];
34-
for (const [decl, lowerDecl] of decls) {
35-
const err = matchCaseSensitive(decl, lowerDecl, patNoSpaces);
33+
for (const [decl, lowerDecl, lowerDoc] of decls) {
34+
let err = matchCaseSensitive(decl, lowerDecl, patNoSpaces);
35+
36+
// match all words as substrings of docstring
37+
if (!(err < 3) && pat.length > 3 && lowerPats.every(l => lowerDoc.indexOf(l) != -1)) {
38+
err = 3;
39+
}
40+
3641
if (err !== undefined) {
3742
results.push({decl, err});
3843
}
@@ -41,6 +46,6 @@ function getMatches(decls, pat, maxResults = 20) {
4146
}
4247

4348
if (typeof process === 'object') { // NodeJS
44-
const declNames = loadDecls(require('fs').readFileSync('html/decl.bmp').toString());
45-
console.log(getMatches(declNames, process.argv[2] || 'ltltle', 20));
49+
const data = loadDecls(JSON.parse(require('fs').readFileSync('searchable_data.bmp').toString()));
50+
console.log(getMatches(data, process.argv[2] || 'ltltle'));
4651
}

0 commit comments

Comments
 (0)