From 521fcf58f8b10e2bd0299f823ef8919e63d0ed28 Mon Sep 17 00:00:00 2001 From: Lemmih Date: Fri, 10 Feb 2006 18:13:19 +0000 Subject: [PATCH] Bugfix in completion code for :set and :unset. --- ghc/compiler/ghci/InteractiveUI.hs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ghc/compiler/ghci/InteractiveUI.hs b/ghc/compiler/ghci/InteractiveUI.hs index 839cee3..c5edfa6 100644 --- a/ghc/compiler/ghci/InteractiveUI.hs +++ b/ghc/compiler/ghci/InteractiveUI.hs @@ -1195,7 +1195,7 @@ completeWord w start end = do _other | Just c <- is_cmd line -> do maybe_cmd <- lookupCommand c - let (n,w') = selectWord 0 (words line) + let (n,w') = selectWord (words' 0 line) case maybe_cmd of Nothing -> return Nothing Just (_,_,False,complete) -> wrapCompleter complete w @@ -1205,10 +1205,17 @@ completeWord w start end = do | otherwise -> do --printf "complete %s, start = %d, end = %d\n" w start end wrapCompleter completeIdentifier w - where selectWord _ [] = (0,w) - selectWord n (x:xs) - | n+length x >= start = (start-n-1,take (end-n+1) x) - | otherwise = selectWord (n+length x) xs + where words' _ [] = [] + words' n str = let (w,r) = break isSpace str + (s,r') = span isSpace r + in (n,w):words' (n+length w+length s) r' + -- In a Haskell expression we want to parse 'a-b' as three words + -- where a compiler flag (ie. -fno-monomorphism-restriction) should + -- only be a single word. + selectWord [] = (0,w) + selectWord ((offset,x):xs) + | offset+length x >= start = (start-offset,take (end-offset) x) + | otherwise = selectWord xs is_cmd line | ((':':w) : _) <- words (dropWhile isSpace line) = Just w -- 1.7.10.4