refactor(tutor): use inline comments instead of json file #39714

Problem: Expected text for interactive marks is in a separate json file
from the tutor file. When the tutor file is updated, line numbers
(potentially many) have to be updated in the json file. This is a
burden for maintenance and automatic testing.

Solution: Put the expected text inline in the tutor file, marked
with `[[]]`. Parse and remove the comments before opening the tutor
file so extmarks can be applied.
This commit is contained in:
Nathan Zeng
2026-05-13 04:31:17 -07:00
committed by GitHub
parent 8b11734b18
commit dbdd73e846
16 changed files with 198 additions and 378 deletions

View File

@@ -16,6 +16,30 @@ local tutor_hl_ns = vim.api.nvim_create_namespace('nvim.tutor.hl')
local M = {}
-- Extract inline comments into metadata.
-- Example: "This is wrong. [[This is right.]]" => { '1' = 'This is right.'}
function M.load_metadata()
---@type table<string, string|-1>
local data = {}
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
for i, line in ipairs(lines) do
local text, expected_text = line:match('^(.-)%s%[%[(.-)%]%]$')
if text then
if expected_text == '-1' then
data[tostring(i)] = -1
else
data[tostring(i)] = expected_text
end
lines[i] = text
end
end
vim.b.tutor_metadata = { expect = data }
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
end
---@param line integer 1-based
local function check_line(line)
if vim.b.tutor_metadata and vim.b.tutor_metadata.expect and vim.b.tutor_extmarks then