From 2f5be727bc8b6be032663e89306211c7e1c25181 Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Thu, 31 Aug 2023 23:37:27 +0100 Subject: [PATCH 1/2] hls-module-name-plugin: use stripPrefix instead of isPrefixOf --- .../src/Ide/Plugin/ModuleName.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs b/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs index 6474a4c204..fdeb00d82c 100644 --- a/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs +++ b/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs @@ -26,10 +26,11 @@ import Control.Monad.Trans.Except import Control.Monad.Trans.Maybe import Data.Aeson (toJSON) import Data.Char (isLower) -import Data.List (intercalate, isPrefixOf, - minimumBy) +import Data.List (intercalate, minimumBy, + stripPrefix) import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map +import Data.Maybe (mapMaybe) import Data.Ord (comparing) import Data.String (IsString) import qualified Data.Text as T @@ -154,15 +155,14 @@ pathModuleNames recorder state normFilePath filePath mdlPath <- liftIO $ makeAbsolute filePath logWith recorder Debug (AbsoluteFilePath mdlPath) - let prefixes = filter (`isPrefixOf` mdlPath) paths - pure (map (moduleNameFrom mdlPath) prefixes) + let suffixes = mapMaybe (`stripPrefix` mdlPath) paths + pure (map moduleNameFrom suffixes) where - moduleNameFrom mdlPath prefix = + moduleNameFrom = T.pack . intercalate "." . splitDirectories - . drop (length prefix) - $ dropExtension mdlPath + . dropExtension -- | The module name, as stated in the module codeModuleName :: IdeState -> NormalizedFilePath -> IO (Maybe (Range, T.Text)) From 289d75a0c4e36be0022ea9a2b14e802dce0404cc Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Thu, 31 Aug 2023 23:48:06 +0100 Subject: [PATCH 2/2] hls-module-name-plugin: do not suggest module names whose components start from a lower-case char --- .../hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs b/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs index fdeb00d82c..50264a68f1 100644 --- a/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs +++ b/plugins/hls-module-name-plugin/src/Ide/Plugin/ModuleName.hs @@ -25,9 +25,9 @@ import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.Except import Control.Monad.Trans.Maybe import Data.Aeson (toJSON) -import Data.Char (isLower) +import Data.Char (isLower, isUpper) import Data.List (intercalate, minimumBy, - stripPrefix) + stripPrefix, uncons) import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map import Data.Maybe (mapMaybe) @@ -161,6 +161,9 @@ pathModuleNames recorder state normFilePath filePath moduleNameFrom = T.pack . intercalate "." + -- Do not suggest names whose components start from a lower-case char, + -- they are guaranteed to be malformed. + . filter (maybe False (isUpper . fst) . uncons) . splitDirectories . dropExtension