Commit graph

21 commits

Author SHA1 Message Date
4a47758c9c
ci: format 2026-02-24 15:23:43 -05:00
72cbdcc775 ci: trigger fresh CI after repo rename 2026-02-24 15:23:37 -05:00
78a275d096
feat: rename 2026-02-24 15:21:44 -05:00
c69a3957c8 docs: add README
Problem: repo had no documentation for users.

Solution: add README covering usage, configuration, inline
metadata syntax, Google Calendar sync, mappings, and data
format.
2026-02-24 15:20:18 -05:00
e3416fee41 build: rename rockspec to standard luarocks format
Problem: rockspec file was named 'rockspec' instead of the
luarocks-required '<package>-<version>.rockspec' format.

Solution: rename to todo.nvim-scm-1.rockspec.
2026-02-24 15:20:12 -05:00
b00a4f01d4 fix: resolve selene lint warnings and errors
Problem: unused variables (undo_state, sha_result, date match
captures) and duplicate if/else branches in gcal sync triggered
selene warnings and errors.

Solution: prefix unused state with underscore, simplify date
validation to a single pattern match, remove dead sha_result
call, and merge duplicate event deletion branches into a single
condition.
2026-02-24 15:20:06 -05:00
edd16f6ecf fix: correct buffer parser and timestamp test
Problem: parse_buffer classified /id/-prefixed task lines as headers
because '/' matches the '^%S' header pattern. Store timestamp test
was flaky when add and update ran within the same second.

Solution: check for task line patterns (id prefix or 2-space indent)
before falling through to the header branch. Backdate the initial
modified timestamp in the store update test.
2026-02-24 15:19:59 -05:00
6cb5ae9dda
ci: format 2026-02-24 15:17:24 -05:00
5055e4a36b test: add store, parse, and diff specs
Problem: need test coverage for core data operations, inline
metadata parsing, and buffer diff algorithm.

Solution: add busted specs for store CRUD, round-trip
preservation, parse body/command_add with configurable date
syntax, and diff create/delete/update/copy/move operations.
2026-02-24 15:10:09 -05:00
126724b939 feat(health): add checkhealth integration
Problem: need a way to diagnose config, data file, and
dependency issues.

Solution: add health module reporting config values, data
directory status, task count, and curl/openssl availability.
2026-02-24 15:09:58 -05:00
9eb29f8fe1 feat(gcal): add one-way Google Calendar sync
Problem: need to push tasks with due dates to Google Calendar
as all-day events.

Solution: add gcal module with OAuth 2.0 loopback flow, PKCE,
token refresh, calendar creation, and event CRUD. Maps pending
tasks to all-day events, deletes events on completion, and
stores event IDs in task _extra for round-trip.
2026-02-24 15:09:50 -05:00
5284ef6047 feat: add commands, mappings, and plugin entry point
Problem: need user-facing :Todo command, buffer-local keymaps,
Plug mappings, completion toggle, help float, archive, and
syntax highlighting.

Solution: add init.lua with command dispatcher, toggle complete/
priority, date prompt, archive purge, and help float. Add
plugin/todo.lua entry point with :Todo command and Plug mappings.
Add syntax/todo.vim for conceal and priority highlighting.
2026-02-24 15:09:43 -05:00
c03412837d feat(diff): add buffer-to-store diff algorithm
Problem: need to reconcile buffer edits against the JSON store
on :w, handling creates, deletes, updates, reorders, and
duplicate IDs from yank/paste.

Solution: add diff module that parses buffer lines, matches
against stored tasks by ID, creates new tasks for unknown or
duplicate IDs, marks removed tasks as deleted, and updates
changed fields.
2026-02-24 15:09:36 -05:00
049e77a4fb feat(buffer): add scratch buffer with concealment and extmarks
Problem: need a buffer to display tasks with concealed IDs,
virtual text due dates, strikethrough for done items, and
auto-indent.

Solution: add buffer module with acwrite scratch buffer, syntax
conceal for /id/ prefixes, right-aligned due date extmarks,
header/done highlighting, indentexpr, and view toggling.
2026-02-24 15:09:29 -05:00
a0cbca6db5 feat(views): add category and priority view renderers
Problem: need to render task lists grouped by category or sorted
by priority with concealed IDs and metadata.

Solution: add category_view and priority_view functions that
produce buffer lines with hidden /id/ prefixes, priority flags,
and line metadata for extmark placement.
2026-02-24 15:09:22 -05:00
a8eaa27106 feat(parse): add inline metadata parser
Problem: need to extract due dates and categories from task
descriptions typed in the buffer.

Solution: add right-to-left token parser for configurable date
syntax (default 'due:') and cat: metadata keys. Supports
Category: prefix syntax for :Todo add commands.
2026-02-24 15:09:15 -05:00
607a9868d9 feat(store): add JSON data store with CRUD operations
Problem: need persistent task storage with forward-compatible
schema and unknown field preservation.

Solution: add store module with load/save, add/update/delete,
ID allocation, and UDA round-trip preservation. Data stored at
stdpath('data')/todo/tasks.json with version 1 schema.
2026-02-24 15:09:07 -05:00
116e3c5b25 feat(config): add configuration module
Problem: need user-configurable settings with sensible defaults.

Solution: add config module that merges vim.g.todo with defaults
for data_path, default_view, default_category, date_format, and
date_syntax.
2026-02-24 15:08:59 -05:00
be31f95551 ci: add GitHub workflows and issue templates
Problem: need CI for tests, quality checks, luarocks publishing,
and structured issue/discussion templates.

Solution: add test, quality, and luarocks workflows mirroring
diffs.nvim conventions. Add bug report, feature request, and
Q&A templates.
2026-02-24 15:08:53 -05:00
b617ee284e build: add tooling and dev environment configs
Problem: need formatting, linting, testing, and nix dev shell configs.

Solution: add stylua, selene, lua-language-server, busted, pre-commit,
flake.nix, and luarocks rockspec configuration.
2026-02-24 15:08:44 -05:00
717a6133cd build: initial repo scaffold
Problem: need project foundation files.

Solution: add MIT license, gitignore, and editorconfig.
2026-02-24 15:08:35 -05:00