我在使用TabNine过程中遇到过的几个缺陷

我也觉得TabNine很好用,但是使用过程中还是发现了几个缺陷。

一个是后台占用问题。 这个可能是因为我在WSL下使用TabNine,即使是非常小型的项目也会让风扇狂转。

另一个问题是提示准确度的问题。 我非常喜欢代码提示的一个原因是我背不下来函数名,同时代码提示能纠正我的错误,譬如一个aabbccdd的函数我敲成aabc,代码提示也能更正过来。

然而使用了TabNine之后,由于它“太过智能”,甚至会直接补全上aabccdd,这就导致一些错误的隐藏。而在python这种动态语言中,这种错误可能会导致一个错误的变量名和一场debug的灾难😂

不知道坛友有没有发现其他问题,或者对于我的问题有什么好的解决方案呢?

解决方案:不用(

TabNine不是开源而是闭源产品,正式版要花钱,作者是老外,company-tabnine只是emacs端的补全接口,在这里提意见聊缺陷没卵用,接受不了就不用吧

anyways,折中的方案,tabnine和lsp一起用

我不是在抱怨TabNine的问题……我只是觉得这一类产品(利用AI智能补全)都会遇到这些问题,因为我认为神经网络使得补全更加人性化的同时必然会在补全的准确性上做出妥协,因此这不是最优解。

所以我想知道有没有更好的解决方案。

这就是动态弱类型语言的缺陷了,和工具无关,甚至重构都会出现错误隐藏,换个强类型的语言吧。

2 个赞

这最优解的难度不亚于AI编程

还是直接 LSP 算了,用这个费劲

3 个赞

tabnine过补全的问题也算比较困扰了,我的tabnine甚至连空格都想给我补全。

还希望哪一天微软能让wsl也用上GPU。

company-tabnine 这个可以在使用company的时候可以toggle这个tabnine吗?有时候笔记本电脑性能想关闭这个tabnine,同时又想使用company的补全。有时候台式电脑上可能又会使用到这个tabnine。

company-backends的文档读一下。

另外可以用advice,可参考我怎么改 company-ispell的。 https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-company.el

可以的,我是这样弄的,我大部分时候都是关着这个 tabnine 的,电脑性能实在孱弱,开着它卡得不行

(defun lxs/toggle-tabnine ()
    "temporally close or open tabnine, for saving cpu cost."
    (interactive)
    (if company-tabnine--disabled
	(progn (setq company-tabnine--disabled nil)
	       (message "tabnine enabled"))
      (setq company-tabnine--disabled t)
      (message "tabnine disabled!")
      )
    )

不知道是不是和语言有关,我用 tabnine 来写 Rust 表示很流畅,其他语言用的是 LSP,Rust 的 LSP (应该是 rust-analyzer 的锅)补全比较卡。

可能我在 wsl 里面用,电脑是 x1 carbon,本身性能也比较孱弱