Help wanted with a mysterious Dialyzer error

I’m getting a mysterious Dialyzer error and I’m hoping that someone can help me figure out what’s going on and resolve the problem. As usual, constructive comments and questions are also welcome.

The original project uses Phoenix, but that isn’t relevant to the problem. It also has a pretty large code base, which I can’t expect anyone else to examine. So, I’ve extracted the problematic code into a pair of (much smaller) Mix projects located here.

-r

1 Like

Although I’m still curious about this problem, resolving it is likely to be only of academic interest. Floki is a fine library, but it isn’t really suited to the task at hand (editing output HTML pages to add a table of contents).

Part of the problem is that Floki’s HTML parsing and regeneration functions don’t always preserve white space. This makes the output difficult to read and can also cause rendering problems (e.g., when a pair of links is separated only by white space).

In addition, using Floki for this task caused me to write some rather inscrutable code. So, I’m looking into using ModestEx, instead. Wish me luck…

Did you consider meeseeks?

Yes, but this caution discouraged me:

When needing to make updates to an HTML document, Floki should be preferred to Meeseeks which does not provide the ability to do so.
https://github.com/mischov/meeseeks/blob/master/guides/meeseeks_vs_floki.md

Oh, I forgot about that. Apologies.

ModestEx failed to build on my macOS Catalina (10.15.2) system, due to a missing cmake command. After I did a brew install cmake (and cleaned out the relevant deps), the build “succeeded” (with bazillions of warnings). However, iex -S mix then refused to start. (backs away slowly…)

1 Like

I rewrote the edit_body/2 function (and friends), using regexen rather than Floki to perform the editing. Normally, this would be a Bad Idea, but in this case (a) the edits are straightforward and (b) I control the input syntax.

In any case, the code now works and passes Dialyzer. The new code is available in smalltoc.

1 Like