mirror of
https://oauth2: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@github.com/m1ngsama/chopsticks.git
synced 2026-05-10 19:10:59 +08:00
feat: add :ChopsticksStatus diagnostic command and CHANGELOG
:ChopsticksStatus shows system tools, LSP servers, linters, and formatters with OK/missing status. Helps new users discover what to install without leaving Vim.
This commit is contained in:
parent
73a55e18e6
commit
0686f9c6be
2 changed files with 173 additions and 0 deletions
84
CHANGELOG.md
Normal file
84
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Changelog
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Added
|
||||
- `:ChopsticksStatus` diagnostic command — checks system tools, LSP servers, linters, formatters
|
||||
|
||||
## 2.1.0 — 2025-04-22
|
||||
|
||||
### Added
|
||||
- Cheat sheet (`,?`) — vertical sidebar, one key per line, section headers
|
||||
- Previm markdown preview restored (lazy-loaded, `,mp`)
|
||||
- `:LspInstallServer` added to cheat sheet
|
||||
|
||||
### Changed
|
||||
- Plugin count: 25 (restored previm, dropped 5 bloat plugins)
|
||||
- QUICKSTART updated — removed stale references, improved first-launch guidance
|
||||
|
||||
## 2.0.0 — 2025-04-21
|
||||
|
||||
### Added
|
||||
- Sidebar toggle (`,e` / `,E`) — left-side netrw with `topleft vertical`, winfixwidth, proper toggle
|
||||
- Enriched statusline — SLMode, SLGit, SLAle, SLFlags
|
||||
- Toggle feedback — F2/F3/F4/F6/`,ss` echo current state
|
||||
- `vim .` layout — netrw left + Startify right, proper proportions
|
||||
- Interactive tutorial (`:ChopsticksLearn`)
|
||||
|
||||
### Removed (Unix minimalism refactor)
|
||||
- **565 lines** of dead code and bloat
|
||||
- 5 plugins: Goyo, Limelight, vim-obsession, indentLine, vim-unimpaired
|
||||
- `modules/writing.vim` — folded into `languages.vim`
|
||||
- `tutor/chopsticks.tutor` — removed (269 lines)
|
||||
- Tab management keybindings (8 mappings), spell nav bindings (4 mappings)
|
||||
- Dead functions: HasPaste(), CleanExtraSpaces(), ToggleNumber(), SynStack
|
||||
- TTY welcome message, `,so`, `,ms`, `,sh` mappings
|
||||
|
||||
### Changed
|
||||
- CI plugin threshold lowered to 20
|
||||
- README: hero layout with demo GIF, badges, architecture diagram
|
||||
- vim-markdown settings absorbed from writing.vim into languages.vim
|
||||
|
||||
## 1.3.0 — 2025-04-20
|
||||
|
||||
### Changed
|
||||
- Startup: 39ms → 19ms (51% faster)
|
||||
- Dropped vim-unimpaired for performance
|
||||
- Runtime tuning across modules
|
||||
|
||||
## 1.2.0 — 2025-04-19
|
||||
|
||||
### Added
|
||||
- Hero README with demo GIF, CI badges
|
||||
- GitHub Actions CI (startup test on macOS + Ubuntu, shellcheck)
|
||||
- Issue/PR templates
|
||||
|
||||
### Changed
|
||||
- Documentation rewrite — clean, short, for engineers
|
||||
|
||||
## 1.1.0 — 2025-04-18
|
||||
|
||||
### Added
|
||||
- 12-module architecture (env → plugins → core → ui → editing → navigation → lsp → lint → git → writing → languages → tools)
|
||||
- Zen mode (Goyo + Limelight)
|
||||
- Run file (`,cr`) with auto filetype detection
|
||||
- Smart search (SmartFiles, Rg, RgWord)
|
||||
- EasyMotion, yank highlight, undo tree
|
||||
- Robust installer (`get.sh`) with preflight checks
|
||||
|
||||
### Changed
|
||||
- `.vimrc` split into 12 self-contained modules
|
||||
- Comprehensive bug audit (14 fixes)
|
||||
|
||||
## 1.0.0 — 2025-04-16
|
||||
|
||||
### Added
|
||||
- Initial Vim configuration — migrated from Neovim
|
||||
- vim-plug plugin manager
|
||||
- vim-lsp + asyncomplete (pure VimScript LSP)
|
||||
- ALE linting + format-on-save
|
||||
- FZF fuzzy finder
|
||||
- Fugitive + GitGutter
|
||||
- Solarized colorscheme
|
||||
- TTY detection and graceful degradation
|
||||
- Platform installer (macOS, Debian, Arch, Fedora)
|
||||
|
|
@ -114,6 +114,95 @@ augroup END
|
|||
nnoremap <silent> ]q :cnext<CR>
|
||||
nnoremap <silent> [q :cprev<CR>
|
||||
|
||||
" ── Status Diagnostic (:ChopsticksStatus) ───────────────────────────────────
|
||||
|
||||
function! s:Check(name, cmd) abort
|
||||
return executable(a:cmd) ? ' OK ' . a:name : ' -- ' . a:name . ' (missing: ' . a:cmd . ')'
|
||||
endfunction
|
||||
|
||||
function! s:LspCheck(ft, server) abort
|
||||
if !exists('*lsp#get_server_names')
|
||||
return ' -- ' . a:ft . ' (vim-lsp not loaded)'
|
||||
endif
|
||||
let l:dir = expand('~/.local/share/vim-lsp-settings/servers/' . a:server)
|
||||
if isdirectory(l:dir)
|
||||
return ' OK ' . a:ft . ' (' . a:server . ')'
|
||||
endif
|
||||
return ' -- ' . a:ft . ' (:LspInstallServer in a ' . a:ft . ' file)'
|
||||
endfunction
|
||||
|
||||
function! s:ChopsticksStatus() abort
|
||||
let l:lines = []
|
||||
call add(l:lines, 'chopsticks status')
|
||||
call add(l:lines, repeat('─', 50))
|
||||
call add(l:lines, '')
|
||||
|
||||
call add(l:lines, '── system tools ──')
|
||||
call add(l:lines, s:Check('fzf', 'fzf'))
|
||||
call add(l:lines, s:Check('ripgrep', 'rg'))
|
||||
call add(l:lines, s:Check('git', 'git'))
|
||||
call add(l:lines, s:Check('curl', 'curl'))
|
||||
call add(l:lines, s:Check('node', 'node'))
|
||||
call add(l:lines, s:Check('python3', 'python3'))
|
||||
call add(l:lines, s:Check('go', 'go'))
|
||||
call add(l:lines, '')
|
||||
|
||||
call add(l:lines, '── lsp servers ── (:LspInstallServer to install)')
|
||||
call add(l:lines, s:LspCheck('python', 'pylsp'))
|
||||
call add(l:lines, s:LspCheck('go', 'gopls'))
|
||||
call add(l:lines, s:LspCheck('rust', 'rust-analyzer'))
|
||||
call add(l:lines, s:LspCheck('typescript', 'typescript-language-server'))
|
||||
call add(l:lines, s:LspCheck('c/c++', 'clangd'))
|
||||
call add(l:lines, s:LspCheck('bash', 'bash-language-server'))
|
||||
call add(l:lines, s:LspCheck('html', 'vscode-html-language-server'))
|
||||
call add(l:lines, s:LspCheck('json', 'vscode-json-language-server'))
|
||||
call add(l:lines, s:LspCheck('yaml', 'yaml-language-server'))
|
||||
call add(l:lines, s:LspCheck('markdown', 'marksman'))
|
||||
call add(l:lines, s:LspCheck('sql', 'sqls'))
|
||||
call add(l:lines, '')
|
||||
|
||||
call add(l:lines, '── linters ──')
|
||||
call add(l:lines, s:Check('flake8 (python)', 'flake8'))
|
||||
call add(l:lines, s:Check('pylint (python)', 'pylint'))
|
||||
call add(l:lines, s:Check('eslint (js/ts)', 'eslint'))
|
||||
call add(l:lines, s:Check('staticcheck (go)', 'staticcheck'))
|
||||
call add(l:lines, s:Check('shellcheck (sh)', 'shellcheck'))
|
||||
call add(l:lines, s:Check('yamllint (yaml)', 'yamllint'))
|
||||
call add(l:lines, s:Check('hadolint (docker)', 'hadolint'))
|
||||
call add(l:lines, s:Check('markdownlint (md)', 'markdownlint'))
|
||||
call add(l:lines, '')
|
||||
|
||||
call add(l:lines, '── formatters ── (format-on-save is ON)')
|
||||
call add(l:lines, s:Check('black (python)', 'black'))
|
||||
call add(l:lines, s:Check('isort (python)', 'isort'))
|
||||
call add(l:lines, s:Check('prettier (js/ts/json/md)', 'prettier'))
|
||||
call add(l:lines, s:Check('goimports (go)', 'goimports'))
|
||||
call add(l:lines, s:Check('rustfmt (rust)', 'rustfmt'))
|
||||
call add(l:lines, s:Check('clang-format (c)', 'clang-format'))
|
||||
call add(l:lines, '')
|
||||
|
||||
let l:ok = len(filter(copy(l:lines), 'v:val =~# " OK "'))
|
||||
let l:miss = len(filter(copy(l:lines), 'v:val =~# " -- "'))
|
||||
call add(l:lines, repeat('─', 50))
|
||||
call add(l:lines, ' ' . l:ok . ' ready, ' . l:miss . ' missing')
|
||||
call add(l:lines, '')
|
||||
call add(l:lines, ' Install missing tools with ./install.sh')
|
||||
call add(l:lines, ' Install LSP servers with :LspInstallServer')
|
||||
|
||||
let l:name = '__ChopsticksStatus__'
|
||||
if bufwinnr(l:name) > 0
|
||||
execute bufwinnr(l:name) . 'wincmd w | bd'
|
||||
endif
|
||||
execute 'botright new ' . l:name
|
||||
resize 45
|
||||
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
|
||||
setlocal nowrap nonumber norelativenumber signcolumn=no
|
||||
call setline(1, l:lines)
|
||||
setlocal nomodifiable readonly
|
||||
nnoremap <buffer> <silent> q :bd<CR>
|
||||
endfunction
|
||||
command! ChopsticksStatus call s:ChopsticksStatus()
|
||||
|
||||
" ── Cheat Sheet (,?) ────────────────────────────────────────────────────────
|
||||
|
||||
function! s:CheatSheet() abort
|
||||
|
|
|
|||
Loading…
Reference in a new issue