]> git.proxmox.com Git - rustc.git/blob - vendor/heck/README.md
New upstream version 1.55.0+dfsg1
[rustc.git] / vendor / heck / README.md
1 # **heck** is a case conversion library
2
3 !["I specifically requested the opposite of this."](./no_step_on_snek.png)
4
5 This library exists to provide case conversion between common cases like
6 CamelCase and snake_case. It is intended to be unicode aware, internally
7 consistent, and reasonably well performing.
8
9 ## Definition of a word boundary
10
11 Word boundaries are defined as the "unicode words" defined in the
12 `unicode_segmentation` library, as well as within those words in this manner:
13
14 1. All underscore characters are considered word boundaries.
15 2. If an uppercase character is followed by lowercase letters, a word boundary
16 is considered to be just prior to that uppercase character.
17 3. If multiple uppercase characters are consecutive, they are considered to be
18 within a single word, except that the last will be part of the next word if it
19 is followed by lowercase characters (see rule 2).
20
21 That is, "HelloWorld" is segmented `Hello|World` whereas "XMLHttpRequest" is
22 segmented `XML|Http|Request`.
23
24 Characters not within words (such as spaces, punctuations, and underscores)
25 are not included in the output string except as they are a part of the case
26 being converted to. Multiple adjacent word boundaries (such as a series of
27 underscores) are folded into one. ("hello__world" in snake case is therefore
28 "hello_world", not the exact same string). Leading or trailing word boundary
29 indicators are dropped, except insofar as CamelCase capitalizes the first word.
30
31 ## Cases contained in this library:
32
33 1. CamelCase
34 2. snake_case
35 3. kebab-case
36 4. SHOUTY_SNAKE_CASE
37 5. mixedCase
38 6. Title Case
39 7. SHOUTY-KEBAB-CASE
40
41 ## Contributing
42
43 PRs of additional well-established cases welcome.
44
45 This library is a little bit opinionated (dropping punctuation, for example).
46 If that doesn't fit your use case, I hope there is another crate that does. I
47 would prefer **not** to receive PRs to make this behavior more configurable.
48
49 Bug reports & fixes always welcome. :-)
50
51 ## MSRV
52
53 The minimum supported Rust version for this crate is 1.32.0. This may change in
54 minor or patch releases, but we probably won't ever require a very recent
55 version. If you would like to have a stronger guarantee than that, please open
56 an issue.
57
58 ## License
59
60 heck is distributed under the terms of both the MIT license and the
61 Apache License (Version 2.0).
62
63 See LICENSE-APACHE and LICENSE-MIT for details.