Add suppress_line_ids to Gitlab::Highlight
What does this MR do and why?
Adds suppress_line_ids option to Gitlab::Highlight, threads through BlobPresenter.
(I need this for the stacked MRs; split into smol pieces because the whole thing was too large for one review.)
Note that suppress_line_ids already exists in master, it just can't be passed in from outside yet. This lets you do so while still using its previous default if not given.
MR stack
For Render blob line of code in GFM (#300855):
- Add suppress_line_ids to Gitlab::Highlight (!246835)
⬅️ you are here - Add EmbeddedBlobComponent for rendering embedde... (!246837)
- Embed blob permalinks in GLFM behind FF (!246838)
- Add blob snippet embed support to content editor (!246840)
How to set up and validate locally
Internal API exposure only; you can test it out with bin/rails console though:
[1] pry(main)> Gitlab::Highlight.highlight('abc.nix', "{ hello = world; }\n", language: 'nix')
=> "<span id=\"LC1\" class=\"line\" data-lang=\"nix\"><span class=\"p\">{</span> <span class=\"nv\">hello</span> <span class=\"o\">=</span> <span class=\"nv\">world</span><span class=\"p\">;</span> <span class=\"p\">}</span></span>"
[2] pry(main)> Gitlab::Highlight.highlight('abc.nix', "{ hello = world; }\n", language: 'nix', used_on: :diff)
=> "<span class=\"line\" data-lang=\"nix\"><span class=\"p\">{</span> <span class=\"nv\">hello</span> <span class=\"o\">=</span> <span class=\"nv\">world</span><span class=\"p\">;</span> <span class=\"p\">}</span></span>"
[3] pry(main)> Gitlab::Highlight.highlight('abc.nix', "{ hello = world; }\n", language: 'nix', suppress_line_ids: true)
=> "<span class=\"line\" data-lang=\"nix\"><span class=\"p\">{</span> <span class=\"nv\">hello</span> <span class=\"o\">=</span> <span class=\"nv\">world</span><span class=\"p\">;</span> <span class=\"p\">}</span></span>"used_on defaults to :blob; line IDs are suppressed by default on diffs, but now we can force it.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.