This commit is contained in:
Ray Elliott 2026-10-27 13:49:50 +00:00
commit dd3965a777
619 changed files with 136 additions and 110 deletions

View file

@ -64,7 +64,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
- [x] Confirm scope and priorities for this subphase
- [x] Decision: Use native `exrc` + `secure` instead of neoconf (neoconf incompatible with Neovim 0.11+ vim.lsp.config API)
- [x] Enable `exrc` and `secure` in settings.lua
- [x] Implement `.nvim.lua` loader in LSP config using `on_new_config` hook
- [x] Implement `.nvim.lua` loader in an `LspAttach` callback using the client's actual root directory
- [x] Wire `intelephense.environment.includePaths` via `.nvim.lua`
- [x] Create validation workspaces: `WORKSPACE_TEST/` and `EXTERNAL_TEST/` with sample PHP files
- [x] Migrate to `vim.lsp.config()` and `vim.lsp.enable()` (Neovim 0.11+ native API)
@ -74,18 +74,18 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
## Phase 3.7 — Clean LSP config
- [x] Remove debug/helper logic from LSP config
- [x] Migrate from deprecated `require('lspconfig')[server].setup()` to `vim.lsp.config()` + `vim.lsp.enable()`
- [x] Use `on_new_config` hook for project-local settings loading (loads from actual root_dir, not cwd)
- [x] Use `LspAttach` for project-local settings loading (loads from actual root_dir, not cwd)
## Phase 3.8 — Validate project-local LSP settings
- [x] Create test workspaces with `.nvim.lua` files
- [x] Validate settings load from actual root_dir via `on_new_config` hook
- [x] Validate settings load from the attached client's actual root_dir
- [x] Verify `gd` works for external library references via `intelephense.environment.includePaths`
- [x] Clean up debug code and notifications
## Phase 3.9 — Native exrc + vim.lsp.config migration (RESOLVED)
- [x] Discovered neoconf incompatible with Neovim 0.11+ (GitHub issue #116, unresolved since May 2024)
- [x] Migrated to native `exrc` + `secure` approach (zero dependencies, aligned with minimal philosophy)
- [x] Implemented `.nvim.lua` loader using `on_new_config` hook (loads from actual root_dir)
- [x] Implemented secure `.nvim.lua` loading during `LspAttach` (loads from actual root_dir)
- [x] Migrated from deprecated `require('lspconfig')` framework to `vim.lsp.config()` + `vim.lsp.enable()`
- [x] Root detection handled by nvim-lspconfig's native configs (no custom root_dir needed)
- [x] Validated `gd` works for external library symbols via `intelephense.environment.includePaths`
@ -99,7 +99,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
- [x] Add minimal LSP on-attach keymaps (gd, gr, K, gD, gI)
- [x] Add global LSP keymaps with fallback in `lua/keymaps.lua`
- [x] Intelephense: set `single_file_support=false`, root detection via nvim-lspconfig defaults
- [x] Project settings loaded via `on_new_config` hook from `.nvim.lua` files
- [x] Project settings securely loaded during `LspAttach` from `.nvim.lua` files
## Phase 3.6 — LSP server management (Mason)
- [x] Confirm scope and priorities for this subphase
@ -263,7 +263,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
## Phase 9.1 — Confirm scope and priorities
- [x] Confirm scope and priorities for this phase
- [x] Decision: Formatters - prettier (JS/TS/CSS/JSON/MD/HTML), phpcbf (PHP), stylua (Lua), black (Python)
- [x] Decision: Formatters - prettier (JS/TS/CSS/JSON/MD/HTML), phpcbf (PHP), stylua (Lua), ruff_format via conform (Python; supersedes the original black plan)
- [x] Decision: Linters - eslint (JS/TS), phpcs (PHP), markdownlint (Markdown), ruff (Python)
- [x] Decision: Project-local executables preferred, fallback to global (node_modules/.bin/, vendor/bin/)
- [x] Decision: phpcs/phpcbf already installed globally with WordPress coding standards - no installation needed
@ -295,7 +295,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
## Phase 9.3 — Mason formatter/linter installation
- [x] Add `WhoIsSethDaniel/mason-tool-installer.nvim` for automated installation
- [x] Install via Mason: prettier, eslint_d, markdownlint, stylua, black, ruff
- [x] Install via Mason: prettier, eslint_d, markdownlint, stylua, and ruff
- [x] Note: phpcs/phpcbf already installed globally, skip Mason installation
- [x] Verify all tools available: Tools installed to ~/.local/share/nvim/mason/bin/
@ -417,7 +417,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
- HTML: @ClassNameAttribute, @IdAttribute, @DataAttribute (all fg_weak for attribute names)
- HTML: @DataAttributeValue (Function)
- Cross-language: class values and #id values in HTML use same colors as CSS selectors
- [ ] Test with existing custom queries (after/queries/css/highlights.scm, after/queries/html/highlights.scm)
- [x] Test with existing custom queries (after/queries/css/highlights.scm, after/queries/html/highlights.scm)
## Phase 11.8 — Plugin highlight groups
- [x] Create `lua/paper-tonic-modern/groups/lsp.lua`
@ -453,11 +453,11 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
- Colorscheme loads correctly: `vim.g.colors_name = 'paper-tonic-modern'`
## Phase 11.10 — Validation and polish
- [ ] Test all primary languages (Lua, PHP, HTML, CSS, JS, Markdown)
- [ ] Verify semantic consistency (CSS classes in HTML match CSS files)
- [ ] Check plugin UI colors (Telescope, Gitsigns, nvim-cmp)
- [ ] Verify LSP diagnostics are visible and distinct
- [ ] Document color scheme in README
- [x] Test all primary language parsers (Lua, PHP, HTML, CSS, JS, Markdown)
- [x] Verify semantic highlight captures for matching CSS/HTML classes and IDs load correctly
- [x] Check configured plugin UI highlight groups (Telescope, Gitsigns, nvim-cmp)
- [x] Verify LSP diagnostic highlight groups are defined and distinct
- [x] Document color scheme in README
## Phase 11.11 — Extract to separate repo (later)
- [ ] Move to `~/projects/paper-tonic-modern/`
@ -468,13 +468,15 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
## Phase 12 — Cleanup & Validation
## Phase 12.1 — Confirm scope and priorities
- [ ] Confirm scope and priorities for this phase
- [x] Confirm scope and priorities for this phase
## Phase 12.2 — Retire legacy files
- [ ] Retire legacy Vimscript files (keep for reference until verified)
- [x] Retire tracked `.vimtmp` backup artifacts and prevent them from being re-added
- [x] Retire the broken `legacy/paper-tonic-original` symlink
- [x] Keep the meaningful legacy Vimscript archive as historical reference
## Phase 12.3 — Startup performance
- [ ] Validate startup performance (no errors, fast launch)
- [x] Validate startup performance (clean headless launch in approximately 45 ms on 2026-10-27)
## Phase 12.4 — Navigation validation
- [ ] Validate Telescope navigation + LSP jumps
@ -488,10 +490,13 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date.
- [ ] Verify LSP (gd, gr, K, diagnostics)
- [ ] Verify formatting (prettier, phpcbf, stylua)
- [ ] Verify linting (eslint_d, phpcs, markdownlint)
- [x] Confirm primary Tree-sitter parsers and HTML/CSS custom queries load
- [x] Confirm Intelephense attaches with secure project-local includePaths
- [x] Confirm configured formatter and linter executables resolve
## Phase 12.6 — Final polish
- [x] Review all keymaps and ensure they're documented (README.md + :KeymapsGuide)
- [ ] Update LOG.md with final architecture and usage
- [x] Update LOG.md with final architecture and usage
- [ ] Clean up any remaining debug code or temporary comments
---
@ -511,5 +516,5 @@ Decisions & Changes:
- **vim.lsp.config migration**: Migrated from deprecated `require('lspconfig')[server].setup()` to `vim.lsp.config()` + `vim.lsp.enable()` (Neovim 0.11+ native API).
- **Project config format**: `.nvim.lua` files return `{ lsp = { [server_name] = { settings = {...} } } }`.
- **Security model**: `secure` mode prompts user to trust `.nvim.lua` files before execution (one-time per file hash).
- **Settings loading**: `on_new_config` hook loads project settings from actual `root_dir` (not cwd), ensuring correct behavior across different workspace structures.
- **Settings loading**: An `LspAttach` callback securely reads project settings from the client's actual `root_dir` (not cwd), ensuring correct behavior across different workspace structures.
- **Phase 4 Navigation Strategy**: Skipped Neo-tree in favor of built-in netrw for visual context and project structure browsing. Telescope for fuzzy finding. Oil.nvim for file manipulation (evaluation phase; alternative is mini.files). Rationale: User needs visual context and preview, not per-tab roots or complex tree features. File manipulation primarily done in shell, but Oil.nvim handles buffer sync issues when renaming/moving files.