From 883829c647a40ec883a6a40586b833c57b0e4bc6 Mon Sep 17 00:00:00 2001 From: Maxime Mangel Date: Fri, 18 Oct 2024 22:35:08 +0200 Subject: [PATCH] fix: add support for literal enums with `@`, `<`, `>`, ` ` (space) [converter][web] Fix #133 --- src/Glutinum.Converter/Utils/Naming.fs | 8 +++++++- .../enums/literalStringEnumWithAtSymbol.d.ts | 2 ++ .../enums/literalStringEnumWithAtSymbol.fsx | 14 ++++++++++++++ .../literalStringEnumWithLeftAngleBracket.d.ts | 2 ++ .../literalStringEnumWithLeftAngleBracket.fsx | 14 ++++++++++++++ .../literalStringEnumWithRightAngleBracket.d.ts | 2 ++ .../literalStringEnumWithRightAngleBracket.fsx | 14 ++++++++++++++ .../enums/literalStringEnumWithSpace.d.ts | 2 ++ .../enums/literalStringEnumWithSpace.fsx | 14 ++++++++++++++ 9 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/specs/references/enums/literalStringEnumWithAtSymbol.d.ts create mode 100644 tests/specs/references/enums/literalStringEnumWithAtSymbol.fsx create mode 100644 tests/specs/references/enums/literalStringEnumWithLeftAngleBracket.d.ts create mode 100644 tests/specs/references/enums/literalStringEnumWithLeftAngleBracket.fsx create mode 100644 tests/specs/references/enums/literalStringEnumWithRightAngleBracket.d.ts create mode 100644 tests/specs/references/enums/literalStringEnumWithRightAngleBracket.fsx create mode 100644 tests/specs/references/enums/literalStringEnumWithSpace.d.ts create mode 100644 tests/specs/references/enums/literalStringEnumWithSpace.fsx diff --git a/src/Glutinum.Converter/Utils/Naming.fs b/src/Glutinum.Converter/Utils/Naming.fs index 7a71c8e..d0492ba 100644 --- a/src/Glutinum.Converter/Utils/Naming.fs +++ b/src/Glutinum.Converter/Utils/Naming.fs @@ -13,6 +13,9 @@ let private escapeName (name: string) : string = name.Contains("-") || name.Contains("$") || name.Contains("#") + || name.Contains("<") + || name.Contains(">") + || name.Contains(" ") || startWithDigit name || Keywords.fsharp.Contains name then @@ -36,10 +39,13 @@ let removeSurroundingQuotes (text: string) : string = let replaceDot (text: string) : string = text.Replace(".", "_") +let replaceAt (text: string) : string = text.Replace("@", "_AT_") + type SanitizeNameResult = { Name: string; IsDifferent: bool } let sanitizeNameWithResult (name: string) : SanitizeNameResult = - let sanitizedName = name |> replaceDot |> removeSurroundingQuotes + let sanitizedName = + name |> replaceDot |> replaceAt |> removeSurroundingQuotes // Check if the name is different after sanitization // This is used to check if the value is different from the default Fable computed value diff --git a/tests/specs/references/enums/literalStringEnumWithAtSymbol.d.ts b/tests/specs/references/enums/literalStringEnumWithAtSymbol.d.ts new file mode 100644 index 0000000..27dc1a9 --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithAtSymbol.d.ts @@ -0,0 +1,2 @@ +export type Name = + | 'an@nymous>'; diff --git a/tests/specs/references/enums/literalStringEnumWithAtSymbol.fsx b/tests/specs/references/enums/literalStringEnumWithAtSymbol.fsx new file mode 100644 index 0000000..82d07bc --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithAtSymbol.fsx @@ -0,0 +1,14 @@ +module rec Glutinum + +open Fable.Core +open Fable.Core.JsInterop +open System + +[] +[] +type Name = + | [")>] ``an_AT_nymous>`` + +(***) +#r "nuget: Fable.Core" +(***) diff --git a/tests/specs/references/enums/literalStringEnumWithLeftAngleBracket.d.ts b/tests/specs/references/enums/literalStringEnumWithLeftAngleBracket.d.ts new file mode 100644 index 0000000..b862323 --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithLeftAngleBracket.d.ts @@ -0,0 +1,2 @@ +export type Name = + | '] +[] +type Name = + | ``'; diff --git a/tests/specs/references/enums/literalStringEnumWithRightAngleBracket.fsx b/tests/specs/references/enums/literalStringEnumWithRightAngleBracket.fsx new file mode 100644 index 0000000..f3fc03d --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithRightAngleBracket.fsx @@ -0,0 +1,14 @@ +module rec Glutinum + +open Fable.Core +open Fable.Core.JsInterop +open System + +[] +[] +type Name = + | ``anonymous>`` + +(***) +#r "nuget: Fable.Core" +(***) diff --git a/tests/specs/references/enums/literalStringEnumWithSpace.d.ts b/tests/specs/references/enums/literalStringEnumWithSpace.d.ts new file mode 100644 index 0000000..8972dcc --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithSpace.d.ts @@ -0,0 +1,2 @@ +export type Name = + | 'anony mous'; diff --git a/tests/specs/references/enums/literalStringEnumWithSpace.fsx b/tests/specs/references/enums/literalStringEnumWithSpace.fsx new file mode 100644 index 0000000..2a9199e --- /dev/null +++ b/tests/specs/references/enums/literalStringEnumWithSpace.fsx @@ -0,0 +1,14 @@ +module rec Glutinum + +open Fable.Core +open Fable.Core.JsInterop +open System + +[] +[] +type Name = + | ``anony mous`` + +(***) +#r "nuget: Fable.Core" +(***)