From 81ae9a884377cdbdcfda028d19b93c514d695ff2 Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 08:03:41 -0400 Subject: [PATCH 1/7] replace head with safer uncons --- ghcide/src/Development/IDE/Plugin/CodeAction.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ghcide/src/Development/IDE/Plugin/CodeAction.hs b/ghcide/src/Development/IDE/Plugin/CodeAction.hs index 05c2075881..54e7fbcccb 100644 --- a/ghcide/src/Development/IDE/Plugin/CodeAction.hs +++ b/ghcide/src/Development/IDE/Plugin/CodeAction.hs @@ -1489,7 +1489,11 @@ rangesForBindingImport _ _ = [] modifyBinding :: String -> String modifyBinding = wrapOperatorInParens . unqualify where - wrapOperatorInParens x = if isAlpha (head x) then x else "(" <> x <> ")" + wrapOperatorInParens x = + let addParens x = "(" <> x <> ")" + in case uncons x of + Just (h, _t) -> if isAlpha h then x else addParens x + Nothing -> addParens x unqualify x = snd $ breakOnEnd "." x smallerRangesForBindingExport :: [LIE GhcPs] -> String -> [Range] From f498cdec060b009768df92e80264d134e23806c7 Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 08:07:23 -0400 Subject: [PATCH 2/7] if empty, stay empty --- ghcide/src/Development/IDE/Plugin/CodeAction.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghcide/src/Development/IDE/Plugin/CodeAction.hs b/ghcide/src/Development/IDE/Plugin/CodeAction.hs index 54e7fbcccb..c618858812 100644 --- a/ghcide/src/Development/IDE/Plugin/CodeAction.hs +++ b/ghcide/src/Development/IDE/Plugin/CodeAction.hs @@ -1493,7 +1493,7 @@ modifyBinding = wrapOperatorInParens . unqualify let addParens x = "(" <> x <> ")" in case uncons x of Just (h, _t) -> if isAlpha h then x else addParens x - Nothing -> addParens x + Nothing -> mempty unqualify x = snd $ breakOnEnd "." x smallerRangesForBindingExport :: [LIE GhcPs] -> String -> [Range] From 3f50753babf331c38ae6bf1664a82e3a57d48713 Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 09:56:00 -0400 Subject: [PATCH 3/7] add test for removal of operators ending with '.' --- ghcide/test/exe/Main.hs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ghcide/test/exe/Main.hs b/ghcide/test/exe/Main.hs index ecf4e24f01..2d99bb1d8b 100644 --- a/ghcide/test/exe/Main.hs +++ b/ghcide/test/exe/Main.hs @@ -1150,6 +1150,33 @@ removeImportTests = testGroup "remove import actions" , "type T = K.Type" ] liftIO $ expectedContentAfterAction @=? contentAfterAction + , testSession "remove unused operators whose name ends with '.'" $ do + let contentA = T.unlines + [ "module ModuleA where" + , "(@.) = 0 -- Must have an operator whose name ends with '.'" + , "a = 1 -- .. but also something else" + ] + _docA <- createDoc "ModuleA.hs" "haskell" contentA + let contentB = T.unlines + [ "{-# OPTIONS_GHC -Wunused-imports #-}" + , "module ModuleB where" + , "import ModuleA (a, (@.))" + , "x = a -- Must use something from module A, but not (@.)" + ] + docB <- createDoc "ModuleB.hs" "haskell" contentB + _ <- waitForDiagnostics + [InR action@CodeAction { _title = actionTitle }, _] + <- getCodeActions docB (Range (Position 2 0) (Position 2 5)) + liftIO $ "Remove (@.) from import" @=? actionTitle + executeCodeAction action + contentAfterAction <- documentContents docB + let expectedContentAfterAction = T.unlines + [ "{-# OPTIONS_GHC -Wunused-imports #-}" + , "module ModuleB where" + , "import ModuleA (a)" + , "x = a -- Must use something from module A, but not (@.)" + ] + liftIO $ expectedContentAfterAction @=? contentAfterAction ] extendImportTests :: TestTree From 3308b94c875d96e096ff9729c6e6d37dbbc3df6c Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 10:40:07 -0400 Subject: [PATCH 4/7] make remove-import-actions tests pass --- ghcide/src/Development/IDE/Plugin/CodeAction.hs | 8 ++++++-- ghcide/test/exe/Main.hs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ghcide/src/Development/IDE/Plugin/CodeAction.hs b/ghcide/src/Development/IDE/Plugin/CodeAction.hs index c618858812..f20f31b5c9 100644 --- a/ghcide/src/Development/IDE/Plugin/CodeAction.hs +++ b/ghcide/src/Development/IDE/Plugin/CodeAction.hs @@ -1493,8 +1493,12 @@ modifyBinding = wrapOperatorInParens . unqualify let addParens x = "(" <> x <> ")" in case uncons x of Just (h, _t) -> if isAlpha h then x else addParens x - Nothing -> mempty - unqualify x = snd $ breakOnEnd "." x + Nothing -> mempty + unqualify x = + case unsnoc x of + Just (h, t@'.') -> snoc (snd $ breakOnEnd "." h) t + Just _ -> snd $ breakOnEnd "." x + Nothing -> mempty smallerRangesForBindingExport :: [LIE GhcPs] -> String -> [Range] smallerRangesForBindingExport lies b = diff --git a/ghcide/test/exe/Main.hs b/ghcide/test/exe/Main.hs index 2d99bb1d8b..119942da5a 100644 --- a/ghcide/test/exe/Main.hs +++ b/ghcide/test/exe/Main.hs @@ -1167,7 +1167,7 @@ removeImportTests = testGroup "remove import actions" _ <- waitForDiagnostics [InR action@CodeAction { _title = actionTitle }, _] <- getCodeActions docB (Range (Position 2 0) (Position 2 5)) - liftIO $ "Remove (@.) from import" @=? actionTitle + liftIO $ "Remove @. from import" @=? actionTitle executeCodeAction action contentAfterAction <- documentContents docB let expectedContentAfterAction = T.unlines From 4dc8f2547deff25b3a74180238c72e8e7765c742 Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 11:57:54 -0400 Subject: [PATCH 5/7] add more tests and debug output for modifyBinding --- .../Development/IDE/Plugin/.CodeAction.hs.swp | Bin 0 -> 16384 bytes .../src/Development/IDE/Plugin/CodeAction.hs | 3 ++- ghcide/test/exe/Main.hs | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp diff --git a/ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp b/ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp new file mode 100644 index 0000000000000000000000000000000000000000..fac286a84f5835ddf0a86be8d6217308e21005c0 GIT binary patch literal 16384 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 B9=-qo literal 0 HcmV?d00001 diff --git a/ghcide/src/Development/IDE/Plugin/CodeAction.hs b/ghcide/src/Development/IDE/Plugin/CodeAction.hs index f20f31b5c9..a2f2b6eb65 100644 --- a/ghcide/src/Development/IDE/Plugin/CodeAction.hs +++ b/ghcide/src/Development/IDE/Plugin/CodeAction.hs @@ -40,6 +40,7 @@ import qualified Data.Rope.UTF16 as Rope import qualified Data.Set as S import qualified Data.Text as T import Data.Tuple.Extra (fst3) +import Debug.Trace import Development.IDE.Core.RuleTypes import Development.IDE.Core.Rules import Development.IDE.Core.Service @@ -1487,7 +1488,7 @@ rangesForBindingImport ImportDecl{ideclHiding = Just (False, L _ lies)} b = rangesForBindingImport _ _ = [] modifyBinding :: String -> String -modifyBinding = wrapOperatorInParens . unqualify +modifyBinding = traceShowId . wrapOperatorInParens . unqualify . traceShowId where wrapOperatorInParens x = let addParens x = "(" <> x <> ")" diff --git a/ghcide/test/exe/Main.hs b/ghcide/test/exe/Main.hs index 119942da5a..1c864ffa37 100644 --- a/ghcide/test/exe/Main.hs +++ b/ghcide/test/exe/Main.hs @@ -3338,6 +3338,23 @@ removeExportTests = testGroup "remove export actions" , "import qualified Data.List as M" , "a :: ()" , "a = ()"]) + , testSession "qualified re-export ending in '.'" $ do + _docB <- createDoc "B.hs" "haskell" + (T.unlines + [ "module B where" + , "(@.) = 0"]) + template + (T.unlines + [ "module A ((B.@.),a) where" + , "import qualified B" + , "a :: ()" + , "a = ()"]) + "remove ‘B.@.’ from export" + (Just $ T.unlines + [ "module A (a) where" + , "import qualified B" + , "a :: ()" + , "a = ()"]) , testSession "export module" $ template (T.unlines [ "module A (module B) where" From 1891a602e3fa88b712029c0cfc63b1729fde2357 Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 14:40:01 -0400 Subject: [PATCH 6/7] implement reviewers suggestions --- ghcide/bench/example/HLS | 1 - .../Development/IDE/Plugin/.CodeAction.hs.swp | Bin 16384 -> 0 bytes .../src/Development/IDE/Plugin/CodeAction.hs | 24 +++++---------- ghcide/test/exe/Main.hs | 29 ++++++++---------- 4 files changed, 20 insertions(+), 34 deletions(-) delete mode 120000 ghcide/bench/example/HLS delete mode 100644 ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp diff --git a/ghcide/bench/example/HLS b/ghcide/bench/example/HLS deleted file mode 120000 index a8a4f8c212..0000000000 --- a/ghcide/bench/example/HLS +++ /dev/null @@ -1 +0,0 @@ -../../.. \ No newline at end of file diff --git a/ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp b/ghcide/src/Development/IDE/Plugin/.CodeAction.hs.swp deleted file mode 100644 index fac286a84f5835ddf0a86be8d6217308e21005c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 B9=-qo diff --git a/ghcide/src/Development/IDE/Plugin/CodeAction.hs b/ghcide/src/Development/IDE/Plugin/CodeAction.hs index a2f2b6eb65..41a508335d 100644 --- a/ghcide/src/Development/IDE/Plugin/CodeAction.hs +++ b/ghcide/src/Development/IDE/Plugin/CodeAction.hs @@ -40,7 +40,6 @@ import qualified Data.Rope.UTF16 as Rope import qualified Data.Set as S import qualified Data.Text as T import Data.Tuple.Extra (fst3) -import Debug.Trace import Development.IDE.Core.RuleTypes import Development.IDE.Core.Rules import Development.IDE.Core.Service @@ -1484,28 +1483,21 @@ rangesForBindingImport :: ImportDecl GhcPs -> String -> [Range] rangesForBindingImport ImportDecl{ideclHiding = Just (False, L _ lies)} b = concatMap (mapMaybe srcSpanToRange . rangesForBinding' b') lies where - b' = modifyBinding b + b' = wrapOperatorInParens b rangesForBindingImport _ _ = [] -modifyBinding :: String -> String -modifyBinding = traceShowId . wrapOperatorInParens . unqualify . traceShowId - where - wrapOperatorInParens x = - let addParens x = "(" <> x <> ")" - in case uncons x of - Just (h, _t) -> if isAlpha h then x else addParens x - Nothing -> mempty - unqualify x = - case unsnoc x of - Just (h, t@'.') -> snoc (snd $ breakOnEnd "." h) t - Just _ -> snd $ breakOnEnd "." x - Nothing -> mempty +wrapOperatorInParens :: String -> String +wrapOperatorInParens x = + case uncons x of + Just (h, _t) -> if isAlpha h then x else "(" <> x <> ")" + Nothing -> mempty smallerRangesForBindingExport :: [LIE GhcPs] -> String -> [Range] smallerRangesForBindingExport lies b = concatMap (mapMaybe srcSpanToRange . ranges') lies where - b' = modifyBinding b + unqualify = snd . breakOnEnd "." + b' = wrapOperatorInParens . unqualify $ b ranges' (L _ (IEThingWith _ thing _ inners labels)) | showSDocUnsafe (ppr thing) == b' = [] | otherwise = diff --git a/ghcide/test/exe/Main.hs b/ghcide/test/exe/Main.hs index 1c864ffa37..d93b81631f 100644 --- a/ghcide/test/exe/Main.hs +++ b/ghcide/test/exe/Main.hs @@ -3338,23 +3338,18 @@ removeExportTests = testGroup "remove export actions" , "import qualified Data.List as M" , "a :: ()" , "a = ()"]) - , testSession "qualified re-export ending in '.'" $ do - _docB <- createDoc "B.hs" "haskell" - (T.unlines - [ "module B where" - , "(@.) = 0"]) - template - (T.unlines - [ "module A ((B.@.),a) where" - , "import qualified B" - , "a :: ()" - , "a = ()"]) - "remove ‘B.@.’ from export" - (Just $ T.unlines - [ "module A (a) where" - , "import qualified B" - , "a :: ()" - , "a = ()"]) + , testSession "qualified re-export ending in '.'" $ template + (T.unlines + [ "module A ((M.@.),a) where" + , "import qualified Data.List as M" + , "a :: ()" + , "a = ()"]) + "Remove ‘M.@.’ from export" + (Just $ T.unlines + [ "module A (a) where" + , "import qualified Data.List as M" + , "a :: ()" + , "a = ()"]) , testSession "export module" $ template (T.unlines [ "module A (module B) where" From 479f1fc795d0b54369689bab024794fd6149749d Mon Sep 17 00:00:00 2001 From: Torsten Scholak Date: Sun, 22 Aug 2021 14:41:49 -0400 Subject: [PATCH 7/7] restore ghcide/bench/example/HLS --- ghcide/bench/example/HLS | 1 + 1 file changed, 1 insertion(+) create mode 120000 ghcide/bench/example/HLS diff --git a/ghcide/bench/example/HLS b/ghcide/bench/example/HLS new file mode 120000 index 0000000000..a8a4f8c212 --- /dev/null +++ b/ghcide/bench/example/HLS @@ -0,0 +1 @@ +../../.. \ No newline at end of file