home ~ projects ~ socials

Hack Tree-Sitters HTML Debug Output To Dark Mode

I'm working on a Tree-Sitterts parser for Neopolitan. I'm using the -D flag for command line tests to produce a log.html file with a visual graph of the output. It's easier to figure out what's going on when things aren't going right.

The graph is produced by graphvizgv via an internal call STDIN call. The output is black text on a white background. As someone who like working in dark mode it's a bit of a flash-bang every time I switch to it.

To fix that, I pulled down the source codesc and made the following edits:

Add this to the style sheet section

body {
    background-color: darkslategray;
}


Change:
fprintf(self->dot_graph_file, "graph {\nlabel=\"");

To:

fprintf(self->dot_graph_file, "graph {\nbgcolor=\"darkslategray\"\nlabel=\"");

Change:

fprintf(f, "digraph stack { \n");

To:

fprintf(f, "digraph stack { \nbgcolor=\"darkslategray\"\n");

Change:

fprintf(f, "digraph tree {\n");

To:

fprintf(f, "digraph tree {\nbgcolor=\"darkslategray\"\n");

Installing The Hack

Installing the modified version of Tree-Sitter is done by running:

cargo install --path cli

That drops the binary under:

~/.cargo/bin/tree-sitter

My main tree-sitter is under:

/opt/homebrew/bin/tree-sitter

I could switch things around to use the new one 100% of the time, but I just call the ~/.cargo/bin version directly when testing like:

~/.cargo/bin/tree-sitter test

Notes

  • The above changes the background color only. The text and lines stay black. It's possible to change them as well, but this is fine for me
  • graphviz must be installed to generate the html. I got it using the homebrew command brew install graphviz
-- end of line --

References

  • Graphviz
  • Tree-Sitter Source Code
  • Tree-Sitter

    If all goes well, this is what I'll be using to do syntax highlighting for neopolitan in neovim