local M = {} ---@return nil function M.check() vim.health.start('pending.nvim') local ok, config = pcall(require, 'pending.config') if not ok then vim.health.error('Failed to load pending.config') return end local cfg = config.get() vim.health.ok('Config loaded') local store_ok, store = pcall(require, 'pending.store') if not store_ok then vim.health.error('Failed to load pending.store') return end local resolved_path = store.resolve_path() vim.health.info('Store path: ' .. resolved_path) if resolved_path ~= cfg.data_path then vim.health.info('(project-local store; global path: ' .. cfg.data_path .. ')') end local data_dir = vim.fn.fnamemodify(resolved_path, ':h') if vim.fn.isdirectory(data_dir) == 1 then vim.health.ok('Data directory exists: ' .. data_dir) else vim.health.warn('Data directory does not exist yet: ' .. data_dir) end if vim.fn.filereadable(resolved_path) == 1 then local s = store.new(resolved_path) local load_ok, err = pcall(function() s:load() end) if load_ok then local tasks = s:tasks() vim.health.ok('Data file loaded: ' .. #tasks .. ' tasks') local recur = require('pending.recur') local invalid_count = 0 for _, task in ipairs(tasks) do if task.recur and not recur.validate(task.recur) then invalid_count = invalid_count + 1 vim.health.warn('Task ' .. task.id .. ' has invalid recurrence spec: ' .. task.recur) end end if invalid_count == 0 then vim.health.ok('All recurrence specs are valid') end else vim.health.error('Failed to load data file: ' .. tostring(err)) end else vim.health.info('No data file yet (will be created on first save)') end local sync_paths = vim.fn.globpath(vim.o.runtimepath, 'lua/pending/sync/*.lua', false, true) if #sync_paths == 0 then vim.health.info('No sync backends found') else for _, path in ipairs(sync_paths) do local name = vim.fn.fnamemodify(path, ':t:r') local bok, backend = pcall(require, 'pending.sync.' .. name) if bok and backend.name and type(backend.health) == 'function' then vim.health.start('pending.nvim: sync/' .. name) backend.health() end end end end return M