{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":95602123,"defaultBranch":"main","name":"hsl","ownerLogin":"hhvm","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-06-27T21:24:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/4553654?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1639604049.0373719","currentOid":""},"activityList":{"items":[{"before":"d24211f8c1072f159eabeff2c56568291330f844","after":"3ef529561421935e7b2990e83e9c77cb12308e2c","ref":"refs/heads/main","pushedAt":"2024-09-12T12:44:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Allow to use HH_IGNORE to silence warnings instead of HH_FIXME\n\nSummary:\nUsing HH_FIXME to silence errors is not satisfactory for multiple reasons:\n* The user usually wants to mark a warning as \"please ignore I know what I'm doing\" rather than \"fix this later\". HH_IGNORE conveys that intention better.\n* We don't want users to get into the habit of adding HH_FIXMEs and think it's a fine common thing to do.\n\nTherefore this diff requires HH_IGNORE to suppress warnings instead of HH_FIXME. If the user attempts using HH_FIXME, they'll get an error requiring them to use HH_IGNORE instead. We also check that HH_IGNORE can only be applied to warning codes.\n\nReviewed By: madgen\n\nDifferential Revision: D62188724\n\nfbshipit-source-id: a736a56ccab9b901331f39bd89d4c0874c2597bd","shortMessageHtmlLink":"Allow to use HH_IGNORE to silence warnings instead of HH_FIXME"}},{"before":"7acff09792e9d0a066124dfb3f1e5c10913ce265","after":"d24211f8c1072f159eabeff2c56568291330f844","ref":"refs/heads/main","pushedAt":"2024-09-04T12:30:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"hack_warnings = true by default\n\nSummary: hack_warnings is already turned on in JK. We make it true by default so that all paths not reading JK also have hack warnings. This concerns mostly dev builds of hack\n\nReviewed By: madgen\n\nDifferential Revision: D62124823\n\nfbshipit-source-id: c7970d93808542683366fcb6eeaca65ca3ef1f89","shortMessageHtmlLink":"hack_warnings = true by default"}},{"before":"d41f5937c1b1a92d880ef5556e6d88e3684f2ab8","after":"7acff09792e9d0a066124dfb3f1e5c10913ce265","ref":"refs/heads/main","pushedAt":"2024-08-31T03:17:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"make generic names in Keyset\\map_async more consistent\n\nSummary:\n`Keyset\\map_async` uses `Awaitable>` for its return type, but this isn't consistent with how other mapping functions name their generics (`Tv1` maps to `Tv2`).\n\n`Keyset\\map` has the definition `function map`\n`Vec\\map` has the definition `async function map_async`\n\nReviewed By: admdikramr\n\nDifferential Revision: D62051033\n\nfbshipit-source-id: 63e9dc71af248a53c73476e45c3f7847c572dc5e","shortMessageHtmlLink":"make generic names in Keyset\\map_async more consistent"}},{"before":"8623f4f53d5e822dece406d4369ebfb09e4ab73d","after":"d41f5937c1b1a92d880ef5556e6d88e3684f2ab8","ref":"refs/heads/main","pushedAt":"2024-07-26T16:37:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Update the documentation for sort comparators\n\nSummary:\nUpdating the documentation for the following methods to provide context on the expectated behavior of the comparator.\n- `Vec\\sort`, `Vec\\sort_by`\n- `Dict\\sort`, `Dict\\sort_by`, and `Dict\\sort_by_key`\n- `Keyset\\sort`\n- `C\\is_sorted`, `C\\is_sorted_by`\n\nReviewed By: viratyosin\n\nDifferential Revision: D60239279\n\nfbshipit-source-id: b6a20011128b4c8d46e30c69e1fdaf02e97c5846","shortMessageHtmlLink":"Update the documentation for sort comparators"}},{"before":"54c3381217ff5f5fd544d7264f5631e7d57c3ab6","after":"8623f4f53d5e822dece406d4369ebfb09e4ab73d","ref":"refs/heads/main","pushedAt":"2024-07-17T11:47:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Make some OCaml/Rust parser option defaults consistent\n\nSummary: Unify default config options between Rust and OCaml\n\nReviewed By: andrewjkennedy\n\nDifferential Revision: D59809221\n\nfbshipit-source-id: 1aae4810142feb7a6535b313b61dbeed27bc6ef9","shortMessageHtmlLink":"Make some OCaml/Rust parser option defaults consistent"}},{"before":"ea969910efb6993add211b2362f39590041610a0","after":"54c3381217ff5f5fd544d7264f5631e7d57c3ab6","ref":"refs/heads/main","pushedAt":"2024-07-11T17:10:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Read experimental feature status from config (step 1)\n\nSummary:\nAdd a field to `.hhconfig` named `enable_experimental_stx_features`. It contains a json mapping experimental feature names to their status. For example,\n`enable_experimental_stx_features = {\"union_intersection_type_hints\": \"Unstable\", \"readonly\": \"Preview\"}`. This is in preparation to move the configuration of experimental features out of the source code and into `.hhconfig` and `.hhvmconfig.hdf`.\n\nCurrently, we enforce that any feature specified in `enable_experimental_stx_features` has the same status as the hard-coded status, to ensure hh and hhvm stay in sync until we are ready to complete the migration.\n\nThere are 2 other configuration options:\n- `consider_unspecified_experimental_features_released`: if an experimental feature is not listed in the config, should it default to `OngoingRelease`, or `Unstable` status. We set `hh_server` to `Unstable`, but allow all other tools (`hh_single_type_check`, `hh_parse`, `hackfmt`, etc.) to default to `OngoingRelease` since we expect them to have empty lists of experimental features as they don't read `.hhconfig`, and we don't need them to reject experimental features.\n- `use_legacy_experimental_feature_config`: determines whether to use the new config-based mechanism, or the old hardcoded one. It is set to use the new mechanism for `hh_server`, and `hh_single_type_check`, and use the hardcoded mechanism for everything else. As we migrate, we will set this to the new mechanism for a wider range of entry points, and finally remove it altogether.\n\nReviewed By: CatherineGasnier\n\nDifferential Revision: D58869349\n\nfbshipit-source-id: 43dd1d375d56540db709a8608eeaad6ea0c61311","shortMessageHtmlLink":"Read experimental feature status from config (step 1)"}},{"before":"ed8f8b01c95a7f618c725b83089d89ddd80c4033","after":"ea969910efb6993add211b2362f39590041610a0","ref":"refs/heads/main","pushedAt":"2024-07-10T22:44:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"correct Dict\\from_keys documentation\n\nSummary:\nI was reading the [`Dict\\from_keys` ](https://docs.hhvm.com/hsl/reference/function/HH.Lib.Dict.from_keys/) documentation and noticed that `Dict\\from_key_async` doesn't exist.\n\nThis diff fixes it by adding the correct function.\n\nCreated from CodeHub with https://fburl.com/edit-in-codehub\n\nReviewed By: voorka\n\nDifferential Revision: D59576197\n\nfbshipit-source-id: a3d5f12013dadd84df18537d1d9aff6e36fb0279","shortMessageHtmlLink":"correct Dict\\from_keys documentation"}},{"before":"afedd6570483f9412743d35ba23e57dc77b0d16c","after":"ed8f8b01c95a7f618c725b83089d89ddd80c4033","ref":"refs/heads/main","pushedAt":"2024-07-10T18:48:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix Vec\\intersect() generator bug\n\nSummary:\nI ran across this testing something. `Vec\\intersect()` doesn't work when the first parameter is a generator:\n\n```\nfbdbg> $s = Streams::filter(Vec\\range(1, 10), $x ==> true)\nfbdbg> =Vec\\intersect($s, vec[5])\nHit a php exception : exception 'Exception' with message 'Generator is already finished' in /data/sandcastle/boxes/www/flib/core/hack/lib/hsl_generated/vec/select.php:168\nStack trace:\n#0 (): Generator->rewind()\n#1 (): HH\\Lib\\Vec\\filter()\n#2 /data/sandcastle/boxes/www/flib/core/hack/lib/hsl_generated/vec/select.php(168): HH\\Lib\\Vec\\intersect()\n#3 (1): FlibSL\\Vec\\intersect()\n#4 (1): include()\n#5 (): include()\n#6 {main}\nHit a php exception : exception 'Exception' with message 'Generator is already finished' in /data/sandcastle/boxes/www/flib/core/hack/lib/hsl_generated/vec/select.php:168\nStack trace:\n#0 (): Generator->rewind()\n#1 (): HH\\Lib\\Vec\\filter()\n#2 /data/sandcastle/boxes/www/flib/core/hack/lib/hsl_generated/vec/select.php(168): HH\\Lib\\Vec\\intersect()\n#3 (1): FlibSL\\Vec\\intersect()\n#4 (1): include()\n#5 (): include()\n#6 {main}\nFailed to evaluate expression\n```\n\nThe cause is that it iterates over the generator again after `Keyset\\intersect()` has been called.\n\nhttps://www.internalfb.com/code/fbsource/[4e26eed969060508bfbd3c4f675e018ca367c556]/fbcode/hphp/hsl/src/vec/select.php?lines=186-189\n\nReviewed By: viratyosin\n\nDifferential Revision: D59356423\n\nfbshipit-source-id: 8ec1b5d00183d09606728c97d61bf30a26bfdf1c","shortMessageHtmlLink":"Fix Vec\\intersect() generator bug"}},{"before":"c2ed718280a56565fb28f67e44ab8b309c7ba020","after":"afedd6570483f9412743d35ba23e57dc77b0d16c","ref":"refs/heads/main","pushedAt":"2024-06-12T14:37:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add loose typing to debug_backtrace\n\nSummary:\nSorry if this is not valid or the right way to do this, but I figured it'd be easiest to just try it out and get feedback. To motivate this change, I recently foolishly assumed `args` would always be present in a frame, which broke a bunch of stuff (D57301367). I think the demographic of folks who typically work closely with stacks would be familiar with this fickleness of frame data, but alas, as a noob I didn't have this intuition. It would've been helpful to have some typing to guide me in the right direction of using `idx` or foregoing the usage of the data entirely.\n\nI based my typing off of [this docblock](https://www.internalfb.com/code/fbsource/[8eec5a24f012]/fbcode/hphp/runtime/ext/std/ext_std_errorfunc.php?lines=20-30) (which is almost certainly outdated, as seen by the omission of `metadata`) and [the code that generates the stack](https://fburl.com/code/0htc79f2). I opted for incredibly loose typing so as to not break anything. I know this is maybe *so* loose that it gives us almost no extra type safety, but I'm hoping that all the optional typing shows that nothing in the stack is guaranteed. If there is anything in the stack that you know is guaranteed, let me know and I can tighten it a bit.\n\nReviewed By: mheiber\n\nDifferential Revision: D57509960\n\nfbshipit-source-id: 0c0fca48082f580255a125daed78918862d0ee8b","shortMessageHtmlLink":"Add loose typing to debug_backtrace"}},{"before":"71500e5046f3576a0a3a4cb2fd02b75dfb20fc10","after":"c2ed718280a56565fb28f67e44ab8b309c7ba020","ref":"refs/heads/main","pushedAt":"2024-06-04T21:05:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Deprecate the varray darray function\n\nSummary:\nWe have been codemodding varray() darray() away for a long time.\n\nLets mark this for removal in the HHI.\n\nDifferential Revision: D57815717\n\nfbshipit-source-id: c684494f69b350c5a5727437d66a53ef6400a571","shortMessageHtmlLink":"Deprecate the varray darray function"}},{"before":"df4592ec0416aee7c9b758de56d7bd0f6443bf3a","after":"71500e5046f3576a0a3a4cb2fd02b75dfb20fc10","ref":"refs/heads/main","pushedAt":"2024-04-09T19:04:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"make Str\\replace_every_nonrecursive pure\n\nSummary:\nWhile trying to optimize a function by switching `Str\\replace_every` for `Str\\replace_every_nonrecursive`, I was met with an error that this function required the default capabilities (D55895227)\n\n```\nflib/privacy/asset_xid/AssetXID.php line 167 col 7-36: This call is not allowed because its capabilities are incompatible with the context\n flib/privacy/asset_xid/AssetXID.php line 165 col 4-5: From this declaration, the context of this function body provides the capability set {}\n flib/core/hack/lib/hsl_manual/str.php line 211 col 10-35: But the function being called requires the capability set {AccessGlobals, IO, ImplicitPolicyLocal, RxLocal, SystemLocal, WriteProperty}\n```\n\nI found that to be odd that `Str\\replace_every` is pure but `Str\\replace_every_nonrecursive` is not. After digging a bit I see a diff, D34555209, that removed the need for rx from the capability set but did not make the set empty (thereby requiring all the defaults instead)\n\nI believe this function should be pure as it does not need any more capabilities than its `Str\\replace_every` equivalent\n\nReviewed By: viratyosin\n\nDifferential Revision: D55897982\n\nfbshipit-source-id: 992e761dcb4ca2c5bc2416a1fa4b4587f7c0f2d7","shortMessageHtmlLink":"make Str\\replace_every_nonrecursive pure"}},{"before":"bcbf500d87781c7e10d451e2f5651d34ba2467bf","after":"df4592ec0416aee7c9b758de56d7bd0f6443bf3a","ref":"refs/heads/main","pushedAt":"2024-01-26T21:44:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Type get_class() arg as nonnull in typechecker\n\nSummary: Hopefully this will prevent some code from passing a null.\n\nReviewed By: mdko\n\nDifferential Revision: D53099289\n\nfbshipit-source-id: 2fa9cdda572080d9660a32cadd1f5d97e06918f6","shortMessageHtmlLink":"Type get_class() arg as nonnull in typechecker"}},{"before":"848bbb89c1c484b3e0bffd7d2fd6e3378479dc49","after":"bcbf500d87781c7e10d451e2f5651d34ba2467bf","ref":"refs/heads/main","pushedAt":"2023-12-01T13:23:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Ban varray/darray intrinsic in the typechecker\n\nSummary: ^\n\nReviewed By: vassilmladenov\n\nDifferential Revision: D51563045\n\nfbshipit-source-id: 87a6d5a73507f191407c504d82a0e8eab0c533f7","shortMessageHtmlLink":"Ban varray/darray intrinsic in the typechecker"}},{"before":"3fed9b64cad1c7631b2557153beab1b7b6db0240","after":"848bbb89c1c484b3e0bffd7d2fd6e3378479dc49","ref":"refs/heads/main","pushedAt":"2023-11-14T14:07:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Remove TANY_MARKER type\n\nSummary: The `TANY_MARKER<_>` type isn't used in www and is used only in `hhi` files to define the `MISSING_RETURN_TYPE` and `MISSING_PROP_TYPE` types. Defining these to be `dynamic` works fine with pessimisation, and with a very little strengthening of types in `hhi` files it works fine even in legacy mode. Note that `getOffset` and `getTimestamp` are now declared to return `int` in the interface `DateTimeInterface`. This is compatible with all implementing classes.\n\nDifferential Revision: D47090958\n\nfbshipit-source-id: d134666dae6fd1897974f639e458b37ea62eec71","shortMessageHtmlLink":"Remove TANY_MARKER type"}},{"before":"9e8ccad37ba51b0f9dbef97386265acc6518fd1e","after":"3fed9b64cad1c7631b2557153beab1b7b6db0240","ref":"refs/heads/main","pushedAt":"2023-11-08T18:34:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Close parentheses in Dict\\pull docstring\n\nSummary: Noticed this while looking at the docs\n\nReviewed By: mdko\n\nDifferential Revision: D51114172\n\nfbshipit-source-id: 3121df485dc30bbb214a9818ea60732b1e64e6d0","shortMessageHtmlLink":"Close parentheses in Dict\\pull docstring"}},{"before":"69ba1682bda3b1180103b4d58ff68ad05e8b7a90","after":"9e8ccad37ba51b0f9dbef97386265acc6518fd1e","ref":"refs/heads/main","pushedAt":"2023-10-13T18:19:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Remove hack modes from Hack tests\n\nSummary:\nRedo of D50089378 w/o glean test case changes\n```\nfbgr -sl '^<\\?hh ?// ?(strict|partial|decl)$' | grep -P '\\.(php|hhi|exp)$' | grep -P '^hphp/(hsl/tests|hack/test)/' | xargs sed -i -E 's#<\\?hh ?//.*#