haskell-ide-engine icon indicating copy to clipboard operation
haskell-ide-engine copied to clipboard

Emacs: flymake is not able to use hie as backend

Open schnecki opened this issue 4 years ago • 8 comments

I have following cabal file, where I left out uninteresting parts:

cabal-version: 1.12
name:           app
version:        0.1.0
build-type:     Simple

library
  exposed-modules:
      Application
      DataTypes
      ...
  hs-source-dirs:
      src
      shared
  default-extensions: NoImplicitPrelude, ViewPatterns
  build-depends:
      aeson >=1.4 && <1.5
      ...
    , zip
  ghc-options: -Wall -fwarn-tabs -O2
  default-language: Haskell2010
 
executable devboardserver
  main-is: main.hs
  other-modules:
      DevelMain
      Paths_devboardserver
  hs-source-dirs:
      app
  default-extensions: NoImplicitPrelude, ViewPatterns
  ghc-options: -threaded -rtsopts -with-rtsopts=-N
  build-depends:
      aeson >=1.4 && <1.5
      ...
    , zip
  default-language: Haskell2010
 

Note the hs-soure-dirs entry of the library, it states two folders: src as usual, and shared in the project root directory. However files under shared, like shared/DataTypes.hs are not found, i.e. included when building. I could not find a way to configure multiple paths that are not sub-directories of src. Is there an intended way to do so, as it does not work automatically?

schnecki avatar Feb 07 '20 06:02 schnecki

Hi, thanks for reporting

However files under shared, like shared/DataTypes.hs are not found, i.e. included when building

If you try to build the project from the console using stack or cabal, does it throw any error? or only when opened with hie?

jneira avatar Feb 07 '20 07:02 jneira

Hi, It only throws an error in hie, or actually more precisely, as I figured out now, it only throws the error for flycheck, i.e. the emacs way of syntax checking. However, I figured if I disable the hie the same error is reported by standard flychecking. Thus, I suspect either hie just uses the flycheck output without, or incorrect arguments are passed to it.

schnecki avatar Feb 07 '20 07:02 schnecki

I've setup a similar project and in vscode all looks fine. What is the error message? Not sure if i fully understand so just in case:

  • If you disables hie, flycheck continues showing the error (even after restart emacs)
  • So flycheck is not using hie or, flycheck is passing incorrect args to hie?

jneira avatar Feb 07 '20 07:02 jneira

I've loaded the same project in emacs and i am observing that flymake is not finding the DataTypes module but it does not find any module from external dependencies but the included in base neither. So if you import modules from aeson f.e., does flycheck complain about them too?

I dont see errors in *Flymake log*, or *hie:stderr*

jneira avatar Feb 07 '20 08:02 jneira

To your two question: Yes exactly. And furthermore, as it does not use the settings of the stack.yaml / cabal file, it also ignores the entry

default-extensions: NoImplicitPrelude, ViewPatterns

Meanwhile I have added the the shared path to flycheck-ghc-search-path (see https://www.flycheck.org/en/latest/languages.html#syntax-checker-haskell-stack-ghc), which solves the first problem, but of course not the one with the default extensions settings.

I don't have errors in hie:stderr either, except for this one (which I suppose can be neglected):

hie-8.6.5: loadObj: /tmp/ghc16809_0/ghc_63.o: file doesn't exist

So I think the problem seems to be exactly what you stated: So flycheck is not using hie

schnecki avatar Feb 07 '20 08:02 schnecki

I've just observed that flymake status is: Wait[0 0] and on hover it shows: Waiting for 1 running backend and the errors are shown before hie ends loading the project so definitely the problem seems to be the communication between both components (flymake -> hie) Maybe @alanz could help us cause i think it is using hie with emacs.

jneira avatar Feb 07 '20 08:02 jneira

@schnecki i hope you dont mind the renaming of the issue, i think it is more accurate given our last checks. I've labeled as "upstream" cause i think it is probable that the fix would not be in hie itself.

jneira avatar Feb 07 '20 13:02 jneira

@jneira np at all But I just figured that fie is using flymake and not flycheck as I supposed.

EDIT: You might want to integrate this: https://github.com/chrisdone/flycheck-stack It is very lightweight and works quite well. Is there a way to disable flymake in hie completely?

schnecki avatar Feb 07 '20 19:02 schnecki