From 5c32d26fa964a20db1506e2a549b2b8a170c2c84 Mon Sep 17 00:00:00 2001 From: Jon Shen Date: Fri, 10 Dec 2021 13:09:26 -0500 Subject: [PATCH 1/3] fix #2418 until upstream hlint change --- .../hls-hlint-plugin/hls-hlint-plugin.cabal | 1 + .../hls-hlint-plugin/src/Ide/Plugin/Hlint.hs | 21 +++++++++++++++++-- plugins/hls-hlint-plugin/test/Main.hs | 4 ++++ .../test/testdata/fixity/.hlint.yaml | 1 + .../test/testdata/fixity/FixityDef.hs | 5 +++++ .../test/testdata/fixity/FixityUse.hs | 6 ++++++ .../test/testdata/fixity/hie.yaml | 6 ++++++ 7 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 plugins/hls-hlint-plugin/test/testdata/fixity/.hlint.yaml create mode 100644 plugins/hls-hlint-plugin/test/testdata/fixity/FixityDef.hs create mode 100644 plugins/hls-hlint-plugin/test/testdata/fixity/FixityUse.hs create mode 100644 plugins/hls-hlint-plugin/test/testdata/fixity/hie.yaml diff --git a/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal b/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal index 23ff2f8a8a..bdbb3af963 100644 --- a/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal +++ b/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal @@ -68,6 +68,7 @@ library , text , transformers , unordered-containers + , ghc-lib-parser-ex if (flag(hlint33)) -- This mirrors the logic in hlint.cabal for hlint-3.3 diff --git a/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs b/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs index 9f4dd42820..edf42e6105 100644 --- a/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs +++ b/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs @@ -82,6 +82,7 @@ import Development.IDE.GHC.Compat.Core hiding import Language.Haskell.GHC.ExactPrint.Delta (deltaOptions) import Language.Haskell.GHC.ExactPrint.Parsers (postParseTransform) import Language.Haskell.GHC.ExactPrint.Types (Rigidity (..)) +import Language.Haskell.GhclibParserEx.Fixity as GhclibParserEx (applyFixities) #endif import Ide.Logger @@ -102,9 +103,11 @@ import Language.LSP.Types hiding import qualified Language.LSP.Types as LSP import qualified Language.LSP.Types.Lens as LSP -import GHC.Generics (Generic) +import GHC.Generics (Associativity (LeftAssociative, NotAssociative, RightAssociative), + Generic) import Text.Regex.TDFA.Text () +import qualified Debug.Trace as Debug import System.Environment (setEnv, unsetEnv) -- --------------------------------------------------------------------- @@ -240,9 +243,23 @@ getIdeas nfp = do moduleEx _flags = do mbpm <- getParsedModuleWithComments nfp return $ createModule <$> mbpm - where createModule pm = Right (createModuleEx anns modu) + where + createModule pm = Right (createModuleEx anns (applyParseFlagsFixities modu)) where anns = pm_annotations pm modu = pm_parsed_source pm + + applyParseFlagsFixities :: ParsedSource -> ParsedSource + applyParseFlagsFixities modul = GhclibParserEx.applyFixities (parseFlagsToFixities _flags) modul + + parseFlagsToFixities :: ParseFlags -> [(String, Fixity)] + parseFlagsToFixities = map toFixity . Hlint.fixities + + toFixity :: FixityInfo -> (String, Fixity) + toFixity (name, dir, i) = (name, Fixity NoSourceText i $ f dir) + where + f LeftAssociative = InfixL + f RightAssociative = InfixR + f NotAssociative = InfixN #else moduleEx flags = do mbpm <- getParsedModuleWithComments nfp diff --git a/plugins/hls-hlint-plugin/test/Main.hs b/plugins/hls-hlint-plugin/test/Main.hs index 844fc599ef..f9696ed20c 100644 --- a/plugins/hls-hlint-plugin/test/Main.hs +++ b/plugins/hls-hlint-plugin/test/Main.hs @@ -71,6 +71,10 @@ suggestionsTests = contents <- skipManyTill anyMessage $ getDocumentEdit doc liftIO $ contents @?= "main = undefined\nfoo = id\n" + , testCase ".hlint.yaml fixity rules are applied" $ runHlintSession "fixity" $ do + doc <- openDoc "FixityUse.hs" "haskell" + expectNoMoreDiagnostics 3 doc "hlint" + , testCase "changing document contents updates hlint diagnostics" $ runHlintSession "" $ do doc <- openDoc "Base.hs" "haskell" testHlintDiagnostics doc diff --git a/plugins/hls-hlint-plugin/test/testdata/fixity/.hlint.yaml b/plugins/hls-hlint-plugin/test/testdata/fixity/.hlint.yaml new file mode 100644 index 0000000000..5d90b0d9eb --- /dev/null +++ b/plugins/hls-hlint-plugin/test/testdata/fixity/.hlint.yaml @@ -0,0 +1 @@ +- fixity: "infixl 3 " diff --git a/plugins/hls-hlint-plugin/test/testdata/fixity/FixityDef.hs b/plugins/hls-hlint-plugin/test/testdata/fixity/FixityDef.hs new file mode 100644 index 0000000000..729f8c6e84 --- /dev/null +++ b/plugins/hls-hlint-plugin/test/testdata/fixity/FixityDef.hs @@ -0,0 +1,5 @@ +module FixityDef where + +infixl 3 +() :: Maybe a -> Maybe (Maybe b) -> Maybe String +() a b = Nothing diff --git a/plugins/hls-hlint-plugin/test/testdata/fixity/FixityUse.hs b/plugins/hls-hlint-plugin/test/testdata/fixity/FixityUse.hs new file mode 100644 index 0000000000..646240dab5 --- /dev/null +++ b/plugins/hls-hlint-plugin/test/testdata/fixity/FixityUse.hs @@ -0,0 +1,6 @@ +module FixityUse where + +import FixityDef + +foo :: Char -> Maybe Int -> Maybe String +foo c mInt = show <$> mInt pure <$> Just c diff --git a/plugins/hls-hlint-plugin/test/testdata/fixity/hie.yaml b/plugins/hls-hlint-plugin/test/testdata/fixity/hie.yaml new file mode 100644 index 0000000000..81e7f9be75 --- /dev/null +++ b/plugins/hls-hlint-plugin/test/testdata/fixity/hie.yaml @@ -0,0 +1,6 @@ +cradle: + direct: + arguments: + - "FixityDef" + - "FixityUse" + From 69c107da678e6dd581787322694a3a2b2407a80e Mon Sep 17 00:00:00 2001 From: Jon Shen Date: Fri, 10 Dec 2021 13:13:38 -0500 Subject: [PATCH 2/3] remove debug import --- plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs b/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs index edf42e6105..3cc17910da 100644 --- a/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs +++ b/plugins/hls-hlint-plugin/src/Ide/Plugin/Hlint.hs @@ -107,7 +107,6 @@ import GHC.Generics (Associativi Generic) import Text.Regex.TDFA.Text () -import qualified Debug.Trace as Debug import System.Environment (setEnv, unsetEnv) -- --------------------------------------------------------------------- From e1442a9f2300fc70ce3d181549b6b5194a46b292 Mon Sep 17 00:00:00 2001 From: Jon Shen Date: Fri, 10 Dec 2021 17:19:28 -0500 Subject: [PATCH 3/3] add comment about when ghc-lib-parser-ex dependency can be removed --- plugins/hls-hlint-plugin/hls-hlint-plugin.cabal | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal b/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal index bdbb3af963..2b21de18e2 100644 --- a/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal +++ b/plugins/hls-hlint-plugin/hls-hlint-plugin.cabal @@ -68,6 +68,9 @@ library , text , transformers , unordered-containers + -- can be removed if https://github.com/ndmitchell/hlint/pull/1325#issue-1077062712 is merged + -- and https://github.com/haskell/haskell-language-server/pull/2464#issue-1077133441 is updated + -- accordingly , ghc-lib-parser-ex if (flag(hlint33))