diff --git a/src/Fable.Transforms/Beam/Fable2Beam.fs b/src/Fable.Transforms/Beam/Fable2Beam.fs index af96ec91ff..5258d1db13 100644 --- a/src/Fable.Transforms/Beam/Fable2Beam.fs +++ b/src/Fable.Transforms/Beam/Fable2Beam.fs @@ -1162,7 +1162,7 @@ and transformValue (com: IBeamCompiler) (ctx: Context) (value: ValueKind) : Beam else adjusted - Beam.ErlExpr.Literal(Beam.ErlLiteral.BigInt(string value)) + Beam.ErlExpr.Literal(Beam.ErlLiteral.BigInt(string value)) | NewRecord(values, ref, _genArgs) -> match com.TryGetEntity(ref) with diff --git a/src/Fable.Transforms/Dart/Replacements.fs b/src/Fable.Transforms/Dart/Replacements.fs index 37d183d845..a99dfc9ef8 100644 --- a/src/Fable.Transforms/Dart/Replacements.fs +++ b/src/Fable.Transforms/Dart/Replacements.fs @@ -665,7 +665,8 @@ let tryEntityIdent (com: Compiler) entFullName = | Types.averager | Types.icomparerGeneric | Types.iequalityComparerGeneric -> - let entFullName = entFullName[entFullName.LastIndexOf(".") + 1 ..] + let entFullName = + entFullName[entFullName.LastIndexOf(".", StringComparison.Ordinal) + 1 ..] let entFullName = match entFullName.IndexOf("`", StringComparison.Ordinal) with diff --git a/src/Fable.Transforms/FSharp2Fable.Util.fs b/src/Fable.Transforms/FSharp2Fable.Util.fs index ab3c45518a..4b8225569a 100644 --- a/src/Fable.Transforms/FSharp2Fable.Util.fs +++ b/src/Fable.Transforms/FSharp2Fable.Util.fs @@ -651,7 +651,7 @@ module Helpers = let join sep s o = (f s) - + (if o = "" then + + (if String.IsNullOrEmpty(o) then "" else sep + o) @@ -1123,7 +1123,7 @@ module Patterns = memb.IsPropertyGetterMethod && not memb.IsDispatchSlot && not memb.IsOverrideOrExplicitInterfaceImplementation - && memb.LogicalName.StartsWith("get_Is") + && memb.LogicalName.StartsWith("get_Is", StringComparison.Ordinal) then let unionCaseName = memb.LogicalName |> Naming.replacePrefix "get_Is" "" ent.UnionCases |> Seq.tryFind (fun uc -> uc.Name = unionCaseName) diff --git a/src/Fable.Transforms/Fable2Babel.fs b/src/Fable.Transforms/Fable2Babel.fs index 2d6941143b..a4865fdbea 100644 --- a/src/Fable.Transforms/Fable2Babel.fs +++ b/src/Fable.Transforms/Fable2Babel.fs @@ -4047,7 +4047,7 @@ but thanks to the optimisation done below we get "Unable to find a valid constructor for generating interface via ParamObject, please make sure the constructor has at least one parameter." [] - | members :: [] -> + | [ members ] -> Declaration.interfaceDeclaration ( Identifier.identifier decl.Name, members, diff --git a/src/Fable.Transforms/Global/Naming.fs b/src/Fable.Transforms/Global/Naming.fs index 3310138db7..53a03effd2 100644 --- a/src/Fable.Transforms/Global/Naming.fs +++ b/src/Fable.Transforms/Global/Naming.fs @@ -443,11 +443,11 @@ module Naming = let reflectionSuffix = "_$reflection" let private printPart sanitize separator part overloadSuffix = - (if part = "" then + (if String.IsNullOrEmpty(part) then "" else separator + (sanitize part)) - + (if overloadSuffix = "" then + + (if String.IsNullOrEmpty(overloadSuffix) then "" else "_" + overloadSuffix) diff --git a/src/Fable.Transforms/Global/Prelude.fs b/src/Fable.Transforms/Global/Prelude.fs index 8a795b7c71..94a9aa486a 100644 --- a/src/Fable.Transforms/Global/Prelude.fs +++ b/src/Fable.Transforms/Global/Prelude.fs @@ -272,7 +272,7 @@ module Path = #endif let ChangeExtension (path: string, ext: string) = - let i = path.LastIndexOf(".") + let i = path.LastIndexOf(".", StringComparison.Ordinal) if i < 0 then path @@ -280,7 +280,7 @@ module Path = path.Substring(0, i) + ext let GetExtension (path: string) = - let i = path.LastIndexOf(".") + let i = path.LastIndexOf(".", StringComparison.Ordinal) if i < 0 then "" @@ -289,12 +289,12 @@ module Path = let GetFileName (path: string) = let normPath = normalizePath path - let i = normPath.LastIndexOf("/") + let i = normPath.LastIndexOf("/", StringComparison.Ordinal) normPath.Substring(i + 1) let GetFileNameWithoutExtension (path: string) = let filename = GetFileName path - let i = filename.LastIndexOf(".") + let i = filename.LastIndexOf(".", StringComparison.Ordinal) if i < 0 then filename @@ -303,7 +303,7 @@ module Path = let GetDirectoryName (path: string) = let normPath = normalizePath path - let i = normPath.LastIndexOf("/") + let i = normPath.LastIndexOf("/", StringComparison.Ordinal) if i < 0 then "" @@ -312,7 +312,7 @@ module Path = let GetDirectoryAndFileNames (path: string) = let normPath = normalizePath path - let i = normPath.LastIndexOf("/") + let i = normPath.LastIndexOf("/", StringComparison.Ordinal) if i < 0 then "", normPath diff --git a/src/Fable.Transforms/OverloadSuffix.fs b/src/Fable.Transforms/OverloadSuffix.fs index 72c97651f2..9fc0f9308b 100644 --- a/src/Fable.Transforms/OverloadSuffix.fs +++ b/src/Fable.Transforms/OverloadSuffix.fs @@ -130,7 +130,7 @@ let rec private getTypeFastFullName (genParams: IDictionary<_, _>) (t: Fable.Typ let genArgs = String.concat "," genArgs let genArgs = - if genArgs = "" then + if System.String.IsNullOrEmpty(genArgs) then "" else "[" + genArgs + "]" diff --git a/src/Fable.Transforms/Php/Fable2Php.fs b/src/Fable.Transforms/Php/Fable2Php.fs index cee3f10fdd..1bd460321f 100644 --- a/src/Fable.Transforms/Php/Fable2Php.fs +++ b/src/Fable.Transforms/Php/Fable2Php.fs @@ -1016,7 +1016,7 @@ let rec convertExpr (com: IPhpCompiler) (expr: Fable.Expr) = // convert calls on Array object by string key. // in Php $a['Hello'] is equivalent to $a->Hello, we choose this representation. - let meth = m.Substring(m.LastIndexOf(".") + 1) + let meth = m.Substring(m.LastIndexOf(".", StringComparison.Ordinal) + 1) PhpMethodCall(convertExpr com target, PhpIdent(unscopedIdent meth), convertArgs com (args)) diff --git a/src/Fable.Transforms/Python/Prelude.fs b/src/Fable.Transforms/Python/Prelude.fs index 963c209402..1fc2332a36 100644 --- a/src/Fable.Transforms/Python/Prelude.fs +++ b/src/Fable.Transforms/Python/Prelude.fs @@ -237,11 +237,11 @@ module Naming = name let private printPart sanitize separator part overloadSuffix = - (if part = "" then + (if String.IsNullOrEmpty(part) then "" else separator + (sanitize part)) - + (if overloadSuffix = "" then + + (if String.IsNullOrEmpty(overloadSuffix) then "" else "_" + overloadSuffix) diff --git a/src/Fable.Transforms/Python/Replacements.fs b/src/Fable.Transforms/Python/Replacements.fs index 3422c61d21..b9a84aa0d4 100644 --- a/src/Fable.Transforms/Python/Replacements.fs +++ b/src/Fable.Transforms/Python/Replacements.fs @@ -2497,7 +2497,7 @@ let intrinsicFunctions (com: ICompiler) (ctx: Context) r t (i: CallInfo) (thisAr Helper.ConstructorCall(constructor com ent, t, [], ?loc = r) |> Some | t -> - $"Cannot create instance of type unresolved at compile time: %A{t}" + $"Cannot create instance of type unresolved at compile time: {t}" |> addErrorAndReturnNull com ctx.InlinePath r |> Some // reference: https://msdn.microsoft.com/visualfsharpdocs/conceptual/operatorintrinsics.powdouble-function-%5bfsharp%5d diff --git a/src/Fable.Transforms/Replacements.Util.fs b/src/Fable.Transforms/Replacements.Util.fs index a2d937e0d2..52d2f37777 100644 --- a/src/Fable.Transforms/Replacements.Util.fs +++ b/src/Fable.Transforms/Replacements.Util.fs @@ -394,7 +394,7 @@ let splitFullName (fullname: string) = | -1 -> fullname | i -> fullname[.. i - 1] - match fullname.LastIndexOf(".") with + match fullname.LastIndexOf(".", StringComparison.Ordinal) with | -1 -> "", fullname | i -> fullname.Substring(0, i), fullname.Substring(i + 1) @@ -404,7 +404,7 @@ let getTypeNameFromFullName (fullname: string) = | -1 -> fullname | i -> fullname[.. i - 1] - match fullname.LastIndexOf(".") with + match fullname.LastIndexOf(".", StringComparison.Ordinal) with | -1 -> fullname | i -> fullname.Substring(i + 1) diff --git a/src/Fable.Transforms/Rust/AST/Rust.AST.Adapters.fs b/src/Fable.Transforms/Rust/AST/Rust.AST.Adapters.fs index 08888b656c..37277dd68f 100644 --- a/src/Fable.Transforms/Rust/AST/Rust.AST.Adapters.fs +++ b/src/Fable.Transforms/Rust/AST/Rust.AST.Adapters.fs @@ -205,7 +205,7 @@ type System.String with | '\'' -> @"\'" | '\"' -> @"\""" | c when System.Char.IsControl(c) -> System.String.Format(@"\u{0}{1:x4}{2}", "{", int c, "}") - | c -> string c + | c -> string c ) else self @@ -225,7 +225,7 @@ type System.String with | '\'' -> @"\'" | '\"' -> @"\""" | c when c < '\x20' || c > '\x7e' -> System.String.Format(@"\u{0}{1:x4}{2}", "{", int c, "}") - | c -> string c + | c -> string c ) else self diff --git a/src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs b/src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs index 72d5c6f8b5..49a695f434 100644 --- a/src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs +++ b/src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs @@ -20,13 +20,17 @@ module Naming = let rustPrelude = HashSet(kw.RustPrelude) let rawIdent (ident: string) = - if ident = "" || ident = "_" || ident.StartsWith("r#") then + if + System.String.IsNullOrEmpty(ident) + || ident = "_" + || ident.StartsWith("r#", System.StringComparison.Ordinal) + then ident else "r#" + ident let stripRaw (ident: string) = - if ident.StartsWith("r#") then + if ident.StartsWith("r#", System.StringComparison.Ordinal) then ident.Substring("r#".Length) else ident @@ -191,14 +195,14 @@ module Literals = let mkBoolLit (value: bool) : Lit = { - token = mkBoolTokenLit ((string value).ToLowerInvariant()) + token = mkBoolTokenLit ((string value).ToLowerInvariant()) kind = LitKind.Bool(value) span = DUMMY_SP } let mkCharLit (value: char) : Lit = { - token = mkCharTokenLit ((string value).escape_debug ()) + token = mkCharTokenLit ((string value).escape_debug ()) kind = LitKind.Char(value) span = DUMMY_SP } @@ -882,7 +886,10 @@ module Exprs = let mkEmitExpr (value: string) args : Expr = let value = // if value starts and ends with ", escape inside the quotes - if value.StartsWith("\"") && value.EndsWith("\"") then + if + value.StartsWith("\"", System.StringComparison.Ordinal) + && value.EndsWith("\"", System.StringComparison.Ordinal) + then "\"" + value[1 .. (value.Length - 2)].escape_debug () + "\"" else value diff --git a/src/Fable.Transforms/Rust/AST/Rust.AST.State.fs b/src/Fable.Transforms/Rust/AST/Rust.AST.State.fs index b60c7f40cd..086d21cae0 100644 --- a/src/Fable.Transforms/Rust/AST/Rust.AST.State.fs +++ b/src/Fable.Transforms/Rust/AST/Rust.AST.State.fs @@ -273,7 +273,7 @@ let print_emit_expr self value (args: Vec<_>, printArgs) = let i = int m.Groups[1].Value for j = i to args.Length - 1 do - rep.Add("$" + string j) + rep.Add("$" + string j) String.concat ", " rep ) diff --git a/src/Fable.Transforms/Rust/Replacements.fs b/src/Fable.Transforms/Rust/Replacements.fs index 58c16dcd03..47ad85bf73 100644 --- a/src/Fable.Transforms/Rust/Replacements.fs +++ b/src/Fable.Transforms/Rust/Replacements.fs @@ -85,7 +85,10 @@ let makeStaticLibCall com r t (i: CallInfo) moduleName memberName args = let makeStaticMemberCall com r t (i: CallInfo) moduleName memberName args = let fullName = i.DeclaringEntityFullName - let entityName = fullName.Substring(fullName.LastIndexOf(".") + 1) + + let entityName = + fullName.Substring(fullName.LastIndexOf(".", StringComparison.Ordinal) + 1) + let memberName = entityName + "::" + memberName makeStaticLibCall com r t i moduleName memberName args @@ -152,7 +155,7 @@ let toLowerFirstWithArgsCountSuffix (args: Expr list) meth = let meth = Naming.lowerFirst meth if argCount > 1 then - meth + (string argCount) + meth + (string argCount) else meth @@ -766,7 +769,7 @@ let refCells (com: ICompiler) (ctx: Context) r t (i: CallInfo) (thisArg: Expr op let getMemberName isStatic (i: CallInfo) = let memberName = i.CompiledName |> FSharp2Fable.Helpers.cleanNameAsRustIdentifier - if i.OverloadSuffix = "" then + if String.IsNullOrEmpty(i.OverloadSuffix) then memberName else let sep = @@ -851,7 +854,7 @@ let makeRustFormatString interpolated (fmt: string) = let g5 = m.Groups[5].Value let g4 = - if g4 = "" && (g5 = "f" || g5 = "F") then + if String.IsNullOrEmpty(g4) && (g5 = "f" || g5 = "F") then ".6" else g4 @@ -867,7 +870,7 @@ let makeRustFormatString interpolated (fmt: string) = let argFmt = let formatting = g2 + g3 + g4 + g5 - if formatting = "" then + if String.IsNullOrEmpty(formatting) then g1 + "{}" else g1 + "{:" + formatting + "}" @@ -2524,59 +2527,60 @@ let dateTimes (com: ICompiler) (ctx: Context) r t (i: CallInfo) (thisArg: Expr o | ".ctor" -> match args with | [] -> "new_empty" |> Some - | ExprType(Number(Int64, _)) :: [] -> "new_ticks" |> Some - | ExprType(Number(Int64, _)) :: _kind :: [] -> "new_ticks_kind" |> Some - | ExprType(DeclaredType(ent, [])) :: _timeOnly :: [] when ent.FullName = Types.dateOnly -> - "new_date_time" |> Some - | ExprType(DeclaredType(ent, [])) :: _timeOnly :: _kind :: [] when ent.FullName = Types.dateOnly -> + | [ ExprType(Number(Int64, _)) ] -> "new_ticks" |> Some + | [ ExprType(Number(Int64, _)); _kind ] -> "new_ticks_kind" |> Some + | [ ExprType(DeclaredType(ent, [])); _timeOnly ] when ent.FullName = Types.dateOnly -> "new_date_time" |> Some + | [ ExprType(DeclaredType(ent, [])); _timeOnly; _kind ] when ent.FullName = Types.dateOnly -> "new_date_time_kind" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: [] -> - "new_ymd" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(_, - NumberInfo.IsEnum ent)) :: [] when - ent.FullName = "System.DateTimeKind" - -> + | [ ExprType(Number(Int32, _)); ExprType(Number(Int32, _)); ExprType(Number(Int32, _)) ] -> "new_ymd" |> Some + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(_, NumberInfo.IsEnum ent)) ] when ent.FullName = "System.DateTimeKind" -> "new_ymdhms_kind" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(_, - NumberInfo.IsEnum ent)) :: [] when - ent.FullName = "System.DateTimeKind" - -> + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(_, NumberInfo.IsEnum ent)) ] when ent.FullName = "System.DateTimeKind" -> "new_ymdhms_milli_kind" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(_, - NumberInfo.IsEnum ent)) :: [] when - ent.FullName = "System.DateTimeKind" - -> + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(_, NumberInfo.IsEnum ent)) ] when ent.FullName = "System.DateTimeKind" -> "new_ymdhms_micro_kind" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: [] -> - "new_ymdhms" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: [] -> - "new_ymdhms_milli" |> Some - | ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: ExprType(Number(Int32, - _)) :: [] -> - "new_ymdhms_micro" |> Some + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) ] -> "new_ymdhms" |> Some + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) ] -> "new_ymdhms_milli" |> Some + | [ ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) + ExprType(Number(Int32, _)) ] -> "new_ymdhms_micro" |> Some | _ -> None |> Option.map (fun meth -> makeStaticMemberCall com r t i "DateTime" meth args) | "Compare" @@ -2597,7 +2601,7 @@ let dateTimeOffsets (com: ICompiler) (ctx: Context) r t (i: CallInfo) (thisArg: match args with | [] -> "new_empty" |> Some | ExprType(Number(Int64, _)) :: _ -> "new_ticks" |> Some - | ExprType(DeclaredType(ent, [])) :: [] when ent.FullName = Types.datetime -> "new_datetime" |> Some + | [ ExprType(DeclaredType(ent, [])) ] when ent.FullName = Types.datetime -> "new_datetime" |> Some | ExprType(DeclaredType(ent, [])) :: _ when ent.FullName = Types.datetime -> "new_datetime2" |> Some | ExprType(DeclaredType(ent, [])) :: _ when ent.FullName = Types.dateOnly -> "new_date_time" |> Some | [ ExprType(Number(Int32, _)) @@ -2733,7 +2737,7 @@ let timeSpans (com: ICompiler) (ctx: Context) r t (i: CallInfo) (thisArg: Expr o | _ -> // overloads with variable argument counts let argCount = List.length args - let meth = meth + (string argCount) + let meth = meth + (string argCount) makeDateOrTimeMemberCall com ctx r t i "TimeSpan" meth thisArg args |> Some | meth -> makeDateOrTimeMemberCall com ctx r t i "TimeSpan" meth thisArg args |> Some