From 57fa60e37527f3ec5fec752cfe7b3d625394ac9e Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Mon, 20 Sep 2021 13:50:43 +0200 Subject: [PATCH 1/3] Revert "Inline Text.Fuzzy to add INLINABLE pragmas (#2215)" This reverts commit 2869077e19406c5d4e72b432e07025732d60023a. --- ghcide/ghcide.cabal | 6 +- ghcide/src/Text/Fuzzy.hs | 116 --------------------------------------- 2 files changed, 2 insertions(+), 120 deletions(-) delete mode 100644 ghcide/src/Text/Fuzzy.hs diff --git a/ghcide/ghcide.cabal b/ghcide/ghcide.cabal index a8ac2ada44..f807faa227 100644 --- a/ghcide/ghcide.cabal +++ b/ghcide/ghcide.cabal @@ -2,7 +2,7 @@ cabal-version: 2.4 build-type: Simple category: Development name: ghcide -version: 1.4.2.1 +version: 1.4.2.0 license: Apache-2.0 license-file: LICENSE author: Digital Asset and Ghcide contributors @@ -50,6 +50,7 @@ library dlist, -- we can't use >= 1.7.10 while we have to use hlint == 3.2.* extra >= 1.7.4 && < 1.7.10, + fuzzy, filepath, fingertree, ghc-exactprint, @@ -63,7 +64,6 @@ library hiedb == 0.4.1.*, lsp-types >= 1.3.0.1 && < 1.4, lsp == 1.2.*, - monoid-subclasses, mtl, network-uri, optparse-applicative, @@ -208,8 +208,6 @@ library Development.IDE.Plugin.Completions.Logic Development.IDE.Session.VersionCheck Development.IDE.Types.Action - Text.Fuzzy - ghc-options: -Wall -Wno-name-shadowing -Wincomplete-uni-patterns -Wno-unticked-promoted-constructors if flag(ghc-patched-unboxed-bytecode) diff --git a/ghcide/src/Text/Fuzzy.hs b/ghcide/src/Text/Fuzzy.hs deleted file mode 100644 index 631cf2a3b6..0000000000 --- a/ghcide/src/Text/Fuzzy.hs +++ /dev/null @@ -1,116 +0,0 @@ --- Copyright (c) 2015 Joomy Korkut --- Forked from https://github.com/joom/fuzzy/commit/eecbdd04e86c48c964544dbede2665f72fe1f923 --- temporarily for https://github.com/joom/fuzzy/pull/3 - -{-# LANGUAGE FlexibleContexts #-} - - --- | Fuzzy string search in Haskell. --- Uses 'TextualMonoid' to be able to run on different types of strings. -module Text.Fuzzy where - -import Prelude hiding (filter) -import qualified Prelude as P - -import Data.Char (toLower) -import Data.List (sortOn) -import Data.Maybe (isJust, mapMaybe) -import Data.Monoid (mempty, (<>)) -import Data.Ord -import Data.String -import Data.Text (Text) - -import qualified Data.Monoid.Textual as T - --- | Included in the return type of @'match'@ and @'filter'@. --- Contains the original value given, the rendered string --- and the matching score. -data (T.TextualMonoid s) => Fuzzy t s = - Fuzzy { original :: t - , rendered :: s - , score :: Int - } deriving (Show, Eq) - --- | Returns the rendered output and the --- matching score for a pattern and a text. --- Two examples are given below: --- --- >>> match "fnt" "infinite" "" "" id True --- Just ("infinite",3) --- --- >>> match "hsk" ("Haskell",1995) "<" ">" fst False --- Just ("aell",5) --- -match :: (T.TextualMonoid s) - => s -- ^ Pattern. - -> t -- ^ The value containing the text to search in. - -> s -- ^ The text to add before each match. - -> s -- ^ The text to add after each match. - -> (t -> s) -- ^ The function to extract the text from the container. - -> Bool -- ^ Case sensitivity. - -> Maybe (Fuzzy t s) -- ^ The original value, rendered string and score. -match pattern t pre post extract caseSensitive = - if null pat then Just (Fuzzy t result totalScore) else Nothing - where - null :: (T.TextualMonoid s) => s -> Bool - null = not . T.any (const True) - - s = extract t - (s', pattern') = let f = T.map toLower in - if caseSensitive then (s, pattern) else (f s, f pattern) - - (totalScore, currScore, result, pat) = - T.foldl' - undefined - (\(tot, cur, res, pat) c -> - case T.splitCharacterPrefix pat of - Nothing -> (tot, 0, res <> T.singleton c, pat) - Just (x, xs) -> - if x == c then - let cur' = cur * 2 + 1 in - (tot + cur', cur', res <> pre <> T.singleton c <> post, xs) - else (tot, 0, res <> T.singleton c, pat) - ) (0, 0, mempty, pattern') s' - --- | The function to filter a list of values by fuzzy search on the text extracted from them. --- --- >>> filter "ML" [("Standard ML", 1990),("OCaml",1996),("Scala",2003)] "<" ">" fst False --- [Fuzzy {original = ("Standard ML",1990), rendered = "standard ", score = 4},Fuzzy {original = ("OCaml",1996), rendered = "oca", score = 4}] -filter :: (T.TextualMonoid s) - => s -- ^ Pattern. - -> [t] -- ^ The list of values containing the text to search in. - -> s -- ^ The text to add before each match. - -> s -- ^ The text to add after each match. - -> (t -> s) -- ^ The function to extract the text from the container. - -> Bool -- ^ Case sensitivity. - -> [Fuzzy t s] -- ^ The list of results, sorted, highest score first. -filter pattern ts pre post extract caseSen = - sortOn (Down . score) - (mapMaybe (\t -> match pattern t pre post extract caseSen) ts) - --- | Return all elements of the list that have a fuzzy --- match against the pattern. Runs with default settings where --- nothing is added around the matches, as case insensitive. --- --- >>> simpleFilter "vm" ["vim", "emacs", "virtual machine"] --- ["vim","virtual machine"] -simpleFilter :: (T.TextualMonoid s) - => s -- ^ Pattern to look for. - -> [s] -- ^ List of texts to check. - -> [s] -- ^ The ones that match. -simpleFilter pattern xs = - map original $ filter pattern xs mempty mempty id False - --- | Returns false if the pattern and the text do not match at all. --- Returns true otherwise. --- --- >>> test "brd" "bread" --- True -test :: (T.TextualMonoid s) - => s -> s -> Bool -test p s = isJust (match p s mempty mempty id False) - - -{-# INLINABLE match #-} -{-# INLINABLE filter #-} -{-# INLINABLE simpleFilter #-} From 9ae01f866d41fd43375ef0807fda6491c1fa978b Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Mon, 20 Sep 2021 19:43:59 +0200 Subject: [PATCH 2/3] do not revert ghcide version bump --- ghcide/ghcide.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghcide/ghcide.cabal b/ghcide/ghcide.cabal index f807faa227..9e7ba63dff 100644 --- a/ghcide/ghcide.cabal +++ b/ghcide/ghcide.cabal @@ -2,7 +2,7 @@ cabal-version: 2.4 build-type: Simple category: Development name: ghcide -version: 1.4.2.0 +version: 1.4.2.1 license: Apache-2.0 license-file: LICENSE author: Digital Asset and Ghcide contributors From 801e0dada5461a4e9a7e4ec6dce0a10f443dd86d Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Mon, 20 Sep 2021 20:44:27 +0200 Subject: [PATCH 3/3] Update version of fuzzy in stack.yaml --- stack-8.6.5.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stack-8.6.5.yaml b/stack-8.6.5.yaml index f928a42e31..9f9532f626 100644 --- a/stack-8.6.5.yaml +++ b/stack-8.6.5.yaml @@ -45,7 +45,7 @@ extra-deps: - Diff-0.4.0 - floskell-0.10.4 - fourmolu-0.3.0.0 - - fuzzy-0.1.0.0 + - fuzzy-0.1.0.1 - ghc-check-0.5.0.4 - ghc-events-0.13.0 - ghc-exactprint-0.6.4