CaseAnything 🐫

.package(url: "https://github.com/mesqueeb/CaseAnything", from: "0.1.5")

14 种 case 转换函数:camelCase、kebab-case、PascalCase 等等...
简单集成,nano 包大小。(体积小巧!)

动机

我创建这个包的原因是其他 case 转换包没有涵盖我这个包所包含的 14 种可能性。

我关注的一些特性

  • 体积小巧
  • 出色的代码弹出文档
  • 完整的单元测试覆盖率
  • 0 依赖
  • CaseAnything 被用于...

  • 著名的 Mac 应用 Popclip 💊
  • Lottie-player ∫
  • OpenAPI CLI Portman 👨🏽‍🚀
  • 以及 数百个...
  • 用法

    import CaseAnything

    CaseAnything 根据您传递的字符串是否包含空格有不同的行为。

    不含空格的字符串

    名称 输入示例 输出示例
    🐪 camelCase camelCase("$catDog") catDog
    🐫 PascalCase
    UpperCamelCase
    pascalCase("$catDog")
    upperCamelCase("$catDog")
    CatDog
    🥙 kebab-case kebabCase("$catDog") cat-dog
    🐍 snake_case snakeCase("$catDog") cat_dog
    📣 CONSTANT_CASE constantCase("$catDog") CAT_DOG
    🚂 Train-Case trainCase("$catDog") Cat-Dog
    🕊 Ada_Case adaCase("$catDog") Cat_Dog
    👔 COBOL-CASE cobolCase("$catDog") CAT-DOG
    📍 Dot.notation dotNotation("$catDog") cat.Dog
    📂 Path/case pathCase("$catDog") $cat/Dog
    🛰 Space case spaceCase("$catDog") $cat Dog
    🏛 Capital Case capitalCase("$catDog") $Cat Dog
    🔡 lower case lowerCase("$catDog") $cat dog
    🔠 UPPER CASE upperCase("$catDog") $CAT DOG

    特殊字符

    您可以看到,大多数函数默认删除特殊字符,而一些函数保留特殊字符。

    删除 特殊字符的函数* 保留 特殊字符的函数*
  • camelCase
  • pascalCase
  • kebabCase
  • snakeCase
  • constantCase
  • trainCase
  • adaCase
  • cobolCase
  • dotNotation
  • pathCase
  • spaceCase
  • capitalCase
  • lowerCase
  • upperCase
  • *您可以控制是否保留或删除特殊字符,如下所示

    // default:
    camelCase("$catDog") == "catDog"
    // force keeping special characters:
    camelCase("$catDog", keepSpecialCharacters: true) == "$catDog"
    
    // default:
    pathCase("$catDog") == "$cat/Dog"
    // force removing special characters:
    pathCase("$catDog", keepSpecialCharacters: false) == "cat/Dog"

    Case 转换

    这些 case 不改变 单词的大小写

    // default:
    dotNotation("$catDog") == "cat.Dog"
    // force lower case:
    dotNotation("$catDog").toLowerCase() == "cat.dog"

    包含空格的字符串

    只要目标字符串中存在空格,它就会将输入视为句子,并且仅在空格处分割每个部分。

    名称 输入示例 输出示例
    🐪 camelCase camelCase("I'm O.K.!") imOk
    🐫 PascalCase
    UpperCamelCase
    pascalCase("I'm O.K.!")
    upperCamelCase("I'm O.K.!")
    ImOk
    🥙 kebab-case kebabCase("I'm O.K.!") im-ok
    🐍 snake_case snakeCase("I'm O.K.!") im_ok
    📣 CONSTANT_CASE constantCase("I'm O.K.!") IM_OK
    🚂 Train-Case trainCase("I'm O.K.!") Im-Ok
    🕊 Ada_Case adaCase("I'm O.K.!") Im_Ok
    👔 COBOL-CASE cobolCase("I'm O.K.!") IM-OK
    📍 Dot.notation dotNotation("I'm O.K.!") Im.OK
    📂 Path/case pathCase("I'm O.K.!") I'm/O.K.!
    🛰 Space case spaceCase("I'm O.K.!") I'm O.K.!
    🏛 Capital Case capitalCase("I'm O.K.!") I'm O.k.!
    🔡 lower case lowerCase("I'm O.K.!") i'm o.k.!
    🔠 UPPER CASE upperCase("I'm O.K.!") I'M O.K.!

    另请注意,多个连续空格被视为一个空格。

    仅保留某些特殊字符

    您可以选择保留一些特殊字符,而不是删除所有特殊字符。

    在下面的示例中,我们看到

    pascalCase("$cat-dog", keepSpecialCharacters: false)
    // CatDog   → not what we want
    
    pascalCase("$cat-dog", keepSpecialCharacters: true)
    // $Cat-Dog → not what we want
    
    pascalCase("$cat-dog", keep: ["$"])
    // $CatDog  → desired output

    将特殊字符转换为字母

    我用最常见的 Latin-1 Supplement 特殊字符扩展了常规字母表。

    这个库最酷的地方在于,对于用作变量名的 case,它会将特殊字符“转换”为常规字母!😎

    // CONVERTS special characters:
    camelCase("Çâfé Ågård")    == "cafeAgard"
    pascalCase("Çâfé Ågård")   == "CafeAgard"
    kebabCase("Çâfé Ågård")    == "cafe-agard"
    snakeCase("Çâfé Ågård")    == "cafe_agard"
    constantCase("Çâfé Ågård") == "CAFE_AGARD"
    trainCase("Çâfé Ågård")    == "Cafe-Agard"
    adaCase("Çâfé Ågård")      == "Cafe_Agard"
    cobolCase("Çâfé Ågård")    == "CAFE-AGARD"
    dotNotation("Çâfé Ågård")  == "Cafe.Agard"
    
    // DOES NOT convert special characters:
    spaceCase("Çâfé Ågård")    == "Çâfé Ågård"
    pathCase("Çâfé Ågård")     == "Çâfé/Ågård"
    lowerCase("Çâfé Ågård")    == "çâfé ågård"
    upperCase("Çâfé Ågård")    == "ÇÂFÉ ÅGÅRD"
    capitalCase("Çâfé Ågård")  == "Çâfé Ågård"

    代码文档

    我确保在悬停时提供出色的文档!

    docs preview

    键盘快捷键

    使用 Better Touch Tool,您可以设置键盘快捷键以使用 JavaScript 转换选定的文本。这个 repo 提供了一个易于安装的预设,其中包含 pascal、kebab 和 camel case 的快捷键!(感谢 @AndrewKoch)它甚至支持 VSCode 中的多光标!

    这是一个示例,演示如何触发键盘快捷键将选定的文本转换为 PascalCase;kebab-case;camelCase

    keyboard shortcuts example

    您可以从源代码下载 BTT 预设:CaseAnything.bttpreset

    源代码

    我的包保持小巧的原因在于,它实际上只是使用正则表达式来分隔“单词”。

    // the source code is similar to:
    public func splitOnSpecialChars(string: String) -> [String] {
      let splitRegex = try! NSRegularExpression(pattern: "^[a-z]+|[A-Z][a-z]+|[a-z]+|[0-9]+|[A-Z]+(?![a-z])")
      return splitRegex.matches(in: string, range: NSRange(string.startIndex..., in: string))
    }

    实际使用的正则表达式稍微全面一些,可以在这里找到。