Searchfox Update: Nicer context menus, more experimental diagram powers

321 views
Skip to first unread message

Andrew Sutherland

unread,
Feb 1, 2024, 2:20:19 AMFeb 1
to dev-pl...@mozilla.org

Searchfox prioritizes speed.  So much so that in a past update of sanding things down to keep searchfox streamlined, we sanded off the icons on the context menu.  But now they're back with more icons than ever and UX-reviewed by a speedometer 3 performance expert.

A variety of enhancements have been made to the diagramming functionality, including hierarchical clustering among multiple axes and major progress in deriving an intermediary representation that we hope will enable the next steps in making the diagrams accessible, a necessary step for the diagrams to graduate from pre-alpha status.  (Currently you need to go to https://searchfox.org/mozilla-central/pages/settings.html and change the "Default feature gate" from "Release" to "Alpha".  Alternately, there's a "Diagramming feature gate" further down the page.)  Right now the data powers new and improved "scroll the diagram to the thing you wanted to see" functionality, as well as "gaudy colors on hover that are helpful if your diagram fits on one screen but otherwise confirm your suspicions that the diagram is not useful because that edge just goes way off into space somewhere off the page".

Additionally, major improvements to searchfox's data-model and understanding of the code through the power of "writing heuristics and labeling types with them" whack-a-mole[1].  The wins here are things like diagrams that got very unhelpful once they got to "SomeRunnable::Run" and thereby "nsIRunnable::Run" will now be like "aha, an nsIRunnable subclass's Run method!  I know that what the user really wants is to see who created that runnable!".  And this works well as long as no one used MakeRefPtr, in which case searchfox gives up because templates.

Blog posts with more details and screenshots and example links will be forthcoming.  In the meantime, here's a quick set of additional query arguments that can be used to iterate on your diagrams and that will be helpfully provided via some nice UI stuff in the future that does not infuriate you and has smaug's UX seal of approval:

  • hier:pretty - Default hierarchy based on pretty symbol name.
  • hier:flat - Oh no, I hate this hierarchy stuff!  Please go back to the old way!
  • hier:subsystem - Namespaces are great, but I love bugzilla and wish the file mapping that tells us the bugzilla component for every file could be used instead.
  • hier:file - You know what?  Forget bugzilla, I love the filesystem and want fine granularity file-level hierarchy.
  • hier:dir - That was too much granularity, just group by directories please.
  • graph-layout:dot - Default layout.  It's the best!
  • graph-layout:neato - That was too orderly, I want a diagram that stresses me out using a force-directed layout sorta thing.
  • graph-layout:fdp - That was good, but I'd like the edge lengths to be either much longer or much shorter, depending on random factors I have no control over.
  • depth:N - I would like to limit the graph's traversal to this level of depth.  Now 1-based!
  • node-limit:N - I saw a message about a limit being hit and I really want more stuff in my graph.  Alternately, maybe I want less stuff in my graph but I want something less deterministic than limiting the depth.
  • path-limit:N - I saw a message about a node not being considered because it had too many edges, but I really want that node expanded so my graph can have a lot going on.
  • calls-between:foo calls-between:bar - I wish there was a way to intersect `calls-to` for multiple symbols to find the path between one or more things.
  • fmus-through-depth:0 - "field member uses" - If someone has a pointer to the class I'm asking for a diagram of, I want the in edges that come from that even though most of the time this is complicates the graph too much.  By setting a value of 0, I only apply it to the depth 0 nodes in the diagram, preserving maximum sanity.  I understand I can set the number higher at significant threat to the foundations of reality.

Also, there's now a synthetic "(file symbol)" at the end of the current file's path bread crumbs.  Diagrams triggered on this symbol let you visualize our header include file graph.  This is only useful with `calls-between` because our include graphs are a lot.

Andrew

1: https://github.com/mozsearch/mozsearch/blob/master/config_defaults/ontology-mapping.toml

Reply all
Reply to author
Forward
0 new messages