glint icon indicating copy to clipboard operation
glint copied to clipboard

`glint --declaration` fails to create declaration files when `@glint-ignore`, `@glint-expect-error`, or `@glint-nocheck` is used

Open ijlee2 opened this issue 1 year ago • 6 comments

Background

To move @embroider/addon-blueprint away from rollup-plugin-ts, we changed how declaration files are created (it is assumed that the v2 addon runs on glint).

/* package.json for projects with Glint */
"scripts": {
  "build:types": "glint --declaration",
  "lint:types": "glint",
  "start:types": "glint --declaration --watch"
}

When I tried the new approach on ember-container-query, I noticed that,

  • build:types doesn't create the declarations folder
  • start:types does create the declarations folder

I filed a bug report in https://github.com/embroider-build/addon-blueprint/issues/139.

@NullVoxPopuli and @dfreeman, who further investigated the problem, found the cause to be a @glint-ignore comment that I had added some time ago.

https://discord.com/channels/480462759797063690/1126182801876713532/1126191306109091840

Dan on Discord

it looks like a bug

specifically, if I set noEmitOnError: false, declarations are emitted

I'm guessing it happens to work with --build because that will always emit declarations, regardless of errors (because --build prioritizes having declarations available for your other project references)

ah

it's because of the @glint-ignore here https://github.com/ijlee2/ember-container-query/blob/4.0.4/ember-container-query/src/components/container-query.hbs#L1

the bug appears to be that TS internally is counting that as an error that triggers noEmitOnError behavior

if I add an entry for element in the registry in unpublished-development-types, everything works

Additional notes

By adding console.log()'s, I checked that glint --declaration results in determineOptionsToExtend() correctly setting options.{noEmit,declaration,emitDeclarationOnly} (to false, true, and true, respectively).

I'm guessing that something different happens,

  1. When we run glint --build as opposed to glint --declaration
  2. When we run glint --declaration --watch as opposed to just glint --declaration

ijlee2 avatar Jul 06 '23 13:07 ijlee2

:+1:

We are currently experiencing a similar issue when moving from rollup-plugin-ts to the recent embroider blueprint changes.

The build:types script just silently completes but no declarations folder is created, but the start:types script does work.

enspandi avatar Aug 01 '23 11:08 enspandi

This issue is affecting our addons too - we've resorted to disabling glint typechecking for all hbs files to restore declaration generation from ts files:

// in tsconfig.json
"exclude": ["src/**/*.hbs"],

22a avatar Aug 16 '23 11:08 22a

same for {{! @glint-expect-error }}

basz avatar Nov 03 '23 21:11 basz

We got hit by this too, because of a {{! @glint-expect-error }} just like @basz

1- is it possible to update this ticket's name to add a ref to {{! @glint-expect-error }}? 2- Any guidance on how to start a PR to address this issue?

bartocc avatar Nov 27 '23 14:11 bartocc

This is probably not trivial for a new contributor to fix (I’m not totally sure what the solution will look like at this point), but I expect that setting noEmitOnError: false should be a viable workaround in the meantime.

dfreeman avatar Nov 27 '23 16:11 dfreeman

@bartocc I updated the title based on your suggestion.

@dfreeman Several issues were reported since this one, so I think it may be hard for people who are new to Glint to discover this issue. Could we pin this issue so that it appears on top of the page for https://github.com/typed-ember/glint/issues?

ijlee2 avatar Nov 28 '23 08:11 ijlee2