rescript-compiler icon indicating copy to clipboard operation
rescript-compiler copied to clipboard

Code snippet leads to infinite loop when using watch command

Open bruisedsamurai opened this issue 2 years ago • 3 comments

This snippet is somehow causing an infinite loop in VS Code extension and watch command. The build file is getting deleted and created repetitively.

@@directive("'use client'")
@module("next/[redacted]") external [Redacted]: unit => Js.Dict.t<'a> = "[Redacted]"
open [Redacted]

module [RedactedIcon] = {
  @module("@radix-ui/react-icons") @react.component
  external make: (~className: string) => React.element = "[RedactedIcon]"
}

module [AnotherRedactedIcon] = {
  @module("@radix-ui/react-icons") @react.component
  external make: (~className: string) => React.element = "[AnotherRedactedIcon]"
}

type [RedactedType] = [RedactedEnum] | [AnotherRedactedEnum]

@react.component
let make = () => {
  let params = [Redacted]()
  let theme = switch params->Js.Dict.get("[Redacted]") {
  | Some(x) => x
  | None => [DefaultValue]
  }
  let (theme, setTheme) = React.useState(_ => theme)
  let iconTheme = [RedactedStyleMethod].make(~position="fixed", ~right="2rem", ~bottom="2rem", ())->css

  <[ToolTipNamespace].Provider>
    <[ToolTipNamespace].Root>
      <[ToolTipNamespace].Trigger>
        <a type_="button" onClick={_ => setTheme(_ => theme == [AnotherRedactedEnum] ? [RedactedEnum] : [AnotherRedactedEnum])}>
          <[RedactedIcon]
            className={iconTheme}
          />}
        </a>
      </[ToolTipNamespace].Trigger>
      <[ToolTipNamespace].Portal>
        <[ToolTipNamespace].Content>
          {React.string("[RedactedText]")}
          <[ToolTipNamespace].Arrow />
        </[ToolTipNamespace].Content>
      </[ToolTipNamespace].Portal>
    </[ToolTipNamespace].Root>
  </[ToolTipNamespace].Provider>
}

Windows 11, Rescript 11:RC3, Alpha React

Thank you for filing! Check list:

  • [x] Is it a bug? Usage questions should often be asked in the forum instead.
  • [x] Concise, focused, friendly issue title & description.
  • [x] A minimal, reproducible example.
  • [x] OS and browser versions, if relevant.

JS compilation

'use client'
// Generated by ReScript, PLEASE EDIT WITH CARE

import * as Panda from "[Redacted]";
import * as React from "react";
import * as Js_dict from "[Redacted]";
import * as $$Navigation from "[Redacted]";
import * as ReactIcons from "[Redacted]";
import * as ReactTooltip from "[Redacted]";

var MoonIcon = {};

var SunIcon = {};

function ThemeSwitcher(props) {
  var params = $$Navigation.useParams();
  var x = Js_dict.get(params, "theme");
  var theme = x !== undefined ? x : "Light";
  var match = React.useState(function () {
        return theme;
      });
  var setTheme = match[1];
  var theme$1 = match[0];
  var iconTheme = Panda.css({
        bottom: "2rem",
        position: "fixed",
        right: "2rem"
      });
  return React.createElement(ReactTooltip.Provider, {
              children: React.createElement(ReactTooltip.Root, {
                    children: null
                  }, React.createElement(ReactTooltip.Trigger, {
                        children: React.createElement("a", {
                              type: "button",
                              onClick: (function (param) {
                                  setTheme(function (param) {
                                        if (theme$1 === "Light") {
                                          return "Dark";
                                        } else {
                                          return "Light";
                                        }
                                      });
                                })
                            }, React.createElement(ReactIcons.MoonIcon, {
                                  className: iconTheme
                                }))
                      }), React.createElement(ReactTooltip.Portal, {
                        children: React.createElement(ReactTooltip.Content, {
                              children: null
                            }, "Switch Theme", React.createElement(ReactTooltip.Arrow, {}))
                      }))
            });
}

var make = ThemeSwitcher;

export {
  MoonIcon ,
  SunIcon ,
  make ,
}
/* Panda Not a pure module */

bruisedsamurai avatar Oct 08 '23 15:10 bruisedsamurai

@bruisedsamurai is this still the case with rc.5?

zth avatar Nov 14 '23 16:11 zth

I don't see how it can be related to watch mode 🤔

DZakh avatar Nov 14 '23 17:11 DZakh

I still see watch mode constantly compiling my mode.

bruisedsamurai avatar Nov 16 '23 18:11 bruisedsamurai