Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions plugins/hls-cabal-plugin/src/Ide/Plugin/Cabal/CabalAdd.hs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ getDependencyEdit recorder env cabalFilePath buildTarget dependency = do
logWith recorder Debug $ LogCreatedEdit edit
pure edit

-- | Given a path to a haskell file, returns the closest cabal file.
-- | Given a path to a haskell file, returns the closest cabal file, except if package.yaml is also present.
-- If cabal file wasn't found, gives Nothing.
findResponsibleCabalFile :: FilePath -> IO (Maybe FilePath)
findResponsibleCabalFile haskellFilePath = do
Expand All @@ -293,7 +293,12 @@ findResponsibleCabalFile haskellFilePath = do
cabalFiles <- filterM (\c -> doesFileExist c) objectsCabalExtension
case safeHead cabalFiles of
Nothing -> go ps
Just cabalFile -> pure $ Just cabalFile
Just cabalFile -> guardAgainstHpack path cabalFile
where
guardAgainstHpack :: FilePath -> FilePath -> IO (Maybe FilePath)
guardAgainstHpack path cabalFile = do
exists <- doesFileExist $ path </> "package.yaml"
if exists then pure Nothing else pure $ Just cabalFile

-- | Gives cabal file's contents or throws error.
-- Inspired by @readCabalFile@ in cabal-add,
Expand Down
11 changes: 11 additions & 0 deletions plugins/hls-cabal-plugin/test/CabalAdd.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ cabalAddTests =
"CabalAdd Tests"
[ runHaskellTestCaseSession "Code Actions - Can add hidden package" ("cabal-add-testdata" </> "cabal-add-exe")
(generateAddDependencyTestSession "cabal-add-exe.cabal" ("src" </> "Main.hs") "split" [253])
, runHaskellTestCaseSession "Code Actions - Guard against HPack" ("cabal-add-testdata" </> "cabal-add-packageYaml")
(generatePackageYAMLTestSession ("src" </> "Main.hs"))
, runHaskellTestCaseSession "Code Actions - Can add hidden package to a library" ("cabal-add-testdata" </> "cabal-add-lib")
(generateAddDependencyTestSession "cabal-add-lib.cabal" ("src" </> "MyLib.hs") "split" [348])
, runHaskellTestCaseSession "Code Actions - Can add hidden package to a test" ("cabal-add-testdata" </> "cabal-add-tests")
Expand Down Expand Up @@ -139,3 +141,12 @@ cabalAddTests =
, _codeDescription = Nothing
, _data_ = Nothing
}


generatePackageYAMLTestSession :: FilePath -> Session ()
generatePackageYAMLTestSession haskellFile = do
hsdoc <- openDoc haskellFile "haskell"
_ <- waitForDiagnosticsFrom hsdoc
cas <- Maybe.mapMaybe (^? _R) <$> getAllCodeActions hsdoc
let selectedCas = filter (\ca -> "Add dependency" `T.isPrefixOf` (ca ^. L.title)) cas
liftIO $ assertEqual "PackageYAML" [] selectedCas
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
cabal-version: 2.4
name: cabal-add-bench
version: 0.1.0.0
license: NONE
author: George Gerasev
maintainer: [email protected]
build-type: Simple

common warnings
ghc-options: -Wall

benchmark benchmark
type: exitcode-stdio-1.0
ghc-options: -threaded
main-is: Main.hs
hs-source-dirs: bench
build-depends: base
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Main (main) where

import Data.List.Split

main :: IO ()
main = putStrLn "Test suite not yet implemented."
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ packages: cabal-add-exe
cabal-add-lib
cabal-add-tests
cabal-add-bench
cabal-add-packageYaml
Loading