luasnip-snippets icon indicating copy to clipboard operation
luasnip-snippets copied to clipboard

Error when inserting python snippets

Open riquems opened this issue 6 months ago • 1 comments

Hello, I'm trying to use the python snippets but they are not working on my end, I've tried using html and csharp snippet already. One csharp snippet for example is the "class" one, that does this when I hit Tab:

function provider#python3#Call, line 1: Vim(return):E5108: Error executing lua Vim:Error invoking 'python_eval' on channel 3 (python3-script-host):
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'luasnip_snippets_python_helper' is not defined
stack traceback:
^I[C]: at 0x555cbad29e70
^I[C]: in function 'py3eval'
^I...snip-snippets/lua/luasnip_snippets/common/snip_utils.lua:296: in function 'c_py'
^I...e/nvim/lazy/luasnip-snippets/lua/luasnip_snippets/cs.lua:143: in function 'fn'
^I...hare/nvim/lazy/LuaSnip/lua/luasnip/nodes/dynamicNode.lua:152: in function 'update'
^I...al/share/nvim/lazy/LuaSnip/lua/luasnip/nodes/snippet.lua:1026: in function 'update'
^I...al/share/nvim/lazy/LuaSnip/lua/luasnip/nodes/snippet.lua:769: in function 'trigger_expand'
^I...h140/.local/share/nvim/lazy/LuaSnip/lua/luasnip/init.lua:272: in function 'snip_expand'
^I...cal/share/nvim/lazy/cmp_luasnip/lua/cmp_luasnip/init.lua:169: in function 'execute'
^I../<user>/.local/share/nvim/lazy/nvim-cmp/lua/cmp/source.lua:396: in function 'execute'
^I.../<user>/.local/share/nvim/lazy/nvim-cmp/lua/cmp/entry.lua:492: in function 'execute'
^I...e/<user>/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:503: in function <...e/<user>/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:502>
^I[C]: in function 'pcall'
^I...ocal/share/nvim/lazy/nvim-cmp/lua/cmp/utils/feedkeys.lua:47: in function 'run'
^I[string ":lua"]:1: in main chunk

Since it's a "name is not defined" error I looked into the file snip_utils.lua:296 the name that it looks for and tried to import it using vim command bar with python3 import luasnip_snippets_python_helper and this happens:

E5108: Error executing lua Vim:Error invoking 'python_execute' on channel 3 (python3-script-host):                                                                 Traceback (most recent call last):                                                                                                                                   
File "<string>", line 1, in <module>                                                                                                                               
File "/home/<user>/.local/share/nvim/lazy/luasnip-snippets/pythonx/luasnip_snippets_python_helper.py", line 300, in <module>                                          @functools.cache                                                                                                                                               
AttributeError: module 'functools' has no attribute 'cache'                                                                                                        
stack traceback:                                                                                                                                                          
 [C]: at 0x555cbad29e70

From my search, it looks like functools 'cache' came only after Python 3.9, however updating it didn't work for me (I don't know if I did it right, but I downloaded Python 3.9, Python 3.12 and updated vim.g.python3_host_prog accordingly), it gives me this error when it's not set to "/usr/bin/python3.8":

nvim_exec2()..function provider#python3#Call[1]..remote#host#Require[10]..provider#python3#Require, line 1: Vim(return):E5108: Error executing lua nvim_exec2()..fu
nction provider#python3#Call[1]..remote#host#Require[10]..provider#python3#Require[1]..provider#Poll, line 17: Failed to load python3 host. You can try to see what
 happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also, the host stderr is available in messages.
stack traceback:
        [C]: at 0x562df51efe70
        [C]: at 0x562df51efe70
        [C]: in function 'pcall'
        ...m-linux64/share/nvim/runtime/lua/vim/provider/python.lua:132: in function <...m-linux64/share/nvim/runtime/lua/vim/provider/python.lua:125>
        [C]: in function 'nvim_exec2'
        vim/_editor.lua: in function 'cmd'
        ...snip-snippets/lua/luasnip_snippets/common/snip_utils.lua:289: in function 'load_python_helper'
        ...snip-snippets/lua/luasnip_snippets/common/snip_utils.lua:294: in function 'c_py'
        ...e/nvim/lazy/luasnip-snippets/lua/luasnip_snippets/cs.lua:143: in function <...e/nvim/lazy/luasnip-snippets/lua/luasnip_snippets/cs.lua:143>
Error while evaluating dynamicNode@3 for snippet 'class':
...snip-snippets/lua/luasnip_snippets/common/snip_utils.lua:62: invalid value (userdata) at index 1 in table for 'concat'

One solution for me, according to the answer of this stackoverflow thread, was to use lru_cache instead of cache in luasnip_snippets_python_helper.py:297

[email protected]
[email protected]_cache
 def cached_compile(*args):
        return compile(*args)

I don't know if that's a fix so I'm not doing a PR or anything yet, is there anything I can do to fix my end and probably help others as well? (maybe be explicit Python 3.9 >= is required?) or isn't it?

Thanks in advance.

Btw I am on WSL2 Ubuntu 20.04

riquems avatar Jul 29 '24 01:07 riquems