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 :cnext<CR>
|
||||||
nnoremap <silent> [q :cprev<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 (,?) ────────────────────────────────────────────────────────
|
" ── Cheat Sheet (,?) ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
function! s:CheatSheet() abort
|
function! s:CheatSheet() abort
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue