JoosepAlviste / nvim-ts-context-commentstring

Neovim treesitter plugin for setting the commentstring based on the cursor location in a file.
MIT License
1.13k stars 34 forks source link

fix: ignore Haskell char node function match #97

Open yogan opened 6 months ago

yogan commented 6 months ago

This is obviously just a hack, but without it, the autocommand is going haywire when moving around in Haskell files, making it impossible to work.

I could not find out where the function is for char nodes is coming from. Any hints / help for a proper fix are welcome.

JoosepAlviste commented 5 months ago

Hey! What exactly is going on in Haskell files? I couldn't really reproduce any weird behaviour with this file:

Example ```hs putTodo :: (Int, String) -> IO () putTodo (n, todo) = putStrLn (show n ++ ": " ++ todo) prompt :: [String] -> IO () prompt todos = do putStrLn "" putStrLn "Current TODO list:" mapM_ putTodo (zip [0..] todos) command <- getLine interpret command todos interpret :: String -> [String] -> IO () interpret ('+':' ':todo) todos = prompt (todo:todos) interpret ('-':' ':num ) todos = case delete (read num) todos of Nothing -> do putStrLn "No TODO entry matches the given number\ \hello" prompt todos Just todos' -> prompt todos' interpret "q" todos = return () interpret command todos = do putStrLn ("Invalid command: `" ++ command ++ "`") prompt todos delete :: Int -> [a] -> Maybe [a] delete 0 (_:as) = Just as delete n (a:as) = do as' <- delete (n - 1) as return (a:as') delete _ [] = Nothing main = do putStrLn "Commands:" putStrLn "+ - Add a TODO entry" putStrLn "- - Delete the numbered entry" putStrLn "q - Quit" prompt [] ```

I was moving the cursor around and didn't notice anything weird.

Maybe it's an issue with your config? Could you try a minimal config to reproduce the issue?

yogan commented 5 months ago

It does not seem to happen for all files, but I found one that cause me trouble:

module DNA (nucleotideCounts, Nucleotide (..)) where

import Data.List (group, sort)
import Data.Map (Map)
import qualified Data.Map as Map

data Nucleotide = A | C | G | T deriving (Eq, Ord, Show)

nucleotideCounts :: String -> Either String (Map Nucleotide Int)
nucleotideCounts dna = case counts of
  Just xs -> Right $ Map.fromList xs
  Nothing -> Left $ "invalid DNA strand" ++ dna
  where
    counts = mapM count $ group $ sort dna

    count :: String -> Maybe (Nucleotide, Int)
    count xs = case xs of
      [] -> Nothing
      x : _ -> case x of
        'A' -> Just (A, length xs)
        'C' -> Just (C, length xs)
        'G' -> Just (G, length xs)
        'T' -> Just (T, length xs)
        _ -> Nothing

image

   Error  08:06:29 AM msg_show.lua_error Error detected while processing CursorHold Autocommands for "<buffer=1>":
08:06:29 AM msg_show Error executing lua callback: ...-commentstring/lua/ts_context_commentstring/internal.lua:126: attempt to index local 'match' (a function value)
stack traceback:
    ...-commentstring/lua/ts_context_commentstring/internal.lua:126: in function 'calculate_commentstring'
    ...-commentstring/lua/ts_context_commentstring/internal.lua:86: in function 'update_commentstring'
    ...-commentstring/lua/ts_context_commentstring/internal.lua:33: in function <...-commentstring/lua/ts_context_commentstring/internal.lua:32>

I'll try to recreate with a minimal config…

yogan commented 5 months ago

I tried to use the minimal config from here: https://github.com/JoosepAlviste/nvim-ts-context-commentstring/blob/main/utils/minimal_init.lua

~But this does not seem to load ts-context-commentstring, only treesitter.~ Update: works just fine.

Indeed there are no issues with this minimal config, even with the problematic source file I posted in the comment above. I'll try to dig deeper where the issues are coming from…

mrcjkb commented 2 months ago

I've just encountered this in a Markdown document too:

Debug print:

commentstring_key "__default" language_config "<!-- %s -->" node_type "comment" match nil
commentstring_key "__default" language_config "<!-- %s -->" node_type "document" match nil

Edit: And now in a Lua file.