Skip to content

Semantic Tokens treats a standalone deriving strategy as type parameter #3983

Closed
@konn

Description

@konn

Your environment

Which OS do you use? macOS Sonoma14.2.1(23C71)

Which version of GHC do you use and how did you install it? GHC 9.2.8 via GHCup

How is your project built (alternative: link to the project)? By cabal-install. This can happen in any project, but see linear-extra.

Which LSP client (editor/plugin) do you use? VSCode

Which version of HLS do you use and how did you install it? 2.6.0.0, via ghcup-vanilla-0.0.8.

Have you configured HLS in any way (especially: a hie.yaml file)? No. Auto Detection.

Steps to reproduce

Adds a standalone deriving clause with explicit deriving strategy with Semantic Tokens enabled.

{
  "haskell.plugin.semanticTokens.globalOn": true,
  "editor.semanticHighlighting.enabled": true
}

Example. Consider the following:

type LocAddr :: Location -> Type
newtype LocAddr s = LocAddr {getLocAddr_ :: LocAddr_}
  deriving (P.Eq, P.Ord)
  deriving newtype (Hashable)

In above, newtype is treated as keyword correctly:

newtype-deriving

Next, make Hashable instance deriving standalone:

deriving newtype instance Hashable (LocAddr s)

Then newtype is rendered differently!

deriving-newtype-standalone

Changing newtype to anyclass gives the same effect. If we change it to via LocAddr_, via is rendered correctly.

Expected behaviour

Both newtype and anyclass must be treated as keyword.

Actual behaviour

Treated as parameter, as above. Here is the token inspection result from VSCode:

スクリーンショット 2024-01-19 14 11 04

Debug information

Here is the trace log of VSCode:

vscode.log

Metadata

Metadata

Assignees

Labels

component: semantic-tokenstype: bugSomething isn't right: doesn't work as intended, documentation is missing/outdated, etc..

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions