input-output-hk / plutus-starter

A starter project for Plutus apps
Apache License 2.0
199 stars 95 forks source link

`cabal build` success but `haskell-language-server` yields error #46

Open it4rb opened 2 years ago

it4rb commented 2 years ago

I'm using current latest commit (e930b2f4317c8ec44df1414212a07f948c6f0324) and 2nd method (Cabal+Nix build) After getting into development environment with nix-shell command, I can use cabal build to build the project successfully. However haskell-language-server returns error:

2022-04-27 20:14:50.010342 [ThreadId 400] INFO hls: File:     /project/plutus-test/examples/src/Plutus/Contracts/Game.hs
Hidden:   no
Range:    1:1-2:1
Source:   compile
Severity: DsError
Message:
  Program error: GHC Core to PLC plugin: E043:Error: Reference to a name which is not a local, a
  builtin, or an external INLINABLE function: Variable PlutusTx.Eq.$fEqBuiltinByteString
  [DFunId(nt)]
  No unfolding
  Context: Compiling expr: PlutusTx.Eq.$fEqBuiltinByteString
  Context: Compiling expr: PlutusTx.Eq.==
  @ PlutusTx.Builtins.Internal.BuiltinByteString
  PlutusTx.Eq.$fEqBuiltinByteString
  Context: Compiling expr: PlutusTx.Eq.==
  @ PlutusTx.Builtins.Internal.BuiltinByteString
  PlutusTx.Eq.$fEqBuiltinByteString
  (ds_d14Bp
  `cast` (Plutus.Contracts.Game.N:HashedString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.HashedString
  PlutusTx.Builtins.Internal.BuiltinByteString))
  Context: Compiling expr: PlutusTx.Eq.==
  @ PlutusTx.Builtins.Internal.BuiltinByteString
  PlutusTx.Eq.$fEqBuiltinByteString
  (ds_d14Bp
  `cast` (Plutus.Contracts.Game.N:HashedString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.HashedString
  PlutusTx.Builtins.Internal.BuiltinByteString))
  (PlutusTx.Builtins.sha2_256
  (ds_d14Bq
  `cast` (Plutus.Contracts.Game.N:ClearString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.ClearString
  PlutusTx.Builtins.Internal.BuiltinByteString)))
  Context: Compiling expr: \ (ds_d14Bq [Occ=Once]
  :: Plutus.Contracts.Game.ClearString) ->
  PlutusTx.Eq.==
  @ PlutusTx.Builtins.Internal.BuiltinByteString
  PlutusTx.Eq.$fEqBuiltinByteString
  (ds_d14Bp
  `cast` (Plutus.Contracts.Game.N:HashedString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.HashedString
  PlutusTx.Builtins.Internal.BuiltinByteString))
  (PlutusTx.Builtins.sha2_256
  (ds_d14Bq
  `cast` (Plutus.Contracts.Game.N:ClearString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.ClearString
  PlutusTx.Builtins.Internal.BuiltinByteString)))
  Context: Compiling expr: \ (ds_d14Bp [Occ=Once]
  :: Plutus.Contracts.Game.HashedString)
  (ds_d14Bq [Occ=Once] :: Plutus.Contracts.Game.ClearString) ->
  PlutusTx.Eq.==
  @ PlutusTx.Builtins.Internal.BuiltinByteString
  PlutusTx.Eq.$fEqBuiltinByteString
  (ds_d14Bp
  `cast` (Plutus.Contracts.Game.N:HashedString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.HashedString
  PlutusTx.Builtins.Internal.BuiltinByteString))
  (PlutusTx.Builtins.sha2_256
  (ds_d14Bq
  `cast` (Plutus.Contracts.Game.N:ClearString[0]
  :: GHC.Types.Coercible
  Plutus.Contracts.Game.ClearString
  PlutusTx.Builtins.Internal.BuiltinByteString)))
  Context: Compiling definition of: Plutus.Contracts.Game.isGoodGuess
  Context: Compiling expr: Plutus.Contracts.Game.isGoodGuess
  Context: Compiling expr: Plutus.Contracts.Game.isGoodGuess hs
  Context: Compiling expr: Plutus.Contracts.Game.isGoodGuess hs cs
  Context: Compiling expr: \ _ [Occ=Dead] ->
  Plutus.Contracts.Game.isGoodGuess hs cs
  Context: Compiling expr: \ (cs [Occ=Once]
  :: Plutus.Contracts.Game.ClearString)
  _ [Occ=Dead] ->
  Plutus.Contracts.Game.isGoodGuess hs cs
  Context: Compiling expr: \ (hs [Occ=Once]
  :: Plutus.Contracts.Game.HashedString)
  (cs [Occ=Once] :: Plutus.Contracts.Game.ClearString)
  _ [Occ=Dead] ->
  Plutus.Contracts.Game.isGoodGuess hs cs
  Context: Compiling definition of: Plutus.Contracts.Game.validateGuess
  Context: Compiling expr: Plutus.Contracts.Game.validateGuess
  Context: Compiling expr at "main:Plutus.Contracts.Game:(81,8)-(81,46)"

I've tried to update validateGuess to just return True:

validateGuess :: HashedString -> ClearString -> ScriptContext -> Bool
-- validateGuess hs cs _ = isGoodGuess hs cs
validateGuess _ _ _ = True

and now it yields different error:

2022-04-27 20:25:52.399061 [ThreadId 443] INFO hls: File:     /project/plutus-test/examples/src/Plutus/Contracts/Game.hs
Hidden:   no
Range:    1:1-2:1
Source:   compile
Severity: DsError
Message:
  Program error: GHC Core to PLC plugin: E043:Error: Reference to a name which is not a local, a
  builtin, or an external INLINABLE function: Variable Ledger.Typed.Scripts.Validators.wrapValidator
  No unfolding
  Context: Compiling expr: Ledger.Typed.Scripts.Validators.wrapValidator
  Context: Compiling expr: Ledger.Typed.Scripts.Validators.wrapValidator
  @ Plutus.Contracts.Game.HashedString
  Context: Compiling expr: Ledger.Typed.Scripts.Validators.wrapValidator
  @ Plutus.Contracts.Game.HashedString
  @ Plutus.Contracts.Game.ClearString
  Context: Compiling expr: Ledger.Typed.Scripts.Validators.wrapValidator
  @ Plutus.Contracts.Game.HashedString
  @ Plutus.Contracts.Game.ClearString
  Plutus.Contracts.Game.$fUnsafeFromDataHashedString
  Context: Compiling expr: Ledger.Typed.Scripts.Validators.wrapValidator
  @ Plutus.Contracts.Game.HashedString
  @ Plutus.Contracts.Game.ClearString
  Plutus.Contracts.Game.$fUnsafeFromDataHashedString
  Plutus.Contracts.Game.$fUnsafeFromDataClearString
  Context: Compiling expr at "main:Plutus.Contracts.Game:(82,8)-(82,37)"

I've also tried adding {-# INLINABLE ... #-} to both gameInstance and validateGuess but still getting the same error.

Is there any additional setup need to be done for HLS to work?

Thank you!

deanodev commented 2 years ago

Do you get the same error with current Main or just latest commit?

it4rb commented 2 years ago

Do you get the same error with current Main or just latest commit?

The commit I was referring is the latest commit in Main branch