## crystal-lang/crystal — tets-doc-4…v0.24.1

_1742+ commits._

### Features
- **Use implicit #new in File.open** (393ba01)
- **Add 0.24.0 to CHANGELOG** (494fdcb)
- **Add `Time.utc` (#5321)** (1978c8b)
- **Add `Set#===` as alias to `Set#includes?` (#5269)** (6ee1bf9)
- **Add missing `uninstantiate(ancestor)`** (c26c0e0)
- **Add reduce to ArrayLiteral for macros (#5294)** (818c438)
- **Add custom extension support for Tempfile (#5264)** (4b6f1c1)
- **Add failing to_i/u/f conversion specs** (a4dcef7)
- **Add a failing to_s test** (e3cb760)
- **Add test for normalize_quotient** (20376de)
- **Add a factoring powers of ten simplifier, make private funs public** (92ee63e)
- **Add a failing test for a BigDecimal.to_s that has trailing zeros** (4712a92)
- **Add a failing test for hashing contract** (8e32f4b)
- **Add a few missing >= <= tests** (087ea1e)
- **Syntax: check `Expressions#keyword` in `to_s` and add `If#ternary?` (#5226)** (bf3dd80)
- **Add json export to docs generator (#4746)** (2e00b8f)
- **Add ThinLTO for LLVM >= 4.0 (#4367)** (e8aca96)
- **Add docs to expectations methods (#5092)** (844cc6e)
- **Add option `--output` to `crystal docs` generator (#4937)** (4b75571)
- **Add Time.monotonic to return monotonic clock** (4227ef0)
- **Add remove_empty option to many String#split overloads** (1d02669)
- **Add documentation and type annotations for Time (#5093)** (3e14424)
- **Add Math sqrt overloads for Bigs (#5113)** (bdf35a8)

### Fixes
- **Fix leaky FileUtils specs** (bc56810)
- **Parser: fix the condition to decide var or call** (20e0cf9)
- **Merge pull request #5282 from wmoxam/fix-openbsd-linking-issue** (e482297)
- **Fix typo in IO comment (#5322)** (f7f9c5b)
- **Format: fix to format `$1?` (#5313)** (6027a94)
- **fix typo (#5300)** (7f276fd)
- **fix HTTP::Params.parse query string "&&" (#5273)** (c9fac56)
- **spec/methods: Fix typo in the comment** (282834e)
- **Fix few to_s edge cases. Implement to_f/i/u** (bde2f44)
- **Fix to_s on negative numbers > -1.0** (62a32d2)
- **Remove warning, fix comments** (f23f1e1)
- **Fix BigInt <=> Int case** (5095c6b)
- **Syntax: fix incorrect handling of "%w(" (#5241)** (94480d9)
- **Fix to keep double quote of symbol in syntax higlight for `crystal docs` (#5238)** (3c7ed65)
- **Merge pull request #5228 from straight-shoota/jm-json-docs--fix-constant-name** (ef117af)
- **Fix: Added missing name field to constant doc json** (b16b851)
- **Fix docs path in .gitignore and Makefile (#5217)** (e095e93)
- **Merge pull request #5198 from MakeNowJust/fix/crystal-format/5196-format-last-comment-of-exception-handler-block** (748afe5)
- **Merge pull request #5208 from MakeNowJust/fix/crystal/parse-regex-starting-semicolon-after-call** (6aa40d0)
- **Fix to parse regex starting with ';' after call** (0c22505)
- **Format: fix indentation of last comment of exception handler block** (e417559)
- **Merge pull request #4631 from MakeNowJust/fix/crystal-format/show-backtrace-when-bug-found** (ea4187c)
- **Format: show error message too when formatting bug found** (36243bc)
- **Format: show backtrace when formatting bug found** (f8759df)
- **Fix to complete filename for `crystal tool` subcommands (#5158)** (54a7fc3)
- **Fix UNIXServer example in docs (#5181)** (df3399f)
- **Merge pull request #5137 from asterite/bug/5063-xml-variables** (e602cd0)
- **Merge pull request #5176 from MakeNowJust/fix/crystal-format/indent-implicit-exception-handler-with-do-end** (2d2ebac)
- **Merge pull request #5178 from MakeNowJust/fix/crystal/5177-local-variable-in-implicit-block-exception-handler** (017f9c9)
- **Fix: always use monotonic clock to measure time** (007899a)
- **Merge pull request #5152 from asterite/bug/3072-docs-dont-link-libs** (74a30e8)
- **Merge pull request #5151 from asterite/bug/2699-static-array-restriction** (1b419d4)
- **AST: fix incorrect `to_s` for ImplicitObj (#5150)** (77f4067)
- **Merge pull request #5138 from crystal-lang/bug/block-arg-underscore** (a6ddeb3)
- **Merge pull request #5135 from asterite/bug/5073-union-of-numbers** (181986d)
- **Merge pull request #5133 from asterite/bug/5131-compare-named-tuple-union** (51bf369)
- **Regex: fix misspelled comment** (c25f397)

### Backend
- **Version 0.24.1 (#5358)** (80a975c)
- **Removed explicit receiver in File class methods** (a4ffe5b)
- **Allow less than expected digits when parsing time with decimals (#5317)** (490f491)
- **INI::parse, .each_line is faster than .lines.each (#5366)** (78fa174)
- **Refactor missing unsafe_as (#5341)** (32319e3)
- **Don't print query params if they are empty (#5340)** (b747f5f)
- **Semantic: prevent infinite recursion by alias and generics combination (#5330)** (7033082)
- **Number normalization for Crystal::Hasher (#5276)** (3f06d20)
- **Format: insert space between `{` and `%` to prevent writing `{%` (#5278)** (24ee423)
- **UUID revamp (#4453)** (1b669c1)
- **Correct json float parsing fixes #5286 (#5323)** (7a589f7)
- **Make String#[] not read out-of-bounds if string ends in unicode char (#5257)** (f6a1fa1)
- **Remove useless suffix condition** (a2e8300)
- **Abstract LibGC usages & reenable none GC (#5314)** (e687dee)
- **Don't use `{{yield}}` outside a macro (#5307)** (f311861)
- **Fixes setting IO blocking on OpenBSD (#5283)** (47f7e35)
- **Implement BigDecimal followup (#5255)** (aaedc4e)
- **Doc: use string array delimiter as-is input on highlight (#5297)** (1b95a69)
- **Remove mistake example in query property comment (#5296)** (afacaba)
- **Format: work formatter against paren with newline (#5268)** (b9ea898)
- **Doc: escape string array litral as HTML to prevent XSS** (060f404)
- **Workaround for retrieval of descendant structs from hashed structures (#5254)** (ebf6006)
- **CR fixes** (1ccd22b)
- **Combine redundant branches away** (4ed8e67)
- **Don't call to_i on a block** (6720dfc)
- **Document to_i and to_u's truncation behaviour** (f2eb37f)
- **More concise hash invariant check** (9bf293c)
- **Change require big_int to big as per #5121** (0a74f70)
- **Move methods around for better structure.** (d2587d2)
- **Factor powers of ten away before doing rest of to_s** (654bdef)
- **Implement hasher by a simple to_s** (5920291)
- **Improve docstrings** (72e7c29)
- **Implement Float.to_big_d test** (214a776)
- **Make init from Float be a warning instead** (eb0dd46)
- **Implement BigDecimal** (bc54aa0)
- **Disallow invalid values to be set in XML::Node (#5200)** (39b8e88)
- **Skip newline after block arg in paren call (#5237)** (eb4fa17)
- **give error if using instance_sizeof on a generic type without type vars (#5209)** (074d61c)
- **Can't use `self` in toplevel method (#5227)** (7acedf8)
- **Merge pull request #5216 from Papierkorb/disallow-nul-in-setenv** (99c3d2b)
- **ENV#[]=: Disallow null bytes in key and value** (81a4c29)
- **Secure hash function (#5146)** (fbab3a3)
- **Don't lookup super method on the top level (#5202)** (394f3f0)
- **Remove useless comma** (0cacfa0)
- **Format: show backtrace only on single file mode** (5039fb6)
- **Use Exception#inspect_with_backtrace to show an error** (c24cc2e)
- **Merge pull request #5139 from asterite/refactor/5136-http-client-post-form** (1ac8880)
- **Merge pull request #5188 from luislavena/refactor-day-of-the-week** (6d1a6a7)
- **Relocate and document Time::DayOfWeek** (2006b44)
- **HTTP::Client: use required named argument `form` instead of post_form and put_form** (2a46e3c)
- **Merge pull request #5185 from luislavena/restrict-http-client-form-hash-types** (c79f437)
- **Merge pull request #5184 from luislavena/restrict-type-on-http-params-encode** (4e079f9)
- **Change properties key to _properties_ to reduce chance of conflict (#5180)** (4d587a3)
- **Avoid misleading error when using HTTP::Client form options** (c5d8543)
- **Avoid misleading error message in HTTP::Params.encode** (488dda7)
- **Time#days_in_year returns the no of days in a given year (#5163)** (c8ee444)
- **Merge pull request #5168 from luislavena/pass-spec-no-color-option** (08aaa7b)
- **Parser: correctly parse local variable in implicit block exception handler** (731269d)
- **Formatter: correctly indent implicit exception handler of do/end block** (f8af24e)
- **Honor no-color option from `spec` command** (03bf122)
- **Detect recursive structs through tuples, named tuples and recursive aliases (#5156)** (07d50be)
- **Merge pull request #5154 from maxpowa/array-reject-compact-select-chaining** (7bbb400)
- **Allow chaining Array methods** (e936233)
- **Semantic: before setting a number as free variable, check if exists with a different value** (d9630a0)
- **Compiler: don't type generic type instance var initialization on non-instantiated generics (#5149)** (6ee6bd2)
- **Playground: missing instrumentation of HashLiteral (#5147)** (6c9c851)
- **Merge pull request #5129 from RX14/bugfix/multipart-builder-tos** (f414e74)
- **Allow flat rescue/ensure/else block in do/end block (#5114)** (2899cfa)
- **Codegen: don't assign yield exp to underscore block arguments** (a4ddfea)
- **XML: missing forwarding of `variables` argument** (fce8cba)
- **Semantic: don't combine union of Number and Number subclass into Number** (e1aa6c0)
- **Codegen: compile untyped typeof(exp) correctly (#5109)** (4721e6b)
- **NamedTuple: Make comparison of union of named tuples work** (91d3861)
- **Ensure FormData::Builder field value is a String** (038ad9f)
- **Make StaticArray and Slice .map to return their own type (#5124)** (af06abd)
- **Upgrade Unicode to 10.0.0 (#5122)** (a4f8161)
- **Remove the possibility to require big_*. Leaving only with require "big" (#5121)** (22c09d1)
- **Prevent to type ivar having initializer as nilable on assignment (#5120)** (906a8cb)
- **Merge pull request #5061 from MakeNowJust/feature/regexp/duplicated-named-capture** (c1e8b70)
- **Remove expect_raises without type argument (#5096)** (3f99c77)
- **Merge pull request #5080 from j8r/if-clean** (3ff8e59)
- **Merge pull request #4901 from asterite/feature/io-as-class** (bc412dc)
- **ensure propper handling of multiple Content-Length headers (#4705)** (e8d9019)
- **Clean up String#split specs** (7bdd444)
- **Improve String#split documentation** (24791fd)
- **Optimized BitArray.hash(hasher) (#5101)** (1d401e4)
- **Short circuit Hash#find_entry for empty Hashes** (53b208c)
- **Complex.hash(hasher).** (0370db1)
- **Regex: use 'out' instead of 'pointerof'** (29bc43f)

### Docs
- **Docs: don't link libs or types inside libs** (4075f9c)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/crystal-lang/crystal?utm_source=github-action)._