rescript-lang / rescript-lang/vim-rescript
Omni completion for items without documentation
还没有人认领这个 Issue。
- 主要语言
- Vim Script
- 星标
- 164
- 派生
- 17
- PR 合并指标
- 30 天内没有已合并 PR
描述
Under the hood, rescript-editor-analysis.exe returns null instead of an object/dict when a completion item has no documentation. This results in multiple errors in rescript#Complete.
A minimal example with vim-plug and the latest versions of vim-rescript and rescript (tested in VIM 8.2 and in Neovim 0.6.1):
~/.vimrc or ~/.config/nvim/init.vim:
call plug#begin()
Plug 'rescript-lang/vim-rescript'
call plug#end()
set omnifunc=rescript#Complete
set completeopt+=preview
Example.res:
let myInteger = 1
let myString = "2"
Also needed:
- complete/completion mismatch fix: #56
Make sure the project is built. Type let my as the last line of Example.res and hit <C-x><C-o> in insert mode. You'll get the following errors twice:
Error detected while processing function rescript#Complete:
line 36:
E121: Undefined variable: value
Press ENTER or type command to continue
Error detected while processing function rescript#Complete:
line 38:
E121: Undefined variable: entry
Press ENTER or type command to continue
Error detected while processing function rescript#Complete:
line 38:
E116: Invalid arguments for function add(l:ret, entry)
Press ENTER or type command to continue
After hitting ENTER enough times:
-- Omni completion (^O^N^P) Pattern not found
I think the problem lies here:
item.documentation is null for undocumented matches.
I tried to replace the offending line with the following, and now omni completion works both for built-in items and for undocumented local items (but I'm no expert in vimscript, so this may be a silly way to do it):
if type(item.documentation) == v:t_dict
let l:info = item.documentation.value
else
let l:info = item.detail " or some default value
endif
let entry = { 'word': item.label, 'kind': l:kind, 'info': l:info }
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 autoload/rescript.vim 约第 369 行开始,在 Vim 或 Neovim 中复现 issue 中的补全案例之前先构建项目。检查 item.documentation 为 null 时的处理方式,并以 #56 中的补全不匹配修复作为上下文。内置的和没有文档的本地项都能完成补全,且不再出现报告的错误,即视为完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- vim
- 领域
- tooling
- Issue 类型
- 缺陷
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 68/100