Skip to content
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

Should delimiter autodetect work in Neovim 0.8.1? #41

Open
jweckman opened this issue Dec 4, 2022 · 4 comments
Open

Should delimiter autodetect work in Neovim 0.8.1? #41

jweckman opened this issue Dec 4, 2022 · 4 comments

Comments

@jweckman
Copy link

jweckman commented Dec 4, 2022

I deal with a balanced mix of files with , and ; delimiters and for some reason i've never been able to autodetect semicolons. If i forcibly set every csv file to csv_semicolon it works but it is as if i can't get the autodetect to run at all.

First i played around with various configs to see if they would change anything but e.g these did nothing:
vim.g.disable_rainbow_csv_autodetect = 0
vim.g.rbql_with_headers = 1
vim.g.rcsv_delimiters = {";"}
vim.g.rbql_use_system_python = 1

Despite zero vimscript knowledge, i even tried debugging the code with error messages. From what i can tell it seems that no autodetect code is ever run on file open. It always stops doing anything when it finds that "rainbow_features_enabled" is on and just always set the file type to "csv" with this:
execute "set ft=" . ft_power_cycle

Am i just dumb or why is it not able to detect that e.g this is a semicolon file?:

date;amount;other_party;category;account;recipient;bank;description
2018-05-31;148.35;p;data;a;b;;data
2018-05-31;415;p;data;a;b;;data
2018-05-31;-2.6;p;data;a;b;;data
2018-06-01;-2.6;p;data;a;b;;data

Manually setting it works fine but not auto. Is there a config i'm missing?

@mechatroner
Copy link
Owner

Hi, this looks strange, I tested your file and autodetection worked for me as expected.
BTW, you can try to set vim.g.rcsv_delimiters = [";", ","] it should be an array, not a dictionary.
Maybe you can also try to update rainbow_csv if you are using not the latest version.
Also, autodetection doesn't work if the number of lines is less than 5, but in the case of your file, it should be fine since it has exactly 5 lines.

@jweckman
Copy link
Author

jweckman commented Dec 5, 2022

Thanks for quick reply.
Sorry i forgot to mention that i configure global variables and most other things in lua, which is why the assignment looks strange (everything is a "table" in lua). Running :echo g:rcsv_delimiters returns [';', ',']. I tried with your specific suggestion and still same result on the test file and larger "real" ones. I also tried with a minimal config that only imports your plugin and sets the global but no luck.

Also using latest version of the plugin.

Do you think you could make a quick check using latest stable neovim? Should be very easy to install from here:
https://github.com/neovim/neovim/releases/tag/stable
If you are on linux you can simply download and execute the appimage.

This is the init.vim config i used:

" auto-install vim-plug
if empty(glob('~/.config/nvim/autoload/plug.vim'))
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

autocmd VimEnter * PlugInstall | source $MYVIMRC
endif

" Plug
call plug#begin('~/.vim/plugged')
Plug 'mechatroner/rainbow_csv'

call plug#end()

lua << EOF
vim.g.mapleader = " "
vim.opt.termguicolors = false
vim.g.rcsv_delimiters = {";", ","}
EOF

Alternatively it would be nice to have an explanation on how the autodetect works. To my eyes it looks like it does some kind of caching not to keep setting the type for the same file over and over. If my cache is somehow acting up it would be nice to know how it works.

@mechatroner
Copy link
Owner

Thanks, I might try to reproduce this when I have more time. If you want you can also try to debug this further by using "echo"/"echom"/"messages" commands inside the autodetection call stack.
The extension caches autodetection results in `~/.rbql_table_index' text file so you can also try to clean/remove the file or see if it contains suspicious entries and remove them.

@jweckman
Copy link
Author

jweckman commented Dec 6, 2022

I removed the rbql_table_index and found that its contents are set correctly for my file if i do it manually via RainbowDelim. What is very interesting is that even if the only file contents are as follows:
/home/joakim/ksjgsg.csv ; quoted @auto_comment_prefix@

The delimiter loading fails when i open the file. Even more interesting is that it DOES load correctly if i e.g. add this echoerr to the following location:

func! rainbow_csv#handle_syntax_change()
    let [delim, policy, comment_prefix] = rainbow_csv#get_current_dialect()
    echoerr 'delim:' .. delim

Then it prints the correct delimiter ";", stops executing certain code and highlighting works as expected. Looks to me like there is some code that resets the delimiter or makes the highlighting fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants