Skip to content

Commit 03793d1

Browse files
VenInffendor
authored andcommitted
issue #3774 fix
1 parent 8f075d0 commit 03793d1

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

plugins/hls-cabal-plugin/src/Ide/Plugin/Cabal/Completion/Completer/Paths.hs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import Distribution.Utils.Path (getSymbolicPath)
1515
import Ide.Plugin.Cabal.Completion.Types
1616
import qualified System.FilePath as FP
1717
import qualified System.FilePath.Posix as Posix
18+
import Data.List.Extra (dropPrefix)
19+
import Data.List (isPrefixOf)
1820

1921

2022
{- | Information used to query and build path completions.
@@ -45,6 +47,26 @@ data PathCompletionInfo = PathCompletionInfo
4547
}
4648
deriving (Eq, Show)
4749

50+
51+
{- | Posix.splitFileName modification, that drops trailing ./ if
52+
if wasn't present in the original path.
53+
54+
Fix for the issue #3774
55+
56+
Examples of path splitting:
57+
"" -> ("", "") instead of ("./","")
58+
"./" -> ("./", "")
59+
"dir" -> ("", "dir") instead of ("./","dir")
60+
"./dir" -> ("./", "dir")
61+
"dir1/dir2" -> ("dir1/","dir2")
62+
"./dir1/dir2" -> ("./dir1/","dir2")
63+
-}
64+
splitFileNameNoTrailingSlash :: FilePath -> (String, String)
65+
splitFileNameNoTrailingSlash prefix = rmTrailingSlash ("./" `isPrefixOf` prefix) (Posix.splitFileName prefix)
66+
where rmTrailingSlash hadTrailingSlash (queryDirectory', pathSegment')
67+
| hadTrailingSlash = (queryDirectory', pathSegment')
68+
| otherwise = ("./" `dropPrefix` queryDirectory', pathSegment')
69+
4870
{- | Takes an optional source subdirectory and a prefix info
4971
and creates a path completion info accordingly.
5072
@@ -64,7 +86,7 @@ pathCompletionInfoFromCabalPrefixInfo srcDir prefInfo =
6486
}
6587
where
6688
prefix = T.unpack $ completionPrefix prefInfo
67-
(queryDirectory', pathSegment') = Posix.splitFileName prefix
89+
(queryDirectory', pathSegment') = splitFileNameNoTrailingSlash prefix
6890

6991
-- | Extracts the source directories of the library stanza.
7092
sourceDirsExtractionLibrary :: Maybe StanzaName -> GenericPackageDescription -> [FilePath]

plugins/hls-cabal-plugin/test/Completer.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,15 @@ directoryCompleterTests :: TestTree
165165
directoryCompleterTests =
166166
testGroup
167167
"Directory Completer Tests"
168-
[ testCase "Current Directory" $ do
168+
[ testCase "Current Directory - no leading ./ by default" $ do
169169
completions <- completeDirectory "" filePathComplTestDir
170-
completions @?== ["./dir1/", "./dir2/"],
170+
completions @?== ["dir1/", "dir2/"],
171171
testCase "Current Directory - alternative writing" $ do
172172
completions <- completeDirectory "./" filePathComplTestDir
173173
completions @?== ["./dir1/", "./dir2/"],
174174
testCase "Current Directory - incomplete directory path written" $ do
175175
completions <- completeDirectory "di" filePathComplTestDir
176-
completions @?== ["./dir1/", "./dir2/"],
176+
completions @?== ["dir1/", "dir2/"],
177177
testCase "Current Directory - incomplete filepath written" $ do
178178
completions <- completeDirectory "te" filePathComplTestDir
179179
completions @?== [],

0 commit comments

Comments
 (0)