New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'omnifunc' の第一引数 a:findstart の型に一貫性がない #1168

Closed
machakann opened this Issue May 21, 2018 · 11 comments

Comments

Projects
None yet
4 participants
@machakann

machakann commented May 21, 2018

質問・報告の内容

確認方法

  1. 以下の内容のファイルを保存し、 :source コマンドで読み込む
function! TestOmni(findstart, base) abort
  echomsg string([a:findstart, type(a:findstart) is# v:t_number])
  if a:findstart == 1
    return -1
  endif
  return []
endfunction
setlocal omnifunc=TestOmni
  1. インサートモードに入り、 <C-x><C-o> と入力

  2. ノーマルモードに戻り :message コマンドで出力を確認する


期待するのは

[1, 1]
[0, 1]

という出力ですが、実際には

['1', 0]
[0, 1]

と、一回目の呼び出しでは数字の 1 ではなく文字列の '1' が渡されています。 :help complete-functions では a:findstart が数値とは明言されていませんが、数値を期待するのが自然かと思います。また、少なくとも数値か文字列かどちらかに統一されている方がよいと思います。

Vimのバージョン

8.1.10

OSの種類/ディストリ/バージョン

  • Windows 10 Education 64bit (10.0.17134.48)
@koron

This comment has been minimized.

Member

koron commented May 21, 2018

最初に作ったときは数字の 1 のつもりで作りました。

どういう経緯で "1" になってしまったのかは謎。

@ichizok

This comment has been minimized.

Member

ichizok commented May 21, 2018

v7.3.614
vim/vim@0cbba94
多分ここから動作が変わった (number → string) のではないかと

@machakann

This comment has been minimized.

machakann commented May 22, 2018

call_func_retnr() の引数を call_vim_function() の仕様にあわせて増やす、という方法でどうでしょう?

https://gist.github.com/machakann/ef78414c6fd696ebc68987cfcd85ac77

@ichizok

This comment has been minimized.

Member

ichizok commented May 23, 2018

最初から argvtypval_T で渡した方がよさそう
https://github.com/vim/vim/compare/master...ichizok:fix/complfunc-args.diff

@machakann

This comment has been minimized.

machakann commented May 24, 2018

こっちのほうが根本的解決みたいですね。 @ichizok さんのパッチでお願いします。

@ichizok

This comment has been minimized.

Member

ichizok commented Jun 8, 2018

PRed.
vim/vim#2993

@ichizok

This comment has been minimized.

Member

ichizok commented Jun 13, 2018

v8.1.0053
vim/vim@ffa9684

@ichizok ichizok closed this Jun 13, 2018

@ichizok ichizok added the xlose/fixed label Jun 13, 2018

@h-east

This comment has been minimized.

Member

h-east commented Jun 13, 2018

8.1.0053
vim/vim@ffa9684
数値に統一。

動作上は問題ないけど、testdir/test_ins_complete.vim に足されたテストのassert_equal()の第1引数と第2引数逆ですね。
{expected}, {actual}{actual}, {expected}になっている。☺️

(追記: うぉー。被ったw)

@machakann

This comment has been minimized.

machakann commented Jun 13, 2018

ありがとうございました!

@ichizok

This comment has been minimized.

Member

ichizok commented Jun 13, 2018

@h-east ありがとうございます。追加で修正出しました
vim/vim#2993 (comment)

@h-east

This comment has been minimized.

Member

h-east commented Jun 14, 2018

8.1.0055 👍
vim/vim@52d3aae

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment