Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 12 additions & 22 deletions src/Language/PureScript/Interactive/Completion.hs
Original file line number Diff line number Diff line change
Expand Up @@ -113,28 +113,18 @@ completionContext _ _ = [CtxIdentifier]
completeDirective :: [String] -> String -> [CompletionContext]
completeDirective ws w =
case ws of
[] -> [CtxDirective w]
[dir] -> case D.directivesFor <$> stripPrefix ":" dir of
-- only offer completions if the directive is unambiguous
Just [dir'] -> directiveArg w dir'
_ -> []

-- All directives take exactly one argument. If we haven't yet matched,
-- that means one argument has already been supplied. So don't complete
-- any others.
_ -> []

directiveArg :: String -> Directive -> [CompletionContext]
directiveArg _ Browse = [CtxModule]
directiveArg _ Quit = []
directiveArg _ Reload = []
directiveArg _ Clear = []
directiveArg _ Help = []
directiveArg _ Paste = []
directiveArg _ Show = map CtxFixed replQueryStrings
directiveArg _ Type = [CtxIdentifier]
directiveArg _ Kind = [CtxType]
directiveArg _ Complete = []
[] -> [CtxDirective w]
(x:xs) -> case D.directivesFor <$> stripPrefix ":" x of
-- only offer completions if the directive is unambiguous
Just [dir] -> directiveArg xs dir
_ -> []

directiveArg :: [String] -> Directive -> [CompletionContext]
directiveArg [] Browse = [CtxModule] -- only complete very next term
directiveArg [] Show = map CtxFixed replQueryStrings -- only complete very next term
directiveArg _ Type = [CtxIdentifier]
directiveArg _ Kind = [CtxType]
directiveArg _ _ = []

completeImport :: [String] -> String -> [CompletionContext]
completeImport ws w' =
Expand Down
11 changes: 6 additions & 5 deletions tests/TestPsci/CompletionTest.hs
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,13 @@ completionTestData supportModuleNames =
, (":kind ST.", [":kind ST.ST", ":kind ST.STRef"]) -- import Control.Monad.ST as ST
, (":kind Control.Monad.Eff.", [])

-- Only one argument for directives should be completed
-- Only one argument for these directives should be completed
, (":show import ", [])
, (":type EQ ", [])
, (":type unit compa", [])
, (":kind Ordering ", [])
, (":kind Array In", [])
, (":browse Data.List ", [])

-- These directives take any number of completable terms
, (":type const compa", [":type const compare", ":type const comparing"])
, (":kind Array In", [":kind Array Int"])

-- a few other import tests
, ("impor", ["import"])
Expand Down