mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
327c54ed02
Refactor unicode.py script Hi, I noticed that the `unicode.py` script used some deprecated escapes in regular expressions. E.g. `\d`, `\w`, `\.` will be illegal in the future without "raw strings". This is now fixed. I have also cleaned up the script quite a bit. ## Escape deprecation OK (note the `r`): `re.compile(r"\d")` Deprecated (from Python 3.6 onwards, see [here][link1] and [here][link2]): `re.compile("\d")`. [link1]: https://docs.python.org/3.6/whatsnew/3.6.html#deprecated-python-behavior [link2]: https://bugs.python.org/issue27364 This was evident running the script using Python 3.7 like so: ``` $ python3 -Wall unicode.py unicode.py:227: DeprecationWarning: invalid escape sequence \w re1 = re.compile("^ *([0-9A-F]+) *; *(\w+)") unicode.py:228: DeprecationWarning: invalid escape sequence \. re2 = re.compile("^ *([0-9A-F]+)\.\.([0-9A-F]+) *; *(\w+)") unicode.py:453: DeprecationWarning: invalid escape sequence \d pattern = "for Version (\d+)\.(\d+)\.(\d+) of the Unicode" ``` The documentation states that > A backslash-character pair that is not a valid escape sequence now generates a DeprecationWarning. Although this will eventually become a SyntaxError, that will not be for several Python releases. ## Testing To test my changes, I had to add support for choosing the Unicode version to use. The script will default to latest release (which is 12.0.0 at the moment, repo has 11.0.0 checked in). The script generates the exact same output for version 11.0.0 with Python 2.7 and 3.7 and no longer generates any deprecation warnings: ``` $ python3 -Wall unicode.py -v 11.0.0 Using Unicode version: 11.0.0 Regenerated tables.rs. $ git diff tables.rs $ python2 -Wall unicode.py -v 11.0.0 Using Unicode version: 11.0.0 Regenerated tables.rs. $ git diff tables.rs $ python2 --version Python 2.7.16 $ python3 --version Python 3.7.3 ``` ## Extra functionality Furthermore, the script will check and download the latest Unicode version by default (without the `-v` argument). The `--help` is below: ``` $ ./unicode.py --help usage: unicode.py [-h] [-v VERSION] Regenerate Unicode tables (tables.rs). optional arguments: -h, --help show this help message and exit -v VERSION, --version VERSION Unicode version to use (if not specified, defaults to latest available final release). ``` ## Cleanups I have cleaned up the code quite a bit, with Python best practices and code style in mind. I'm happy to provide more details and rationale for all my changes if the reviewers so desire. One externally visible change is that the Unicode data will now be downloaded into `src/libcore/unicode/downloaded` directory suffixed by Unicode version: ``` $ pwd .../rust/src/libcore/unicode $ exa -T downloaded/ downloaded ├── 11.0.0 │ ├── DerivedCoreProperties.txt │ ├── DerivedNormalizationProps.txt │ ├── PropList.txt │ ├── ReadMe.txt │ ├── Scripts.txt │ ├── SpecialCasing.txt │ └── UnicodeData.txt └── 12.0.0 ├── DerivedCoreProperties.txt ├── DerivedNormalizationProps.txt ├── PropList.txt ├── ReadMe.txt ├── Scripts.txt ├── SpecialCasing.txt └── UnicodeData.txt ```
68 lines
817 B
Plaintext
68 lines
817 B
Plaintext
*~
|
|
.#*
|
|
.DS_Store
|
|
.cproject
|
|
.hg/
|
|
.hgignore
|
|
.idea
|
|
*.iml
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
.project
|
|
.settings/
|
|
.valgrindrc
|
|
.vscode
|
|
.favorites.json
|
|
/*-*-*-*/
|
|
/*-*-*/
|
|
/Makefile
|
|
/build
|
|
/config.toml
|
|
/dist/
|
|
/dl/
|
|
/doc
|
|
/inst/
|
|
/llvm/
|
|
/mingw-build/
|
|
/nd/
|
|
/obj/
|
|
/rt/
|
|
/rustllvm/
|
|
/src/libcore/unicode/DerivedCoreProperties.txt
|
|
/src/libcore/unicode/DerivedNormalizationProps.txt
|
|
/src/libcore/unicode/PropList.txt
|
|
/src/libcore/unicode/ReadMe.txt
|
|
/src/libcore/unicode/Scripts.txt
|
|
/src/libcore/unicode/SpecialCasing.txt
|
|
/src/libcore/unicode/UnicodeData.txt
|
|
/src/libcore/unicode/downloaded
|
|
/stage[0-9]+/
|
|
/target
|
|
target/
|
|
/test/
|
|
/tmp/
|
|
tags
|
|
tags.*
|
|
TAGS
|
|
TAGS.*
|
|
\#*
|
|
\#*\#
|
|
config.mk
|
|
config.stamp
|
|
keywords.md
|
|
lexer.ml
|
|
mir_dump
|
|
Session.vim
|
|
src/etc/dl
|
|
tmp.*.rs
|
|
version.md
|
|
version.ml
|
|
version.texi
|
|
.cargo
|
|
!src/vendor/**
|
|
/src/target/
|
|
|
|
no_llvm_build
|
|
|