uga-rosa / cmp-dictionary

A dictionary completion source for nvim-cmp
MIT License
236 stars 16 forks source link

Error message in trie.lua #58

Closed kekscode closed 5 months ago

kekscode commented 5 months ago

Any idea what i do wrong here?

Error on startup:

Error executing luv callback:
...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:45: bad argument #1 to 'decode' (string expected, got nil)
stack traceback:
    [C]: in function 'decode'
    ...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:45: in function <...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:44>
Error in luv thread:
...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:42: too deep to serialize

Config (lazy):

  {
    "uga-rosa/cmp-dictionary", -- dictionary manager
    enabled = true,
    build =
    'brew install aspell && brew install wordnet && aspell -d en dump master | aspell -l en expand >$HOME/en.dict && aspell -d de dump master | aspell -l de expand >$HOME/de.dict',
    config = function()
      require("cmp_dictionary").setup({
        paths = {
          "/usr/share/dict/words", vim.fn.expand('$HOME/de.dict'), vim.fn.expand('$HOME/en.dict'),
        },
        exact_length = 2,
        first_case_insensitive = true,
        document = {
          enable = true,
          command = { "wn", "${label}", "-over" },
        },
      })
    end
  },

neovim:

 vim --version
NVIM v0.9.5
Build type: Release
LuaJIT 2.1.1703358377

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/opt/homebrew/Cellar/neovim/0.9.5/share/nvim"

Run :checkhealth for more info
uga-rosa commented 5 months ago

Hmm. This is the first error I've seen, but the cause is predictable. You are using a dictionary that contains rather long words, aren't you? I can solve the problem itself (using vim.json to serialize), but it slows me down somewhat. Can you tell me what dictionary you are using?

uga-rosa commented 5 months ago

Does 51c48f9 fix it?

kekscode commented 5 months ago

Does 51c48f9 fix it?

Not quite, the error now reads:

Error in luv thread:
...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:40: Cannot serialise, excessive nesting (1001)
Error executing luv callback:
...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:43: bad argument #1 to 'decode' (string expected, got nil)
stack traceback:
    [C]: in function 'decode'
    ...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:43: in function <...vim/lazy/cmp-dictionary/lua/cmp_dictionary/dict/trie.lua:42>

It worked before using https://github.com/uga-rosa/cmp-dictionary/issues/56 if that helps with the same dictionaries de and en. I added the wordnet stuff while migrating my config to v3 though, so it is not really comparable. I'll come back to your question about the dictionary data i use in a sec.

kekscode commented 5 months ago

Hmm. This is the first error I've seen, but the cause is predictable. You are using a dictionary that contains rather long words, aren't you? I can solve the problem itself (using vim.json to serialize), but it slows me down somewhat. Can you tell me what dictionary you are using?

w=/usr/share/dict/words && wc $w && wc --max-line-length $w 
235976  235976 2493885 /usr/share/dict/words
28 /usr/share/dict/words

w=$HOME/de.dict && wc $w && wc --max-line-length $w
84577  382300 5043131 /Users/<redacted>/de.dict
1047 /Users/<redacted>/de.dict

w=$HOME/en.dict && wc $w && wc --max-line-length $w
127351  127351 1232855 /Users/<redacted>/en.dict
24 /Users/<redacted>/en.dict

The dicts are unpacked using:

brew install aspell && brew install wordnet && aspell -d en dump master | aspell -l en expand >$HOME/en.dict && aspell -d de dump master | aspell -l de expand >$HOME/de.dict
uga-rosa commented 5 months ago

Hmmm, there is supposed to be a single word with more than 500 bytes. Perhaps it is not compatible with the new format of the dictionary.

uga-rosa commented 5 months ago

I have checked the dictionary and understand. It's because of the change in dictionary specifications (:h cmp-dictionary-option-paths). I only used newlines as word separators (to be able to use external commands like look, grep, etc.). If you replace all the white space in the dictionary with newlines, it should work.

aspell -d de dump master | aspell -l de expand | sed 's/\s\+/\n/g' > de.dict
uga-rosa commented 5 months ago

I fixed the Find dictionaries chapter of the documentation.

kekscode commented 5 months ago

I have checked the dictionary and understand. It's because of the change in dictionary specifications (:h cmp-dictionary-option-paths). I only used newlines as word separators (to be able to use external commands like look, grep, etc.). If you replace all the white space in the dictionary with newlines, it should work.

aspell -d de dump master | aspell -l de expand | sed 's/\s\+/\n/g' > de.dict

wow... you're awesome, it just works now!

Full config line for lazy's build parameter:

build = [[brew install aspell && brew install wordnet && aspell -d en dump master | aspell -l en expand | sed "s/\s\+/\n/g" >$HOME/en.dict && aspell -d de dump master | aspell -l de expand | sed "s/\s\+/\n/g" >$HOME/de.dict]],

The lua [[ and ]] are helpful to avoid issues with nesting and escape sequence interpretation.

uga-rosa commented 5 months ago

I'm glad it's fixed.

Myzel394 commented 5 months ago

I'm facing the same issue though creating a new dict using aspell -d de dump master | aspell -l de expand | sed 's/\s\+/\n/g' > de.dict doesn't work for me :/

EDIT:

Nevermind, forgot to wrap my path with vim.fn.expand