]> dreyeck.freedombox.rocks Git - idiomatic.git/blobdiff - index.js
visitor walks, not wander
[idiomatic.git] / index.js
index b8d5a57efd5fc0944409c7490c184407c12ac1e0..ff1804ce45ed8841a5dad7b7d3c4f0c663d207f1 100644 (file)
--- a/index.js
+++ b/index.js
@@ -37,7 +37,7 @@ app.get('/index', async (req,res,next) => {
   console.log(new Date().toLocaleTimeString(), 'index')
   const reductions = counter()
   const doit = branch => {reductions.count(branch.type)}
-  visitor.wander(mods,doit)
+  visitor.walk(mods,doit)
   const result = `
     <p>${reductions.size()} non-terminals
     <br>${reductions.total()} reductions
@@ -59,7 +59,7 @@ app.get('/terminal', (req,res) => {
   const {type,field} = req.query
   const lits = counter()
   const doit = branch => {if(branch.type==type) lits.count(branch[field])}
-  visitor.wander(mods,doit)
+  visitor.walk(mods,doit)
   const result = style('terminal',type)+`
     <p>${lits.size()} uniques
     <br>${lits.total()} total
@@ -75,11 +75,11 @@ app.get('/usage', (req,res) => {
   const files = counter()
   const doit = (branch,stack) => {
     if(branch.type==type && branch[field]==key)list.push(`
-      <tr><td><a href="/nesting/?file=${files.count(stack.at(-1))}&type=${type}&start=${branch.start}&end=${branch.end}">
+      <tr><td><a href="/nesting/?file=${files.count(stack.at(-1))}&type=${type}&key=${key}&start=${branch.start}&end=${branch.end}">
       ${stack.at(-1)}</a>
       <td>${sxpr(stack[width ?? 2], depth ?? 3)}`)
   }
-  visitor.wander(mods,doit)
+  visitor.walk(mods,doit)
   const vis = row => row.split(/\n/)[3].trim().replaceAll(/<.*?>/g,'').replaceAll(/\.\.+/g,'..')
   list.sort((a,b) => vis(a)>vis(b) ? 1 : -1)
   const q = (id,delta) => Object.entries(req.query)
@@ -89,17 +89,17 @@ app.get('/usage', (req,res) => {
   const m = id => `<a href=/usage?${q(id,-1)} style="background-color:#ddd;">&nbsp;&minus;&nbsp;</a>`
   const d = id => `<span title=${req.query[id]}>${id} ${p(id)} ${m(id)}</span>`
   res.send(style('usage',key)+`
-    <p><table>${files.tally().map(([k,v]) => `<tr><td>${v}<td>${k}`).join("\n")}</table>
+    <p><details><summary>${files.total()} uses in ${files.size()} files</summary>
+      <table>${files.tally().map(([k,v]) => `<tr><td>${v}<td>${k}`).join("\n")}</table></details>
     <p><section>— ${d('width')} ${d('depth')} —</section>
     <p><table>${list.join("\n")}</table>`)
 })
 
 app.get('/nesting', (req,res) => {
-  const {file,type,start,end} = req.query
+  const {file,type,key,start,end} = req.query
   const result = []
   const doit = (branch,stack) => {
     if(stack.at(-1)==file && branch.type==type && branch.start==start && branch.end==end) {
-      const file = stack.at(-1)
       const path = stack.slice(0,-1).map((n,i) => `
         <tr>
         <td><a title=${file} href=/similar?pos=${`${file}-${start}-${end}`}&depth=${i}>${n.type}</a>:
@@ -110,8 +110,8 @@ app.get('/nesting', (req,res) => {
         <p><pre>${escape(JSON.stringify(hit,omit,2))}</pre>`)
     }
   }
-  visitor.wander(mods,doit)
-  res.send(style('nesting')+`${result.join("<hr>")}`)
+  visitor.walk(mods,doit)
+  res.send(style('nesting',key)+`${result.join("<hr>")}`)
 })