update
This commit is contained in:
parent
b1967bc6a1
commit
dd3965a777
619 changed files with 136 additions and 110 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,6 +2,7 @@ bundle/
|
||||||
autoload/
|
autoload/
|
||||||
undodir/*
|
undodir/*
|
||||||
.vimtmp/*
|
.vimtmp/*
|
||||||
|
legacy/.vimtmp/
|
||||||
view/*
|
view/*
|
||||||
tmpdir
|
tmpdir
|
||||||
WORKSPACE_TEST/
|
WORKSPACE_TEST/
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ This repository is being migrated to a modern, minimal Neovim setup driven by Lu
|
||||||
- Spell & text: `spelllang=en_gb`, custom `listchars`, `showbreak`.
|
- Spell & text: `spelllang=en_gb`, custom `listchars`, `showbreak`.
|
||||||
- Keyword characters: `iskeyword+=$` (for PHP/shell variables), `iskeyword+=-` (for CSS/HTML/config files).
|
- Keyword characters: `iskeyword+=$` (for PHP/shell variables), `iskeyword+=-` (for CSS/HTML/config files).
|
||||||
|
|
||||||
## Current Status (Phase 10 Complete)
|
## Current Status (Phase 12 In Progress)
|
||||||
- ✅ Phase 1-2: Archive legacy, bootstrap lazy.nvim
|
- ✅ Phase 1-2: Archive legacy, bootstrap lazy.nvim
|
||||||
- ✅ Phase 3: Core editing & LSP (native exrc + vim.lsp.config migration complete)
|
- ✅ Phase 3: Core editing & LSP (native exrc + vim.lsp.config migration complete)
|
||||||
- ✅ Phase 4: Navigation (Telescope, netrw, Oil.nvim)
|
- ✅ Phase 4: Navigation (Telescope, netrw, Oil.nvim)
|
||||||
|
|
@ -117,7 +117,8 @@ This repository is being migrated to a modern, minimal Neovim setup driven by Lu
|
||||||
- ✅ Phase 8: Copilot integration (copilot.lua + copilot-cmp)
|
- ✅ Phase 8: Copilot integration (copilot.lua + copilot-cmp)
|
||||||
- ✅ Phase 9: Formatting & Linting (conform.nvim, nvim-lint, Mason tool installer)
|
- ✅ Phase 9: Formatting & Linting (conform.nvim, nvim-lint, Mason tool installer)
|
||||||
- ✅ Phase 10: Migrate kept behaviors (abbreviations, templates, custom Treesitter queries)
|
- ✅ Phase 10: Migrate kept behaviors (abbreviations, templates, custom Treesitter queries)
|
||||||
- ⏸️ Phase 11: Cleanup & validation (pending)
|
- ✅ Phase 11: Modern Paper Tonic colorscheme
|
||||||
|
- ⏳ Phase 12: Cleanup and validation (repository cleanup and automated checks complete; interactive workflow checks remain)
|
||||||
|
|
||||||
## Migration Notes
|
## Migration Notes
|
||||||
- Do not edit legacy Vimscript files except to extract settings to Lua. Keep them intact until migration completes.
|
- Do not edit legacy Vimscript files except to extract settings to Lua. Keep them intact until migration completes.
|
||||||
|
|
@ -138,7 +139,7 @@ This repository is being migrated to a modern, minimal Neovim setup driven by Lu
|
||||||
- **Project-local config**: Native `exrc` + `secure` (no neoconf - incompatible with 0.11+)
|
- **Project-local config**: Native `exrc` + `secure` (no neoconf - incompatible with 0.11+)
|
||||||
- **Config format**: `.nvim.lua` files return `{ lsp = { [server_name] = { settings = {...} } } }`
|
- **Config format**: `.nvim.lua` files return `{ lsp = { [server_name] = { settings = {...} } } }`
|
||||||
- **Security**: `secure` mode prompts user to trust `.nvim.lua` files (one-time per file hash)
|
- **Security**: `secure` mode prompts user to trust `.nvim.lua` files (one-time per file hash)
|
||||||
- **Settings loading**: `on_new_config` hook loads from actual `root_dir` (not cwd)
|
- **Settings loading**: `LspAttach` securely reads `.nvim.lua` from the client's actual `root_dir` (not cwd)
|
||||||
- **PHP**: intelephense with `single_file_support = false`, uses `environment.includePaths` for external libs
|
- **PHP**: intelephense with `single_file_support = false`, uses `environment.includePaths` for external libs
|
||||||
|
|
||||||
### Navigation Strategy
|
### Navigation Strategy
|
||||||
|
|
|
||||||
99
LOG.md
99
LOG.md
|
|
@ -76,7 +76,7 @@ Record every decision here with a short rationale. Append new entries; do not re
|
||||||
- **Format-on-save**: Enabled by default, toggle with `<leader>lt`
|
- **Format-on-save**: Enabled by default, toggle with `<leader>lt`
|
||||||
- **Manual format**: `<leader>lf` (buffer), `<leader>lf` (visual range)
|
- **Manual format**: `<leader>lf` (buffer), `<leader>lf` (visual range)
|
||||||
- **Linting split**: conform.nvim for formatting, nvim-lint for diagnostics (replaced none-ls after discovering phpcbf preprocessing bug)
|
- **Linting split**: conform.nvim for formatting, nvim-lint for diagnostics (replaced none-ls after discovering phpcbf preprocessing bug)
|
||||||
- **Python support**: pyright LSP, black formatter, ruff linter, treesitter parser
|
- **Python support**: pyright LSP, ruff formatter/linter, treesitter parser (the original black plan was superseded)
|
||||||
- **Per-filetype indentation**: Explicit settings per filetype to match formatters
|
- **Per-filetype indentation**: Explicit settings per filetype to match formatters
|
||||||
- PHP: tabs, 2-space display (WordPress standards)
|
- PHP: tabs, 2-space display (WordPress standards)
|
||||||
- JS/TS/CSS/JSON/HTML: 2 spaces (Prettier)
|
- JS/TS/CSS/JSON/HTML: 2 spaces (Prettier)
|
||||||
|
|
@ -178,85 +178,40 @@ Record every decision here with a short rationale. Append new entries; do not re
|
||||||
- **No overrides needed**: Modern implementation doesn't require separate override file
|
- **No overrides needed**: Modern implementation doesn't require separate override file
|
||||||
- 2025-12-12: Added keymap reference documentation (now `README.md`) + `:KeymapsGuide` floating viewer to document every configured keymap (global + plugin-specific) grouped by source file.
|
- 2025-12-12: Added keymap reference documentation (now `README.md`) + `:KeymapsGuide` floating viewer to document every configured keymap (global + plugin-specific) grouped by source file.
|
||||||
- 2025-12-12: nvim-cmp updated to disable auto-selection; confirm requires explicit item selection.
|
- 2025-12-12: nvim-cmp updated to disable auto-selection; confirm requires explicit item selection.
|
||||||
|
- 2026-10-27: Phase 12 cleanup retired 607 tracked `.vimtmp` backup artifacts and a broken legacy Paper Tonic symlink while preserving the meaningful Vimscript archive. Added an ignore rule for the retired backup directory and corrected the legacy archive index.
|
||||||
|
- 2026-10-27: Project `.nvim.lua` settings are now read with `vim.secure.read()` before evaluation. This closes the trust bypass caused by manually calling `dofile()` from the LSP attachment callback.
|
||||||
|
- 2026-10-27: Validation confirmed a clean Neovim 0.11.5 headless launch in approximately 45 ms with 29 configured plugins. Formatter and language-server executables managed by Mason are present in Mason's bin directory; PHP tools and `lua-language-server` are available system-wide.
|
||||||
|
- 2026-10-27: Repaired `test-diagnostics.lua` so its intentional unreachable-code example remains valid Lua and can be parsed by `lua_ls`.
|
||||||
|
- 2026-10-27: Live validation confirmed Intelephense attaches in `WORKSPACE_TEST` and receives the trusted external `includePaths`. Conform reports prettier, phpcbf, and stylua available; nvim-lint resolves eslint_d, phpcs, and markdownlint.
|
||||||
|
- 2026-10-27: Updated `AGENTS.md` status and LSP architecture notes to reflect completed colorscheme work and the current Phase 12 implementation.
|
||||||
|
- 2026-10-27: Added Conform's built-in `ruff_format` for Python. Ruff was already Mason-managed for diagnostics; this closes a gap where documentation claimed Python formatting but format-on-save had no Python formatter and disabled LSP fallback.
|
||||||
|
|
||||||
## Project-Local Configuration (design)
|
## Project-Local Configuration
|
||||||
|
|
||||||
Context: Projects can contain multiple git repositories (e.g., WordPress site with theme + multiple plugins). We need a way to set per-project `intelephense.includePaths` and similar without globalizing settings.
|
The final implementation uses Neovim's native `exrc` support with `secure` enabled. A project's trusted `.nvim.lua` returns an `lsp` table keyed by server name. An `LspAttach` callback securely reads settings from the client's actual root directory and sends them with `workspace/didChangeConfiguration`, so settings do not depend on Neovim's current working directory.
|
||||||
|
|
||||||
Options considered
|
Example `.nvim.lua`:
|
||||||
- Layered JSON files (recommended): `.nvim.json` (committed) + `.nvim.local.json` (gitignored)
|
|
||||||
- Walk upward from current file; collect and merge configs until reaching a boundary marker or filesystem root.
|
|
||||||
- Boundary marker: `.nvimroot` to define a workspace that can encompass multiple repos.
|
|
||||||
- Merge order: top → bottom; nearest wins on conflicts; arrays replace by default unless we later add a merge strategy.
|
|
||||||
- Pros: safe (data-only), portable, reviewable in PRs.
|
|
||||||
- Cons: less dynamic than Lua.
|
|
||||||
- Layered Lua files: `.nvim.lua` + `.nvim.local.lua`
|
|
||||||
- Pros: maximum flexibility (computed paths).
|
|
||||||
- Cons: executes code from the repo; security gates required.
|
|
||||||
- Env/direnv: rejected (decision 2025-12-06).
|
|
||||||
- Central registry file in `~/.config/nvim/`: possible later for private overrides, but not primary.
|
|
||||||
|
|
||||||
Chosen approach (confirmed)
|
```lua
|
||||||
- Use `folke/neoconf.nvim` with `.neoconf.json` at the workspace root (or project roots) to supply LSP/plugin settings. Multi-repo: keep a single `.neoconf.json` at the parent workspace folder and open Neovim from there (or use a rooter later if needed).
|
return {
|
||||||
|
lsp = {
|
||||||
Example `.neoconf.json`
|
intelephense = {
|
||||||
```
|
settings = {
|
||||||
{
|
intelephense = {
|
||||||
"lspconfig": {
|
environment = {
|
||||||
"intelephense": {
|
includePaths = {
|
||||||
"settings": {
|
|
||||||
"intelephense": {
|
|
||||||
"environment": {
|
|
||||||
"includePaths": [
|
|
||||||
"wp-content/themes/my-theme",
|
"wp-content/themes/my-theme",
|
||||||
"wp-content/plugins/custom-plugin"
|
"wp-content/plugins/custom-plugin",
|
||||||
]
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
|
||||||
```
|
|
||||||
- Files recognized per directory level:
|
|
||||||
- `.nvim.json`: checked into VCS; shared per-project defaults.
|
|
||||||
- `.nvim.local.json`: gitignored; machine-specific overrides.
|
|
||||||
- Loader behavior:
|
|
||||||
1. Start at the buffer’s directory; ascend toward root.
|
|
||||||
2. Stop at directory containing `.nvimroot` (if found) or at filesystem root.
|
|
||||||
3. At each level, if `.nvim.json` or `.nvim.local.json` exists, parse and stage for merge.
|
|
||||||
4. Merge staged configs in ascending order; nearest directory applies last.
|
|
||||||
- Path resolution:
|
|
||||||
- Relative paths resolve against the topmost boundary (i.e., `.nvimroot` directory if present; otherwise the highest directory in which a config was found). This allows referencing sibling repos (e.g., theme and plugins) from a single top-level site folder.
|
|
||||||
|
|
||||||
Example `.nvim.json`
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"lsp": {
|
|
||||||
"php": {
|
|
||||||
"intelephense": {
|
|
||||||
"includePaths": [
|
|
||||||
"wp-content/themes/my-theme",
|
|
||||||
"wp-content/plugins/custom-plugin",
|
|
||||||
"vendor/some-package/src"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Intended integration
|
Neoconf and the earlier layered JSON proposal were rejected. They remain in the chronological decision entries above only as superseded history.
|
||||||
- A helper module `lua/local_config.lua` will expose:
|
|
||||||
- `load(start_dir) -> table` collecting and merging configs
|
|
||||||
- `get(path, default)` for reads, e.g., `get({"lsp","php","intelephense","includePaths"}, {})`
|
|
||||||
- LSP wiring (in Phase 3.5):
|
|
||||||
- Read includePaths via the helper and pass to `settings.intelephense.environment.includePaths` in `lspconfig.intelephense.setup{}`.
|
|
||||||
|
|
||||||
Open items to confirm
|
|
||||||
- Confirm JSON as the format (vs Lua) for project-local config.
|
|
||||||
- Confirm `.nvimroot` as the workspace boundary marker name.
|
|
||||||
- Confirm array merge behavior (replace vs concatenate). Initial proposal: replace.
|
|
||||||
|
|
||||||
## LSP Scope (initial)
|
## LSP Scope (initial)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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] 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] 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] 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] Wire `intelephense.environment.includePaths` via `.nvim.lua`
|
||||||
- [x] Create validation workspaces: `WORKSPACE_TEST/` and `EXTERNAL_TEST/` with sample PHP files
|
- [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)
|
- [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
|
## Phase 3.7 — Clean LSP config
|
||||||
- [x] Remove debug/helper logic from 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] 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
|
## Phase 3.8 — Validate project-local LSP settings
|
||||||
- [x] Create test workspaces with `.nvim.lua` files
|
- [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] Verify `gd` works for external library references via `intelephense.environment.includePaths`
|
||||||
- [x] Clean up debug code and notifications
|
- [x] Clean up debug code and notifications
|
||||||
|
|
||||||
## Phase 3.9 — Native exrc + vim.lsp.config migration (RESOLVED)
|
## 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] 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] 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] 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] 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`
|
- [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 minimal LSP on-attach keymaps (gd, gr, K, gD, gI)
|
||||||
- [x] Add global LSP keymaps with fallback in `lua/keymaps.lua`
|
- [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] 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)
|
## Phase 3.6 — LSP server management (Mason)
|
||||||
- [x] Confirm scope and priorities for this subphase
|
- [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
|
## Phase 9.1 — Confirm scope and priorities
|
||||||
- [x] Confirm scope and priorities for this phase
|
- [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: 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: 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
|
- [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
|
## Phase 9.3 — Mason formatter/linter installation
|
||||||
- [x] Add `WhoIsSethDaniel/mason-tool-installer.nvim` for automated 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] Note: phpcs/phpcbf already installed globally, skip Mason installation
|
||||||
- [x] Verify all tools available: Tools installed to ~/.local/share/nvim/mason/bin/
|
- [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: @ClassNameAttribute, @IdAttribute, @DataAttribute (all fg_weak for attribute names)
|
||||||
- HTML: @DataAttributeValue (Function)
|
- HTML: @DataAttributeValue (Function)
|
||||||
- Cross-language: class values and #id values in HTML use same colors as CSS selectors
|
- 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
|
## Phase 11.8 — Plugin highlight groups
|
||||||
- [x] Create `lua/paper-tonic-modern/groups/lsp.lua`
|
- [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'`
|
- Colorscheme loads correctly: `vim.g.colors_name = 'paper-tonic-modern'`
|
||||||
|
|
||||||
## Phase 11.10 — Validation and polish
|
## Phase 11.10 — Validation and polish
|
||||||
- [ ] Test all primary languages (Lua, PHP, HTML, CSS, JS, Markdown)
|
- [x] Test all primary language parsers (Lua, PHP, HTML, CSS, JS, Markdown)
|
||||||
- [ ] Verify semantic consistency (CSS classes in HTML match CSS files)
|
- [x] Verify semantic highlight captures for matching CSS/HTML classes and IDs load correctly
|
||||||
- [ ] Check plugin UI colors (Telescope, Gitsigns, nvim-cmp)
|
- [x] Check configured plugin UI highlight groups (Telescope, Gitsigns, nvim-cmp)
|
||||||
- [ ] Verify LSP diagnostics are visible and distinct
|
- [x] Verify LSP diagnostic highlight groups are defined and distinct
|
||||||
- [ ] Document color scheme in README
|
- [x] Document color scheme in README
|
||||||
|
|
||||||
## Phase 11.11 — Extract to separate repo (later)
|
## Phase 11.11 — Extract to separate repo (later)
|
||||||
- [ ] Move to `~/projects/paper-tonic-modern/`
|
- [ ] 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 — Cleanup & Validation
|
||||||
|
|
||||||
## Phase 12.1 — Confirm scope and priorities
|
## 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
|
## 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
|
## 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
|
## Phase 12.4 — Navigation validation
|
||||||
- [ ] Validate Telescope navigation + LSP jumps
|
- [ ] 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 LSP (gd, gr, K, diagnostics)
|
||||||
- [ ] Verify formatting (prettier, phpcbf, stylua)
|
- [ ] Verify formatting (prettier, phpcbf, stylua)
|
||||||
- [ ] Verify linting (eslint_d, phpcs, markdownlint)
|
- [ ] 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
|
## Phase 12.6 — Final polish
|
||||||
- [x] Review all keymaps and ensure they're documented (README.md + :KeymapsGuide)
|
- [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
|
- [ ] 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).
|
- **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 = {...} } } }`.
|
- **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).
|
- **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.
|
- **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.
|
||||||
|
|
|
||||||
30
README.md
30
README.md
|
|
@ -358,7 +358,7 @@ Buffer-local keymaps available when inside a git repository:
|
||||||
| Mode | Key | Description |
|
| Mode | Key | Description |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| insert | `<C-Space>` | Manually trigger completion |
|
| insert | `<C-Space>` | Manually trigger completion |
|
||||||
| insert | `<CR>` | Confirm selection (selects first item by default) |
|
| insert | `<CR>` | Confirm the explicitly selected completion item |
|
||||||
| insert | `<C-n>` | Next completion item |
|
| insert | `<C-n>` | Next completion item |
|
||||||
| insert | `<C-p>` | Previous completion item |
|
| insert | `<C-p>` | Previous completion item |
|
||||||
| insert | `<C-e>` | Abort completion menu |
|
| insert | `<C-e>` | Abort completion menu |
|
||||||
|
|
@ -373,6 +373,32 @@ Buffer-local keymaps available when inside a git repository:
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
### Colorscheme
|
||||||
|
|
||||||
|
`paper-tonic-modern` is built into this repository and loaded from `colors/paper-tonic-modern.lua`. Its modular highlight definitions live under `lua/paper-tonic-modern/` and cover the editor UI, traditional syntax, Tree-sitter captures, LSP diagnostics, and the configured plugins.
|
||||||
|
|
||||||
|
The theme follows the system light/dark preference at startup. Use `<leader>bg` to toggle the background manually. Custom HTML and CSS Tree-sitter queries keep matching classes and IDs visually consistent across both languages.
|
||||||
|
|
||||||
|
### Project-Local LSP Settings
|
||||||
|
|
||||||
|
Native `exrc` and `secure` support are enabled. A trusted `.nvim.lua` can return an `lsp` table keyed by server name; settings are securely read from the attached LSP client's root and sent through `workspace/didChangeConfiguration`.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
lsp = {
|
||||||
|
intelephense = {
|
||||||
|
settings = {
|
||||||
|
intelephense = {
|
||||||
|
environment = {
|
||||||
|
includePaths = { "vendor/package/src" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Formatting & Linting
|
### Formatting & Linting
|
||||||
|
|
||||||
This config uses **conform.nvim** for formatting and **nvim-lint** for diagnostics. Both prefer project-local tools over global installations.
|
This config uses **conform.nvim** for formatting and **nvim-lint** for diagnostics. Both prefer project-local tools over global installations.
|
||||||
|
|
@ -393,7 +419,7 @@ Conform.nvim handles this resolution automatically via its built-in `util.find_e
|
||||||
- **JavaScript/TypeScript/CSS/JSON/HTML/Markdown**: `prettier`
|
- **JavaScript/TypeScript/CSS/JSON/HTML/Markdown**: `prettier`
|
||||||
- **PHP**: `phpcbf` (WordPress standard by default)
|
- **PHP**: `phpcbf` (WordPress standard by default)
|
||||||
- **Lua**: `stylua`
|
- **Lua**: `stylua`
|
||||||
- **Python**: handled by `ruff` LSP (not conform)
|
- **Python**: `ruff_format`
|
||||||
|
|
||||||
**Linters** (`lua/plugins/nvim-lint.lua`):
|
**Linters** (`lua/plugins/nvim-lint.lua`):
|
||||||
- **JavaScript/TypeScript**: `eslint_d`
|
- **JavaScript/TypeScript**: `eslint_d`
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue