For the 2 new functions I've followed current naming scheme, replacing "lsp-abiding" by "bytewise". We can then get rid of all the suboptimal nomenclature (lsp-abiding, column, bytewise) in one go at a later stage. I also didn't attempt to make 'eglot-move-to-bytewise-column' and 'eglot-bytewise-column' "correct" in the cases where 'json-serialize' throws an error. I think it's clear that Eli and I have different definitions "correctness" in this context, but Eli's proposal requires substantial further work, including recovering from possible errors raising from 'json-serialize'. Lastly, I used 'line-beginning-position' naively in the 2 new function because there are at least 4 other pre-existing naive uses in eglot.el. This refinement deserves a patch of its own, probably using something on the lines of (defalias eglot--pos-bol (if (fboundp 'pos-bol) 'pos-bol ...))