Skip to content

MTC: Tag variable inside a for-loop causes value is never read #354

@AngusMorton

Description

@AngusMorton

@marko/type-check: 1.3.19

Repro:

<div>
  <for of=[]>
    <const/foo=true/>
  </for>
</div>

Error:

src/components/repro.marko - error TS6133
'__marko_internal_rendered_2' is declared but its value is never read.

Generates:

export interface Input {}
abstract class Component extends Marko.Component<Input> {}
export { type Component };
(function (this: void) {
  const input = Marko._.any as Input;
  const component = Marko._.any as Component;
  const state = Marko._.state(component);
  const out = Marko._.out;
  const $signal = Marko._.any as AbortSignal;
  const $global = Marko._.getGlobal(
    // @ts-expect-error We expect the compiler to error because we are checking if the MarkoRun.Context is defined.
    (Marko._.error, Marko._.any as MarkoRun.Context),
  );
  Marko._.noop({ component, state, out, input, $global, $signal });
  const __marko_internal_rendered_1 = Marko._.renderNativeTag("div")()()({
    ["renderBody" /*div*/]: (() => {
      const __marko_internal_rendered_2 = Marko._.forOfTag(
        {
          /*for*/ of: [],
        },
        () => {
          const __marko_internal_tag_1 = Marko._.resolveTemplate(
            import(
              "@marko/tags-api-preview/dist/components/const/index.d.marko"
            ),
          );
          const __marko_internal_rendered_3 = Marko._.renderTemplate(
            __marko_internal_tag_1,
          )()()({
            value: true,
          });
          const foo = __marko_internal_rendered_3.return.value;
          return new (class MarkoReturn<Return = void> {
            [Marko._.scope] = { foo };
            declare return: Return;
            constructor(_?: Return) {}
          })();
        },
      );
      return () => {
        return Marko._.voidReturn;
      };
    })(),
  });
  const { foo } = Marko._.readScopes({ __marko_internal_rendered_1 });
  Marko._.noop({ foo });
  return;
})();
export default new (class Template extends Marko._.Template<{
  render(
    input: Marko.TemplateInput<Input>,
    stream?: {
      write: (chunk: string) => void;
      end: (chunk?: string) => void;
    },
  ): Marko.Out<Component>;

  render(
    input: Marko.TemplateInput<Input>,
    cb?: (err: Error | null, result: Marko.RenderResult<Component>) => void,
  ): Marko.Out<Component>;

  renderSync(input: Marko.TemplateInput<Input>): Marko.RenderResult<Component>;

  renderToString(input: Marko.TemplateInput<Input>): string;

  stream(
    input: Marko.TemplateInput<Input>,
  ): ReadableStream<string> & NodeJS.ReadableStream;

  api: "class";
  _(): () => <__marko_internal_input extends unknown>(
    input: Marko.Directives &
      Input &
      Marko._.Relate<__marko_internal_input, Marko.Directives & Input>,
  ) => Marko._.ReturnWithScope<__marko_internal_input, void>;
}> {})();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions