diff --git a/src/Fable.Transforms/FSharp2Fable.Util.fs b/src/Fable.Transforms/FSharp2Fable.Util.fs index 720564e81f..b1f8daf32f 100644 --- a/src/Fable.Transforms/FSharp2Fable.Util.fs +++ b/src/Fable.Transforms/FSharp2Fable.Util.fs @@ -1825,8 +1825,7 @@ module Util = open TypeHelpers open Identifiers - let isUnitArg (ident: Fable.Ident) = - ident.IsCompilerGenerated && ident.Type = Fable.Unit + let isUnitArg (ident: Fable.Ident) = ident.Type = Fable.Unit // && (ident.DisplayName.StartsWith("unitVar") || ident.DisplayName.Contains("@")) let discardUnitArg (args: Fable.Ident list) = diff --git a/src/Fable.Transforms/Fable2Babel.fs b/src/Fable.Transforms/Fable2Babel.fs index e7e26f8d70..b9fb0325fd 100644 --- a/src/Fable.Transforms/Fable2Babel.fs +++ b/src/Fable.Transforms/Fable2Babel.fs @@ -2986,13 +2986,17 @@ but thanks to the optimisation done below we get | _ -> transformDecisionTreeWithExtraSwitch com ctx returnStrategy targets treeExpr - let transformIdent (com: IBabelCompiler) ctx id = - let e = identAsExpr id + let transformIdent (com: IBabelCompiler) ctx (id: Fable.Ident) = + match id.Type with + // Remove unit idents, because the declaration may have been erased #4041 + | Fable.Unit -> undefined id.Range None + | _ -> + let e = identAsExpr id - if com.IsTypeScript && ctx.ForcedIdents.Contains id.Name then - Expression.unaryExpression (UnaryNot, e, isSuffix = true) - else - e + if com.IsTypeScript && ctx.ForcedIdents.Contains id.Name then + Expression.unaryExpression (UnaryNot, e, isSuffix = true) + else + e let rec transformAsExpr (com: IBabelCompiler) ctx (expr: Fable.Expr) : Expression = match expr with diff --git a/tests/Integration/Integration/data/transforms/RemoveUnitIdents.fs b/tests/Integration/Integration/data/transforms/RemoveUnitIdents.fs new file mode 100644 index 0000000000..a4f02563e3 --- /dev/null +++ b/tests/Integration/Integration/data/transforms/RemoveUnitIdents.fs @@ -0,0 +1,8 @@ +module RemoveUnitIdents + +type Model = unit + +let update (model: Model) = + model, () + +update () |> ignore \ No newline at end of file diff --git a/tests/Integration/Integration/data/transforms/RemoveUnitIdents.jsx.expected b/tests/Integration/Integration/data/transforms/RemoveUnitIdents.jsx.expected new file mode 100644 index 0000000000..b1d2555323 --- /dev/null +++ b/tests/Integration/Integration/data/transforms/RemoveUnitIdents.jsx.expected @@ -0,0 +1,7 @@ + +export function update() { + return [undefined, undefined]; +} + +update(); + diff --git a/tests/Integration/Integration/data/transforms/transforms.fsproj b/tests/Integration/Integration/data/transforms/transforms.fsproj new file mode 100644 index 0000000000..f006d61059 --- /dev/null +++ b/tests/Integration/Integration/data/transforms/transforms.fsproj @@ -0,0 +1,17 @@ + + + + net9.0 + Major + true + + + + + + + + + + +