{-# LANGUAGE OverloadedStrings #-} module Language.PureScript.Ide.Completion (getCompletions, getExactMatches) where import Prelude () import Prelude.Compat import Data.Maybe (mapMaybe) import Language.PureScript.Ide.Filter import Language.PureScript.Ide.Matcher import Language.PureScript.Ide.Types -- | Applies the CompletionFilters and the Matcher to the given Modules -- and sorts the found Completions according to the Matching Score getCompletions :: [Filter] -> Matcher -> [Module] -> [Completion] getCompletions filters matcher modules = runMatcher matcher $ completionsFromModules (applyFilters filters modules) getExactMatches :: DeclIdent -> [Filter] -> [Module] -> [Completion] getExactMatches search filters modules = completionsFromModules $ applyFilters (equalityFilter search : filters) modules completionsFromModules :: [Module] -> [Completion] completionsFromModules = foldMap completionFromModule where completionFromModule :: Module -> [Completion] completionFromModule (moduleIdent, decls) = mapMaybe (completionFromDecl moduleIdent) decls completionFromDecl :: ModuleIdent -> ExternDecl -> Maybe Completion completionFromDecl mi (FunctionDecl name type') = Just (Completion (mi, name, type')) completionFromDecl mi (DataDecl name kind) = Just (Completion (mi, name, kind)) completionFromDecl _ (ModuleDecl name _) = Just (Completion ("module", name, "module")) completionFromDecl _ _ = Nothing