Best practices for Denops plugin implementation drawn from lambdalisue's Denops plugins...
Use this skill to ground Denops implementation details in lambdalisue's Denops plugins only.
vars.b.get and error if missing.
Source: denops/gin/command/blame/buffer_utils.ts
https://raw.githubusercontent.com/lambdalisue/vim-gin/main/denops/gin/command/blame/buffer_utils.tsb:did_ftplugin guard + setlocal + <Plug> indirection + g: flag to disable.
Source: ftplugin/gin-status.vim
https://raw.githubusercontent.com/lambdalisue/vim-gin/main/ftplugin/gin-status.vimbatch.gather + batch.batch to reduce RPCs.
Source: denops/askpass/main.ts
https://raw.githubusercontent.com/lambdalisue/vim-askpass/main/denops/askpass/main.tsget(g:, name, default) at plugin entry.
Source: plugin/kensaku.vim
https://raw.githubusercontent.com/lambdalisue/vim-kensaku/main/plugin/kensaku.vimcollect to read v: and g: at once; coerce booleans.
Source: denops/guise/main.ts
https://raw.githubusercontent.com/lambdalisue/vim-guise/main/denops/guise/main.tsdenops#notify, then wire autocmd.
Source: plugin/chameleon.vim
https://raw.githubusercontent.com/lambdalisue/vim-chameleon/main/plugin/chameleon.vimdenops.interrupted and return Symbol.asyncDispose.
Source: denops/chameleon/main.ts
https://raw.githubusercontent.com/lambdalisue/vim-chameleon/main/denops/chameleon/main.tsfn.* calls with collect.
Source: denops/initial/main.ts
https://raw.githubusercontent.com/lambdalisue/vim-initial/main/denops/initial/main.tsdenops.interrupted with local AbortController.
Source: denops/refine/main.ts
https://raw.githubusercontent.com/lambdalisue/vim-refine/main/denops/refine/main.tsfinish, then augroup + autocmd.
Source: plugin/guise.vim
https://raw.githubusercontent.com/lambdalisue/vim-guise/main/plugin/guise.vimreferences/denops-author-examples.md and extract the closest matching example.@denops/std modules for Vim interactions instead of raw denops.call when an example shows that pattern.<Plug> indirections as shown in the references.