@@ -25,7 +25,7 @@ import Control.Monad.Trans.Class
25import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
25import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
26import Control.Monad.Trans.State
26import Control.Monad.Trans.State
28−import Data.List (intercalate, isPrefixOf, nub, sort)
28+import Data.List (intercalate, isPrefixOf, nub, sortBy)
29import Data.Maybe (mapMaybe)
29import Data.Maybe (mapMaybe)
30import Data.Traversable (traverse)
30import Data.Traversable (traverse)
@@ -158,17 +158,20 @@ completion ms = completeWord Nothing " \t\n\r" findCompletions
158 findCompletions :: String -> IO [Completion]
158 findCompletions :: String -> IO [Completion]
159 findCompletions str = do
159 findCompletions str = do
160 files <- listFiles str
160 files <- listFiles str
161− let names = nub [ show qual
162− | P.Module moduleName ds <- ms
163− , ident <- mapMaybe getDeclName ds
164− , qual <- [ P.Qualified Nothing ident
165− , P.Qualified (Just moduleName) ident]
167− let matches = sort $ filter (isPrefixOf str) names
161+ let matches = filter (isPrefixOf str) names
168− return $ map simpleCompletion matches ++ files
162+ return $ sortBy sorter $ map simpleCompletion matches ++ files
169 getDeclName :: P.Declaration -> Maybe P.Ident
163 getDeclName :: P.Declaration -> Maybe P.Ident
170 getDeclName (P.ValueDeclaration ident _ _ _) = Just ident
164 getDeclName (P.ValueDeclaration ident _ _ _) = Just ident
171 getDeclName _ = Nothing
165 getDeclName _ = Nothing
167+ names = nub [ show qual
168+ | P.Module moduleName ds <- ms
169+ , ident <- mapMaybe getDeclName ds
170+ , qual <- [ P.Qualified Nothing ident
171+ , P.Qualified (Just moduleName) ident]
173+ sorter :: Completion -> Completion -> Ordering
174+ sorter (Completion _ d1 _) (Completion _ d2 _) = compare d1 d2
173-- Compilation
176-- Compilation