|
| 1 | +-- Execute as `nvim --headless -c "luafile ./scripts/update-readme.lua"` |
| 2 | +local test_root = '.test-deps' |
| 3 | +for _, name in ipairs({ 'config', 'data', 'state', 'cache' }) do |
| 4 | + vim.env[('XDG_%s_HOME'):format(name:upper())] = test_root .. '/' .. name |
| 5 | +end |
| 6 | +vim.opt.runtimepath:append(os.getenv('NVIM_TS') or (test_root .. '/nvim-treesitter')) |
| 7 | +vim.opt.runtimepath:append('.') |
| 8 | + |
| 9 | +local parsers = require('nvim-treesitter.parsers') |
| 10 | +local shared = require('nvim-treesitter-textobjects.shared') |
| 11 | +local sorted_parsers = {} |
| 12 | + |
| 13 | +for k, v in pairs(parsers) do |
| 14 | + table.insert(sorted_parsers, { name = k, parser = v }) |
| 15 | +end |
| 16 | + |
| 17 | +table.sort(sorted_parsers, function(a, b) |
| 18 | + return a.name < b.name |
| 19 | +end) |
| 20 | + |
| 21 | +local textobjects = {} |
| 22 | +for m in table.concat(vim.fn.readfile('CONTRIBUTING.md'), '\n'):gmatch('@[%w.]*') do |
| 23 | + table.insert(textobjects, m) |
| 24 | +end |
| 25 | +table.sort(textobjects) |
| 26 | + |
| 27 | +local generated_text = '' |
| 28 | +for i, o in ipairs(textobjects) do |
| 29 | + generated_text = generated_text .. i .. '. ' .. o .. '\n' |
| 30 | +end |
| 31 | + |
| 32 | +generated_text = generated_text .. '<table>\n' |
| 33 | + |
| 34 | +generated_text = generated_text .. '<th>\n' |
| 35 | +for i, _ in ipairs(textobjects) do |
| 36 | + generated_text = generated_text .. '<td>' .. i .. '</td> ' |
| 37 | +end |
| 38 | +generated_text = generated_text .. '</th>\n' |
| 39 | + |
| 40 | +for _, v in ipairs(sorted_parsers) do |
| 41 | + local lang = (v.parser.readme_name or v.name) |
| 42 | + local found_textobjects = shared.available_textobjects(lang) |
| 43 | + |
| 44 | + local none_found = true |
| 45 | + for _, o in ipairs(textobjects) do |
| 46 | + local found = vim.tbl_contains(found_textobjects, o:sub(2)) |
| 47 | + if found then |
| 48 | + none_found = false |
| 49 | + break |
| 50 | + end |
| 51 | + end |
| 52 | + |
| 53 | + if not none_found then |
| 54 | + generated_text = generated_text .. '<tr>\n' |
| 55 | + generated_text = generated_text .. '<td>' .. lang .. '</td>' |
| 56 | + |
| 57 | + for _, o in ipairs(textobjects) do |
| 58 | + local found = vim.tbl_contains(found_textobjects, o:sub(2)) |
| 59 | + local status = found and '🟩' or '⬜' |
| 60 | + generated_text = generated_text |
| 61 | + .. '<td>' |
| 62 | + .. '<span title="' |
| 63 | + .. o |
| 64 | + .. '">' |
| 65 | + .. status |
| 66 | + .. '</span>' |
| 67 | + .. '</td> ' |
| 68 | + end |
| 69 | + generated_text = generated_text .. '</tr>\n' |
| 70 | + end |
| 71 | +end |
| 72 | +generated_text = generated_text .. '</table>\n' |
| 73 | + |
| 74 | +local prev_builtin_textobjects_text = table.concat(vim.fn.readfile('BUILTIN_TEXTOBJECTS.md'), '\n') |
| 75 | +vim.fn.writefile(vim.fn.split(generated_text, '\n'), 'BUILTIN_TEXTOBJECTS.md') |
| 76 | + |
| 77 | +if string.find(prev_builtin_textobjects_text, generated_text, 1, true) then |
| 78 | + print('BUILTIN_TEXTOBJECTS.md is up-to-date\n') |
| 79 | +else |
| 80 | + print('New BUILTIN_TEXTOBJECTS.md was written\n') |
| 81 | +end |
0 commit comments