Skip to content

Limit completions to top 40 #1218

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

Merged
merged 11 commits into from
Jan 18, 2021
10 changes: 9 additions & 1 deletion ghcide/src/Development/IDE/Plugin/Completions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,19 @@ getCompletionsLSP lsp ide
(Just pfix', _) -> do
let clientCaps = clientCapabilities $ shakeExtras ide
snippets <- WithSnippets . completionSnippetsOn <$> getClientConfig lsp
Completions . List <$> getCompletions ideOpts cci' parsedMod bindMap pfix' clientCaps snippets
allCompletions <- getCompletions ideOpts cci' parsedMod bindMap pfix' clientCaps snippets
let topCompletions = List $ take 20 allCompletions
isComplete = allCompletions `longerThan` 20
pure $ CompletionList (CompletionListType isComplete topCompletions)
_ -> return (Completions $ List [])
_ -> return (Completions $ List [])
_ -> return (Completions $ List [])

longerThan :: [a] -> Int -> Bool
longerThan [] _ = False
longerThan _ 0 = True
longerThan (_ : aa) n = longerThan aa (n -1)

setHandlersCompletion :: PartialHandlers Config
setHandlersCompletion = PartialHandlers $ \WithMessage{..} x -> return x{
LSP.completionHandler = withResponse RspCompletion getCompletionsLSP
Expand Down
8 changes: 5 additions & 3 deletions ghcide/src/Development/IDE/Plugin/Completions/Logic.hs
Original file line number Diff line number Diff line change
Expand Up @@ -565,9 +565,11 @@ getCompletions ideOpts CC { allModNamesAsNS, unqualCompls, qualCompls, importabl
= filtPragmaCompls (pragmaSuffix fullLine)
| otherwise
= let uniqueFiltCompls = nubOrdOn insertText filtCompls
in filtModNameCompls ++ map (toggleSnippets caps withSnippets
. mkCompl ideOpts . stripAutoGenerated) uniqueFiltCompls
++ filtKeywordCompls
in filtModNameCompls
++ filtKeywordCompls
++ map ( toggleSnippets caps withSnippets
. mkCompl ideOpts . stripAutoGenerated
) uniqueFiltCompls
return result


Expand Down