Skip to content

mingrammer/casec

Repository files navigation



Casec

A text case converter




casec is a text case converter for programmers. casec now supports upper, lower, title, camel, pascal, snake, kebab (or lisp) cases.

It also provides case conversion library not only command line tool.

Installation

Using go get

Go version 1.10 or higher is required.

go get github.com/mingrammer/casec/...

If you want to only download the casec library

go get github.com/mingrammer/casec

Using homebrew

brew tap mingrammer/casec
brew install casec

Using .tar.gz archive

Download gzip file from Github Releases according to your OS. Then, copy the unzipped executable to under system path.

Usage

CLI

Convert all words to snake case.

$ casec -t snake main.py

Convert all snake case to camel case.

$ casec -f snake -t camel internal.go

Convert only 20~50 lines from snake case to camel case.

$ casec -f snake -t camel -l 20:50 internal.go

Show how would have been converted. (dry-run)

$ casec -f snake -t kebab -n match.lisp

Convert all camel case to snake case except for words you don't want to convert. It is useful for preventing the keywords (reserved words) or conventions from converting.

$ casec -f snake -t pascal -i '^package|var|const|if|for|range|return|func|go$' redis.go

You can pass multiple ignore expressions.

$ casec -f snake -t pascal -i '^package|var|const|if|for|range|return|func|go$' -i '^github|com$' redis.go

Library

See details in GoDoc

package main

import (
    "fmt"

    "github.com/mingrammer/casec"
)

func main() {
    fmt.Println(casec.IsSnake("this_is_snake"))
    // Output: true
    fmt.Println(casec.IsCamel("thisIsNot_camelCase"))
    // Output: false
    fmt.Println(casec.Invert("Invert Me"))
    // Output: iNVERT mE
    fmt.Println(casec.ToCamel("write_rune"))
    // Output: writeRune
    fmt.Println(casec.ToSnake("IPAddress"))
    // Output: ip_address
    fmt.Println(casec.ToKebab("simpleJSONParser"))
    // Output: simple-json-parser
}

Known issues

casec separates the words with non-letters (except - and _) including . and / letters. So, the ignore option of casec can not recognize the dot-or-slash separated word (ex. "github.com/mingrammer/cfmt") as a single chunk. So if you want to prevent the import path of Go source code, for example, import "github.com/mingrammer/cfmt" from converting, you should pass the ignore expression as -i "^(github|com|mingrammer|cfmt)$".

Here is a (maybe) solution for solving this issue.

  1. Treat the string surrounded with quotes ("" or '') as a single word optionally.

License

MIT