Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

Adding import in GHC plugin shows unused-import
## Summary In a compiler plugin, I'm hooking into `parsedActionResult` to modify the module being compiled. I'm adding an import and then using something from the import, but GHC still complains about unused-import. *Update 1*: It seems like this happens because of `generatedSrcSpan`. See Reddit thread for more details. More generally, is there a way to use an identifier without needing to import it? I know with Template Haskell, if you use a ticked Name, it'll resolve successfully, even if it's not imported. Original Reddit post: https://www.reddit.com/r/haskell/comments/vbwuzk/writing_a_ghc_plugin_autogenerated_import/ ## Steps to reproduce Minimal repro: ```hs module Plugin (plugin) where import GHC.Hs import GHC.Plugins import qualified GHC.Types.Name.Occurrence as NameSpace plugin :: Plugin plugin = defaultPlugin { parsedResultAction = \_ _ modl -> pure modl{hpm_module = update <$> hpm_module modl} } update :: HsModule -> HsModule update modl = modl { hsmodImports = [ genLoc $ simpleImportDecl $ mkModuleName "Data.List" ] , hsmodDecls = [ genLoc . genFuncDecl (mkRdrName "intercalate2") [] $ genLoc $ HsVar NoExtField (mkRdrName "intercalate") ] } -- | Make simple function declaration of the form `<funcName> <funcArgs> = <funcBody>` genFuncDecl :: Located RdrName -> [LPat GhcPs] -> LHsExpr GhcPs -> HsDecl GhcPs genFuncDecl funcName funcArgs funcBody = (\body -> ValD NoExtField $ FunBind NoExtField funcName body []) . (\match -> MG NoExtField (genLoc [genLoc match]) Generated) . Match NoExtField (FunRhs funcName Prefix NoSrcStrict) funcArgs . (\grhs -> GRHSs NoExtField [genLoc grhs] funcWhere) $ GRHS NoExtField [] funcBody where funcWhere = genLoc $ EmptyLocalBinds NoExtField genLoc :: e -> Located e genLoc = L generatedSrcSpan mkRdrName :: String -> Located RdrName mkRdrName = genLoc . mkRdrUnqual . mkOccName NameSpace.varName ``` ```hs {-# OPTIONS_GHC -fplugin=Plugin #-} module Foo where ``` ```bash stack ghc --resolver=ghc-9.0 --package ghc -- Foo.hs -Wunused-imports -Werror -dynamic-too ``` ## Expected behavior This should generate the equivalent of ```hs module Foo where import Data.List intercalate2 = intercalate ``` So `Data.List` is being used; indeed, when removing the import, the use of `intercalate` fails. So `Data.List` shouldn't be marked unused. ## Environment * GHC version used: 9.0 (I haven't tested with 9.2 because I'm using the 9.0 version of the GHC API, and I didn't want to update it to 9.2 yet) Optional: * Operating System: * System Architecture:
issue