common lib, lang, and lint tweaks

This commit is contained in:
Eric Froemling 2021-12-17 09:22:38 -06:00
parent 326f6677a0
commit 5382fe1c5f
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
39 changed files with 247 additions and 163 deletions

View File

@ -420,31 +420,31 @@
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/41/a0/d7edfdeada25eb8310de177ab7f5", "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/41/a0/d7edfdeada25eb8310de177ab7f5",
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/15/ba/7db3f4534699517b8bff3ffae4b6", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/15/ba/7db3f4534699517b8bff3ffae4b6",
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/6d/de/d973377a4f5f975470f958119b0b", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/6d/de/d973377a4f5f975470f958119b0b",
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/37/de/401548e7d95a407e0e99ef9391f3", "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/c7/34/1a9fa903adfbde472a0a7e97cc4b",
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/8c/fd/162ab3530e31d8cdcbf83de0f49d", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/68/6d/7a251c216dda7550ca871871e2d1",
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/ab/fd/cb157afc98dbe055ba63cf4c2f6f", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090",
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/28/96/397e5c164a595c2b6c2d3eb2d4f1", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/29/0a/2a796246ae05dbf316a3551b8970",
"assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/05/2d/42e361ce039cd8ca26af0e594b46", "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/ff/7c/3bcab4ae1f39977434acb0d6f795",
"assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/66/bf/6e98398016da261296b8c306560e", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/66/bf/6e98398016da261296b8c306560e",
"assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/17/33/503a32d478e70661d09bcb7d2a82", "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/f1/be/7b998f990a40c8d94003fa954853",
"assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28", "assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28",
"assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/d1/07/37b7adc3dbec7328d26c5325f212", "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/d1/07/37b7adc3dbec7328d26c5325f212",
"assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/00/a6/3563b95117cad093c9e56a27ba24", "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/00/a6/3563b95117cad093c9e56a27ba24",
"assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/6e/fd/685a4e1da031474d47a1d9eb2731", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb",
"assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/7f/ac/fd0257aba3ed874f69c30fd333ff", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/94/66/31892eb13c227d10562b1af3e0ac",
"assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/a0/65/0802d58fd002738faa5fca0ac200", "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/86/69/bba214c3bf4f9cdd4732ea331ac7",
"assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/19/a6/47fd52b8890573fd0e54b9f7b7fd", "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/19/a6/47fd52b8890573fd0e54b9f7b7fd",
"assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/87/ae/4b9de749699bfebb12c83ad8c1ac", "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/01/ea/cd9dac4a24a5c92495c37cd98371",
"assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/d9/57/0106b2a51dda269473f043e050d3", "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/40/d7/84b6bc5eaef05145af3bef5e5e1c",
"assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5",
"assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/69/80/7fb8313fee506801754937a92bd2", "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/69/80/7fb8313fee506801754937a92bd2",
"assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/dd/97/42d117db366ad4584eb8c58d191e", "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/6a/89/696e26d4372ccde4a9b30e04ff62",
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/7f/57/fd4b9a63be0207ba2ad49e19253c", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/7f/57/fd4b9a63be0207ba2ad49e19253c",
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/2d/d5/661c050696d5a2e70e678054b9e7", "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/99/04/90b3005df45d258406caa4d439f8",
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/04/fa/b24dd48bfbf3c2d67ee5ad1269c3", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/04/fa/b24dd48bfbf3c2d67ee5ad1269c3",
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/fe/6d/751277bc6b704d4f2a54cf1a9cfa", "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/7c/34/8fefa40f6b2d59d1b3755e5aa715",
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb",
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/6e/5c/ed5c985d25c0ebbd7e47a89cb6c3", "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/22/ae/7398a74f9d86248169a675a7f2bd",
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/38/d6/376433fa66f1798c64035efc1371", "assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/38/d6/376433fa66f1798c64035efc1371",
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/9f/a6/a2c9d7f3f90a2320aa45ccfd65cd", "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/9f/a6/a2c9d7f3f90a2320aa45ccfd65cd",
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/66/9e/df12c6325c503f8eaef4a83259c4", "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/66/9e/df12c6325c503f8eaef4a83259c4",
@ -453,8 +453,8 @@
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/dd/de/c197fa9aff42e4422bc66b95ad88", "assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/dd/de/c197fa9aff42e4422bc66b95ad88",
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/65/e4/b9308f15437972209b4d3fce7abd", "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/65/e4/b9308f15437972209b4d3fce7abd",
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/8f/42/56f3ebcc6005f382449c1c2422fd", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/8f/42/56f3ebcc6005f382449c1c2422fd",
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/4f/cc/285443e3e8e65a318df338bbc7f7", "assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/ff/a7/d74151ee6fa1d228cafb52e52f04",
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/e4/8b/93243a2723b04ff70580afc9ebb7", "assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/0b/24/3cc2b5a6ebe4bca1e01b40f8ed09",
"assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed", "assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed",
"assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef", "assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef",
"assets/build/ba_data/data/maps/courtyard.json": "https://files.ballistica.net/cache/ba1/03/38/344dd05bfef7bbdf464035ec5aa2", "assets/build/ba_data/data/maps/courtyard.json": "https://files.ballistica.net/cache/ba1/03/38/344dd05bfef7bbdf464035ec5aa2",
@ -3966,26 +3966,26 @@
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/72/82/86956fae909ac2fe2a1abd84a361", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/72/82/86956fae909ac2fe2a1abd84a361",
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5a/bd/c4f53db2e9c242c3ec20ea993d0c", "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5a/43/31f1e7a1f06ff634e853b2fe478b",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d5/ec/fc764a22eecbe3d9718a7f74f445", "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a1/2b/84b86a21eaa2622439ddf96a879e",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/13/58/58ef70e856ea2b396a337ad6a6ec", "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/fb/ba/c6f4160413f84da9fc199eba8906",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/6d/4a/9ba90e9fd61755076d5fbcb58ae3", "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/2d/6e/32e40af876d49a80c3cda22395ee",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/55/d2/4567b7d25fe0a029d32768bd46af", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/03/c5/dcd0c09e5b0020923459abc08d76",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8b/e0/ecbdbf83e5a7616badddfe77f18f", "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/52/61/4ee73c405443f6807611f0ab4d65",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/d6/63/7efe2c4dbeaf51d8a82db50a57fe", "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/25/4532f4fec61de6c5d3c0dc3e37dd",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/ef/2a/69c1beeac35c146d64114c08e91e", "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/af/4d/3d6f711c2b06ac774609bdb563b0",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/09/cb/4817cd1ac9cc3f531880ac94ca50", "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8b/7a/35d194e46cf4329d2da83de82f21",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5e/5f/06e653fe68ae2c2e0854049bc82d", "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/44/4f/c7f841bc873cf278c25dd983c97c",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/98/91/df35b46c01a9b41c711119804803", "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/67/d7/97716594f45bdbee32f45d6416bd",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9b/32/302e9723c2a9639c2535f9c5a4ea", "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/63/5f/3e20ac2d36d2c1746fe5a1b57759",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/dc/80/0586887648abd48e1ad560f29b38", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5c/60/946f24032d0a9981663bc26bf1e4",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c0/91/0146b1d2b7d37164e70587320f75", "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/17/6afb195ab8ec46b8ed76b940d2ed",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c8/28/adc7da698869a06ed823e5db852b", "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/4f/59/4e0f38c6ca7b876e121c4e911dc7",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/2c/2b/95ea5843e16a38e454140d9645bb", "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/2d/66/c1d56619c94d1203b4a7a73959a0",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/fa/55/d98fc407a25d56e3248c7fd0d582", "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/71/98/e4589dd1fd33c8483281a72d5ef5",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/79/87/02fd242badf5b6a3e108624522db", "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ac/46/d501ee43d3204887092560d25de0",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5f/7c/427e8a1af1c95bf40211adb1a10e", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5f/7c/427e8a1af1c95bf40211adb1a10e",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5e/fe/0366d7ace626419f14c2bd80e266", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5e/fe/0366d7ace626419f14c2bd80e266",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9b/2c/7be9dce2d9aff8cf04508d07dff0", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9b/2c/7be9dce2d9aff8cf04508d07dff0",
@ -3994,22 +3994,22 @@
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/2c/9fa96710e25f6242c42ff3efd309", "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/2c/9fa96710e25f6242c42ff3efd309",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/89/45/43b51cddf1b4655d31018158b344", "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/89/45/43b51cddf1b4655d31018158b344",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/6d/c3f165109101ae65f3ecbc556492", "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/6d/c3f165109101ae65f3ecbc556492",
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/44/f1/1cfd8a4bc54d87f86bbfdd9fa439", "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1a/12/fd3382e3ae5c5810b00a988540ec",
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/c2/15a504dbea88fe4eda1c57f67c76", "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b7/5d/bd55990fe03531e438000d5f0aab",
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3f/1e/3e78487f4d70a2c5974ec0198fb1", "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6b/9b/0a5965e1714cdda72a9a0417ff04",
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/4a/48fd42b279a165b41c43c7973f5b", "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/f6/c40b675afed682fc96684228dd37",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ae/61/8f2ab7f636f09ff8cabf7e5d8d37", "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9f/1e/41254c471d95083243bd146e35ae",
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/66/bb/3f0591d11d845c285ceb0e322121", "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cf/68/90f68e1e6d2fd75c340dfc85f982",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/81/a4/21f0084dde2fc524b4683b5efed0", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6d/c6/e4f93048d8dbcfb7f451aeacd2c9",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9f/03/dbe0091c812e01eb84b66de55b36", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/08/bf/9e91d76ff229a92ed10cedbf8cb1",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/d9/52/cdf3f127aba14e60602cc69c9276", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/66/5f/b8abc6d993bb5296fc63853b21ce",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/04/c9/aacaa7d3bd8a8bc2241134ed0260", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/2a/5b/dd04558a02272cb7e407bca63da7",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/fe/ea/eb5e2898022397cb0e4767ac7750", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/37/1e/a81e165c91ddf8d8c6fe8e3f57f1",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/3c/e1/79d74d48c4ba188fca80a1911bed", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/17/1b/c80441a942276010b6996b45df29",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/89/85/396c695524487fc4617051a1068f", "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/61/c8/3e2b5ed912cc252886b56445d1ad",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/62/ff/49923c4896cde6c1ade47f98c79c", "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/67/c7/05b1673224fe473d83a03ec62a18",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/db/0b/8f5e7a6bbdedde91e4b02d4b9e4e", "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/39/2e/30137404ba9e1504fc856a95594c",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/bb/0b/6133175db0936836a527b1ebddb1", "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/13/0b/d55b28a1c60c55d34739185cc8ba",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/f2/6c/5a0a4695dcc2a11e7941b8777e80", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/f2/6c/5a0a4695dcc2a11e7941b8777e80",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881" "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881"
} }

View File

@ -20,12 +20,12 @@ https://github.com/efroemling/ballistica/wiki/Contributing
## Type of Changes ## Type of Changes
<!-- Leave the corresponding lines for the applicable type of change: --> <!-- Leave the corresponding lines for the applicable type of change: -->
| | Type | | | Type |
| ------------- | ------------- | |-----|------------------------|
| ✓ | :bug: Bug fix | | ✓ | :bug: Bug fix |
| ✓ | :sparkles: New feature | | ✓ | :sparkles: New feature |
| ✓ | :hammer: Refactoring | | ✓ | :hammer: Refactoring |
| ✓ | :scroll: Docs | | ✓ | :scroll: Docs |
## Related Issue ## Related Issue

View File

@ -699,6 +699,7 @@
<w>epicfail</w> <w>epicfail</w>
<w>ericf</w> <w>ericf</w>
<w>ericfroemling</w> <w>ericfroemling</w>
<w>ericsson's</w>
<w>errcount</w> <w>errcount</w>
<w>errname</w> <w>errname</w>
<w>errno</w> <w>errno</w>
@ -1521,6 +1522,7 @@
<w>nntplib</w> <w>nntplib</w>
<w>noassets</w> <w>noassets</w>
<w>nodeactor</w> <w>nodeactor</w>
<w>nodename</w>
<w>nodepos</w> <w>nodepos</w>
<w>nodpi</w> <w>nodpi</w>
<w>nofiles</w> <w>nofiles</w>
@ -2019,6 +2021,7 @@
<w>scrollw</w> <w>scrollw</w>
<w>scrollwidget</w> <w>scrollwidget</w>
<w>scsb</w> <w>scsb</w>
<w>scutil</w>
<w>scyn</w> <w>scyn</w>
<w>sdata</w> <w>sdata</w>
<w>sdkcheck</w> <w>sdkcheck</w>

View File

@ -128,7 +128,7 @@ $1: $$(subst /__pycache__,,$$(subst .cpython-39.opt-1.pyc,.py,$1))
$$(TOOLS_DIR)/pcommand compile_python_files $$^ && chmod 444 $$@ $$(TOOLS_DIR)/pcommand compile_python_files $$^ && chmod 444 $$@
endef endef
#__AUTOGENERATED_PUBLIC_BEGIN__ # __AUTOGENERATED_PUBLIC_BEGIN__
SCRIPT_TARGETS_PY_PUBLIC = \ SCRIPT_TARGETS_PY_PUBLIC = \
build/ba_data/python/ba/__init__.py \ build/ba_data/python/ba/__init__.py \
@ -687,9 +687,9 @@ $(SCRIPT_TARGETS_PY_PUBLIC_TOOLS) : build/ba_data/python/%.py : ../tools/%.py
# Instead we generate individual targets in a loop. # Instead we generate individual targets in a loop.
$(foreach element,$(SCRIPT_TARGETS_PYC_PUBLIC_TOOLS),\ $(foreach element,$(SCRIPT_TARGETS_PYC_PUBLIC_TOOLS),\
$(eval $(call make-opt-pyc-target,$(element)))) $(eval $(call make-opt-pyc-target,$(element))))
#__AUTOGENERATED_PUBLIC_END__ # __AUTOGENERATED_PUBLIC_END__
#__AUTOGENERATED_PRIVATE_BEGIN__ # __AUTOGENERATED_PRIVATE_BEGIN__
SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/__future__.py \ build/pylib-apple/__future__.py \
@ -7052,7 +7052,7 @@ EXTRAS_TARGETS_WIN_X64 = \
$(EXTRAS_TARGETS_WIN_X64) : ../.efrocachemap $(EXTRAS_TARGETS_WIN_X64) : ../.efrocachemap
@cd .. && tools/pcommand efrocache_get assets/$@ @cd .. && tools/pcommand efrocache_get assets/$@
#__AUTOGENERATED_PRIVATE_END__ # __AUTOGENERATED_PRIVATE_END__
ASSET_TARGETS_COMMON += $(MODEL_TARGETS) ASSET_TARGETS_COMMON += $(MODEL_TARGETS)

View File

@ -1 +1 @@
20652393608393799870252825907573389372 128243803030405974762870876563323013389

View File

@ -148,7 +148,7 @@ class DependencyEntry:
instance = self.cls.__new__(self.cls) instance = self.cls.__new__(self.cls)
# pylint: disable=protected-access # pylint: disable=protected-access
instance._dep_entry = weakref.ref(self) instance._dep_entry = weakref.ref(self)
instance.__init__() instance.__init__() # type: ignore
assert self.depset assert self.depset
depset = self.depset() depset = self.depset()

View File

@ -549,7 +549,8 @@ class ServerManagerApp:
while not self._done: while not self._done:
self._run_server_cycle() self._run_server_cycle()
def _handle_term_signal(self, sig: int, frame: FrameType) -> None: def _handle_term_signal(self, sig: int,
frame: Optional[FrameType]) -> None:
"""Handle signals (will always run in the main thread).""" """Handle signals (will always run in the main thread)."""
del sig, frame # Unused. del sig, frame # Unused.
sys.exit(1 if self._should_report_subprocess_error else 0) sys.exit(1 if self._should_report_subprocess_error else 0)

View File

@ -4,4 +4,4 @@
# Uncomment any of these values to override defaults. # Uncomment any of these values to override defaults.
#__CONFIG_TEMPLATE_VALUES__ # __CONFIG_TEMPLATE_VALUES__

View File

@ -330,6 +330,7 @@
<w>envval</w> <w>envval</w>
<w>ericf</w> <w>ericf</w>
<w>ericsson</w> <w>ericsson</w>
<w>ericsson's</w>
<w>errname</w> <w>errname</w>
<w>erroring</w> <w>erroring</w>
<w>etcdec</w> <w>etcdec</w>
@ -553,6 +554,7 @@
<w>jdict</w> <w>jdict</w>
<w>jmessage</w> <w>jmessage</w>
<w>jnames</w> <w>jnames</w>
<w>json's</w>
<w>keepalives</w> <w>keepalives</w>
<w>keyanntype</w> <w>keyanntype</w>
<w>keycode</w> <w>keycode</w>
@ -713,6 +715,7 @@
<w>nlpos</w> <w>nlpos</w>
<w>nmemb</w> <w>nmemb</w>
<w>noassets</w> <w>noassets</w>
<w>nodename</w>
<w>nodetype</w> <w>nodetype</w>
<w>nofilename</w> <w>nofilename</w>
<w>noglobs</w> <w>noglobs</w>
@ -946,6 +949,7 @@
<w>scenetime</w> <w>scenetime</w>
<w>screenmessage</w> <w>screenmessage</w>
<w>scrollwidget</w> <w>scrollwidget</w>
<w>scutil</w>
<w>sdkcheck</w> <w>sdkcheck</w>
<w>sdl's</w> <w>sdl's</w>
<w>sdlk</w> <w>sdlk</w>

View File

@ -5,9 +5,10 @@
<inspection_tool class="CannotResolve" enabled="false" level="ERROR" enabled_by_default="false" /> <inspection_tool class="CannotResolve" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="ClangTidy" enabled="true" level="WARNING" enabled_by_default="true"> <inspection_tool class="ClangTidy" enabled="true" level="WARNING" enabled_by_default="true">
<scope name="External" level="WARNING" enabled="false"> <scope name="External" level="WARNING" enabled="false">
<option name="clangTidyChecks" value="-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-integer-division,bugprone-lambda-function-name,bugprone-macro-parentheses,bugprone-macro-repeated-side-effects,bugprone-misplaced-operator-in-strlen-in-alloc,bugprone-misplaced-pointer-arithmetic-in-alloc,bugprone-misplaced-widening-cast,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-no-escape,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-sizeof-container,bugprone-sizeof-expression,bugprone-spuriously-wake-up-functions,bugprone-string-constructor,bugprone-string-integer-assignment,bugprone-string-literal-with-embedded-nul,bugprone-suspicious-enum-usage,bugprone-suspicious-include,bugprone-suspicious-memset-usage,bugprone-suspicious-missing-comma,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor,bugprone-unhandled-self-assignment,bugprone-unused-raii,bugprone-unused-return-value,bugprone-use-after-move,bugprone-virtual-near-miss,cert-dcl21-cpp,cert-dcl58-cpp,cert-err34-c,cert-err52-cpp,cert-err58-cpp,cert-err60-cpp,cert-flp30-c,cert-msc50-cpp,cert-msc51-cpp,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-narrowing-conversions,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-slicing,google-default-arguments,google-explicit-constructor,google-runtime-operator,hicpp-exception-baseclass,hicpp-multiway-paths-covered,misc-misplaced-const,misc-new-delete-overloads,misc-no-recursion,misc-non-copyable-objects,misc-throw-by-value-catch-by-reference,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,modernize-avoid-bind,modernize-concat-nested-namespaces,modernize-deprecated-headers,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-make-shared,modernize-make-unique,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-auto-ptr,modernize-replace-disallow-copy-and-assign-macro,modernize-replace-random-shuffle,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-default,modernize-use-equals-delete,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-uncaught-exceptions,mpi-buffer-deref,mpi-type-mismatch,openmp-use-default-none,performance-faster-string-find,performance-for-range-copy,performance-implicit-conversion-in-loop,performance-inefficient-algorithm,performance-inefficient-string-concatenation,performance-inefficient-vector-operation,performance-move-const-arg,performance-move-constructor-init,performance-no-automatic-move,performance-noexcept-move-constructor,performance-trivially-destructible,performance-type-promotion-in-math-fn,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,portability-simd-intrinsics,readability-avoid-const-params-in-decls,readability-const-return-type,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-inconsistent-declaration-parameter-name,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-smartptr-get,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-subscript-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-string-compare,readability-uniqueptr-delete-release,readability-use-anyofallof,-misc-no-recursion" /> <option name="clangTidyChecks" value="-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-integer-division,bugprone-macro-parentheses,bugprone-macro-repeated-side-effects,bugprone-misplaced-operator-in-strlen-in-alloc,bugprone-misplaced-pointer-arithmetic-in-alloc,bugprone-misplaced-widening-cast,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-no-escape,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-sizeof-container,bugprone-sizeof-expression,bugprone-spuriously-wake-up-functions,bugprone-string-constructor,bugprone-string-integer-assignment,bugprone-string-literal-with-embedded-nul,bugprone-suspicious-enum-usage,bugprone-suspicious-include,bugprone-suspicious-memset-usage,bugprone-suspicious-missing-comma,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor,bugprone-unhandled-self-assignment,bugprone-unused-raii,bugprone-unused-return-value,bugprone-use-after-move,bugprone-virtual-near-miss,cert-dcl21-cpp,cert-dcl58-cpp,cert-err34-c,cert-err52-cpp,cert-err58-cpp,cert-err60-cpp,cert-flp30-c,cert-msc50-cpp,cert-msc51-cpp,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-narrowing-conversions,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-slicing,google-default-arguments,google-explicit-constructor,google-runtime-operator,hicpp-exception-baseclass,hicpp-multiway-paths-covered,misc-misplaced-const,misc-new-delete-overloads,misc-no-recursion,misc-non-copyable-objects,misc-throw-by-value-catch-by-reference,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,modernize-avoid-bind,modernize-concat-nested-namespaces,modernize-deprecated-headers,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-make-shared,modernize-make-unique,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-auto-ptr,modernize-replace-disallow-copy-and-assign-macro,modernize-replace-random-shuffle,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-default,modernize-use-equals-delete,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-uncaught-exceptions,mpi-buffer-deref,mpi-type-mismatch,openmp-use-default-none,performance-faster-string-find,performance-for-range-copy,performance-implicit-conversion-in-loop,performance-inefficient-algorithm,performance-inefficient-string-concatenation,performance-inefficient-vector-operation,performance-move-const-arg,performance-move-constructor-init,performance-no-automatic-move,performance-noexcept-move-constructor,performance-trivially-destructible,performance-type-promotion-in-math-fn,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,portability-simd-intrinsics,readability-avoid-const-params-in-decls,readability-const-return-type,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-inconsistent-declaration-parameter-name,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-smartptr-get,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-subscript-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-string-compare,readability-uniqueptr-delete-release,readability-use-anyofallof,-misc-no-recursion,bugprone-easily-swappable-parameters,bugprone-suspicious-memory-comparison,cert-exp42-c,cert-flp37-c,cppcoreguidelines-virtual-class-destructor,readability-container-data-pointer,readability-identifier-length,readability-suspicious-call-argument" />
</scope> </scope>
<option name="clangTidyChecks" value="-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-integer-division,bugprone-lambda-function-name,bugprone-macro-parentheses,bugprone-macro-repeated-side-effects,bugprone-misplaced-operator-in-strlen-in-alloc,bugprone-misplaced-pointer-arithmetic-in-alloc,bugprone-misplaced-widening-cast,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-no-escape,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-sizeof-container,bugprone-sizeof-expression,bugprone-spuriously-wake-up-functions,bugprone-string-constructor,bugprone-string-integer-assignment,bugprone-string-literal-with-embedded-nul,bugprone-suspicious-enum-usage,bugprone-suspicious-include,bugprone-suspicious-memset-usage,bugprone-suspicious-missing-comma,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor,bugprone-unhandled-self-assignment,bugprone-unused-raii,bugprone-unused-return-value,bugprone-use-after-move,bugprone-virtual-near-miss,cert-dcl21-cpp,cert-dcl58-cpp,cert-err34-c,cert-err52-cpp,cert-err58-cpp,cert-err60-cpp,cert-flp30-c,cert-msc50-cpp,cert-msc51-cpp,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-narrowing-conversions,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-slicing,google-default-arguments,google-explicit-constructor,google-runtime-operator,hicpp-exception-baseclass,hicpp-multiway-paths-covered,misc-misplaced-const,misc-new-delete-overloads,misc-no-recursion,misc-non-copyable-objects,misc-throw-by-value-catch-by-reference,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,modernize-avoid-bind,modernize-concat-nested-namespaces,modernize-deprecated-headers,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-make-shared,modernize-make-unique,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-auto-ptr,modernize-replace-disallow-copy-and-assign-macro,modernize-replace-random-shuffle,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-default,modernize-use-equals-delete,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-uncaught-exceptions,mpi-buffer-deref,mpi-type-mismatch,openmp-use-default-none,performance-faster-string-find,performance-for-range-copy,performance-implicit-conversion-in-loop,performance-inefficient-algorithm,performance-inefficient-string-concatenation,performance-inefficient-vector-operation,performance-move-const-arg,performance-move-constructor-init,performance-no-automatic-move,performance-noexcept-move-constructor,performance-trivially-destructible,performance-type-promotion-in-math-fn,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,portability-simd-intrinsics,readability-avoid-const-params-in-decls,readability-const-return-type,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-inconsistent-declaration-parameter-name,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-smartptr-get,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-subscript-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-string-compare,readability-uniqueptr-delete-release,readability-use-anyofallof,-misc-no-recursion" /> <option name="clangTidyChecks" value="-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-integer-division,bugprone-macro-parentheses,bugprone-macro-repeated-side-effects,bugprone-misplaced-operator-in-strlen-in-alloc,bugprone-misplaced-pointer-arithmetic-in-alloc,bugprone-misplaced-widening-cast,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-no-escape,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-sizeof-container,bugprone-sizeof-expression,bugprone-spuriously-wake-up-functions,bugprone-string-constructor,bugprone-string-integer-assignment,bugprone-string-literal-with-embedded-nul,bugprone-suspicious-enum-usage,bugprone-suspicious-include,bugprone-suspicious-memset-usage,bugprone-suspicious-missing-comma,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor,bugprone-unhandled-self-assignment,bugprone-unused-raii,bugprone-unused-return-value,bugprone-use-after-move,bugprone-virtual-near-miss,cert-dcl21-cpp,cert-dcl58-cpp,cert-err34-c,cert-err52-cpp,cert-err58-cpp,cert-err60-cpp,cert-flp30-c,cert-msc50-cpp,cert-msc51-cpp,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-narrowing-conversions,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-slicing,google-default-arguments,google-explicit-constructor,google-runtime-operator,hicpp-exception-baseclass,hicpp-multiway-paths-covered,misc-misplaced-const,misc-new-delete-overloads,misc-no-recursion,misc-non-copyable-objects,misc-throw-by-value-catch-by-reference,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,modernize-avoid-bind,modernize-concat-nested-namespaces,modernize-deprecated-headers,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-make-shared,modernize-make-unique,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-auto-ptr,modernize-replace-disallow-copy-and-assign-macro,modernize-replace-random-shuffle,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-default,modernize-use-equals-delete,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-uncaught-exceptions,mpi-buffer-deref,mpi-type-mismatch,openmp-use-default-none,performance-faster-string-find,performance-for-range-copy,performance-implicit-conversion-in-loop,performance-inefficient-algorithm,performance-inefficient-string-concatenation,performance-inefficient-vector-operation,performance-move-const-arg,performance-move-constructor-init,performance-no-automatic-move,performance-noexcept-move-constructor,performance-trivially-destructible,performance-type-promotion-in-math-fn,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,portability-simd-intrinsics,readability-avoid-const-params-in-decls,readability-const-return-type,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-inconsistent-declaration-parameter-name,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-smartptr-get,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-subscript-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-string-compare,readability-uniqueptr-delete-release,readability-use-anyofallof,-misc-no-recursion" />
<option name="preferClangTidyFilesOverIDESettings" value="false" />
</inspection_tool> </inspection_tool>
<inspection_tool class="ConstructionIsNotAllowed" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="ConstructionIsNotAllowed" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="DuplicateSwitchCase" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="DuplicateSwitchCase" enabled="false" level="WARNING" enabled_by_default="false" />

View File

@ -1,5 +1,5 @@
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND --> <!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
<h4><em>last updated on 2021-11-26 for Ballistica version 1.6.6 build 20410</em></h4> <h4><em>last updated on 2021-12-17 for Ballistica version 1.6.6 build 20414</em></h4>
<p>This page documents the Python classes and functions in the 'ba' module, <p>This page documents the Python classes and functions in the 'ba' module,
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p> which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
<hr> <hr>

View File

@ -3,12 +3,12 @@
all: resources all: resources
# This section is autogenerated; do not edit by hand. # This section is autogenerated; do not edit by hand.
#__AUTOGENERATED_PUBLIC_BEGIN__ # __AUTOGENERATED_PUBLIC_BEGIN__
#__AUTOGENERATED_PUBLIC_END__ # __AUTOGENERATED_PUBLIC_END__
# This section is autogenerated; do not edit by hand. # This section is autogenerated; do not edit by hand.
#__AUTOGENERATED_PRIVATE_BEGIN__ # __AUTOGENERATED_PRIVATE_BEGIN__
resources: \ resources: \
../ballisticacore-windows/Generic/BallisticaCore.ico ../ballisticacore-windows/Generic/BallisticaCore.ico
@ -26,4 +26,4 @@ efrocache-list:
efrocache-build: resources efrocache-build: resources
#__AUTOGENERATED_PRIVATE_END__ # __AUTOGENERATED_PRIVATE_END__

View File

@ -144,6 +144,10 @@ AppConfig::AppConfig() {
SetupEntries(); SetupEntries();
} }
// Clion think all calls of this are unreachable.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCallsOfFunction"
template <typename T> template <typename T>
void AppConfig::CompleteMap(const T& entry_map) { void AppConfig::CompleteMap(const T& entry_map) {
for (auto&& i : entry_map) { for (auto&& i : entry_map) {
@ -165,6 +169,8 @@ void AppConfig::CompleteMap(const T& entry_map) {
#endif #endif
} }
#pragma clang diagnostic pop
void AppConfig::SetupEntries() { void AppConfig::SetupEntries() {
// Register all our typed entries. // Register all our typed entries.
float_entries_[FloatID::kScreenGamma] = FloatEntry("Screen Gamma", 1.0F); float_entries_[FloatID::kScreenGamma] = FloatEntry("Screen Gamma", 1.0F);

View File

@ -21,7 +21,7 @@
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kAppBuildNumber = 20410; const int kAppBuildNumber = 20414;
const char* kAppVersion = "1.6.6"; const char* kAppVersion = "1.6.6";
// Our standalone globals. // Our standalone globals.

View File

@ -291,12 +291,12 @@ void Player::RunInput(InputType type, float value) {
} }
} else { } else {
if (arg >= threshold) { if (arg >= threshold) {
if (!left_held_ && !up_held_ && !down_held_) { if (!up_held_ && !down_held_) {
right_held_ = true; right_held_ = true;
RunInput(InputType::kRightPress); RunInput(InputType::kRightPress);
} }
} else if (arg <= -threshold) { } else if (arg <= -threshold) {
if (!right_held_ && !up_held_ && !down_held_) { if (!up_held_ && !down_held_) {
left_held_ = true; left_held_ = true;
RunInput(InputType::kLeftPress); RunInput(InputType::kLeftPress);
} }
@ -319,12 +319,12 @@ void Player::RunInput(InputType type, float value) {
} }
} else { } else {
if (arg <= -threshold) { if (arg <= -threshold) {
if (!left_held_ && !right_held_ && !up_held_) { if (!left_held_ && !right_held_) {
down_held_ = true; down_held_ = true;
RunInput(InputType::kDownPress); RunInput(InputType::kDownPress);
} }
} else if (arg >= threshold) { } else if (arg >= threshold) {
if (!left_held_ && !up_held_ && !right_held_) { if (!left_held_ && !right_held_) {
up_held_ = true; up_held_ = true;
RunInput(InputType::kUpPress); RunInput(InputType::kUpPress);
} }

View File

@ -176,8 +176,14 @@ auto TimerList::NewTimer(TimerMedium current_time, TimerMedium length,
auto* t = new Timer(this, next_timer_id_++, current_time, length, offset, auto* t = new Timer(this, next_timer_id_++, current_time, length, offset,
repeat_count); repeat_count);
t->runnable_ = runnable; t->runnable_ = runnable;
// Clion (correctly) points out that t may get deallocated in this call,
// but the call returns nullptr in that case.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "DanglingPointer"
t = SubmitTimer(t); t = SubmitTimer(t);
return t; return t;
#pragma clang diagnostic pop
} }
auto TimerList::GetTimeToNextExpire(TimerMedium current_time) -> TimerMedium { auto TimerList::GetTimeToNextExpire(TimerMedium current_time) -> TimerMedium {
@ -229,7 +235,9 @@ auto TimerList::SubmitTimer(Timer* t) -> Timer* {
return nullptr; return nullptr;
} else { } else {
// Its still alive. Shove it back in line and tell it to keep working. // Its still alive. Shove it back in line and tell it to keep working.
if (!t->initial_ && t->repeat_count_ > 0) t->repeat_count_--; if (!t->initial_ && t->repeat_count_ > 0) {
t->repeat_count_--;
}
t->initial_ = false; t->initial_ = false;
// No drift. // No drift.

View File

@ -127,21 +127,31 @@ void GraphicsServer::PreprocessRenderFrameDef(FrameDef* frame_def) {
assert(InGraphicsThread()); assert(InGraphicsThread());
// Now let the renderer do any preprocess passes (shadows, etc). // Now let the renderer do any preprocess passes (shadows, etc).
renderer_->PreprocessFrameDef(frame_def); assert(renderer_);
if (renderer_ != nullptr) {
renderer_->PreprocessFrameDef(frame_def);
}
} }
// Does the default drawing to the screen, either from the left or right stereo // Does the default drawing to the screen, either from the left or right stereo
// eye or in mono. // eye or in mono.
void GraphicsServer::DrawRenderFrameDef(FrameDef* frame_def, int eye) { void GraphicsServer::DrawRenderFrameDef(FrameDef* frame_def, int eye) {
renderer_->RenderFrameDef(frame_def); assert(renderer_);
if (renderer_) {
renderer_->RenderFrameDef(frame_def);
}
} }
// Clean up the frame_def once done drawing it. // Clean up the frame_def once done drawing it.
void GraphicsServer::FinishRenderFrameDef(FrameDef* frame_def) { void GraphicsServer::FinishRenderFrameDef(FrameDef* frame_def) {
renderer_->FinishFrameDef(frame_def); assert(renderer_);
if (renderer_) {
renderer_->FinishFrameDef(frame_def);
// Let the app know a frame render is complete (it may need to do a swap/etc). // Let the app know a frame render is complete (it may need to do a
g_app->DidFinishRenderingFrame(frame_def); // swap/etc).
g_app->DidFinishRenderingFrame(frame_def);
}
} }
void GraphicsServer::TryRender() { void GraphicsServer::TryRender() {
@ -514,6 +524,10 @@ void GraphicsServer::VideoResize(float h, float v) {
// FIXME: Shouldn't have android-specific code in here. // FIXME: Shouldn't have android-specific code in here.
void GraphicsServer::HandlePushAndroidRes(const std::string& android_res) { void GraphicsServer::HandlePushAndroidRes(const std::string& android_res) {
if (g_buildconfig.ostype_android()) { if (g_buildconfig.ostype_android()) {
assert(renderer_);
if (renderer_ == nullptr) {
return;
}
// We push android res to the java layer here. We don't actually worry // We push android res to the java layer here. We don't actually worry
// about screen-size-changed callbacks and whatnot, since those will happen // about screen-size-changed callbacks and whatnot, since those will happen
// automatically once things actually change. We just want to be sure that // automatically once things actually change. We just want to be sure that

View File

@ -54,6 +54,12 @@ auto PythonClassCollideModel::GetCollideModel(bool doraise) const
return collide_model; return collide_model;
} }
// Clion makes some incorrect inferences here.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
#pragma ide diagnostic ignored "ConstantFunctionResult"
auto PythonClassCollideModel::tp_new(PyTypeObject* type, PyObject* args, auto PythonClassCollideModel::tp_new(PyTypeObject* type, PyObject* args,
PyObject* kwds) -> PyObject* { PyObject* kwds) -> PyObject* {
auto* self = auto* self =
@ -67,10 +73,6 @@ auto PythonClassCollideModel::tp_new(PyTypeObject* type, PyObject* args,
+ GetCurrentThreadName() + ")."); + GetCurrentThreadName() + ").");
} }
// Clion incorrectly things s_create_empty will always be false.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (!s_create_empty_) { if (!s_create_empty_) {
throw Exception( throw Exception(
"Can't instantiate CollideModels directly; use " "Can't instantiate CollideModels directly; use "
@ -78,11 +80,12 @@ auto PythonClassCollideModel::tp_new(PyTypeObject* type, PyObject* args,
} }
self->collide_model_ = new Object::Ref<CollideModel>(); self->collide_model_ = new Object::Ref<CollideModel>();
BA_PYTHON_NEW_CATCH; BA_PYTHON_NEW_CATCH;
#pragma clang diagnostic pop
} }
return reinterpret_cast<PyObject*>(self); return reinterpret_cast<PyObject*>(self);
} }
#pragma clang diagnostic pop
void PythonClassCollideModel::Delete(Object::Ref<CollideModel>* ref) { void PythonClassCollideModel::Delete(Object::Ref<CollideModel>* ref) {
assert(InGameThread()); assert(InGameThread());
// if we're the py-object for a collide_model, clear them out // if we're the py-object for a collide_model, clear them out

View File

@ -52,6 +52,11 @@ auto PythonClassData::GetData(bool doraise) const -> Data* {
} }
return data; return data;
} }
// Clion makes some incorrect inferences here.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
#pragma ide diagnostic ignored "ConstantFunctionResult"
auto PythonClassData::tp_new(PyTypeObject* type, PyObject* args, PyObject* kwds) auto PythonClassData::tp_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-> PyObject* { -> PyObject* {
@ -65,10 +70,6 @@ auto PythonClassData::tp_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+ GetCurrentThreadName() + ")."); + GetCurrentThreadName() + ").");
} }
// Clion incorrectly things s_create_empty will always be false.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (!s_create_empty_) { if (!s_create_empty_) {
throw Exception( throw Exception(
"Can't instantiate Datas directly; use ba.getdata() to get " "Can't instantiate Datas directly; use ba.getdata() to get "
@ -76,10 +77,10 @@ auto PythonClassData::tp_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
} }
self->data_ = new Object::Ref<Data>(); self->data_ = new Object::Ref<Data>();
BA_PYTHON_NEW_CATCH; BA_PYTHON_NEW_CATCH;
#pragma clang diagnostic pop
} }
return reinterpret_cast<PyObject*>(self); return reinterpret_cast<PyObject*>(self);
} }
#pragma clang diagnostic pop
void PythonClassData::Delete(Object::Ref<Data>* ref) { void PythonClassData::Delete(Object::Ref<Data>* ref) {
assert(InGameThread()); assert(InGameThread());

View File

@ -53,6 +53,12 @@ auto PythonClassModel::GetModel(bool doraise) const -> Model* {
return model; return model;
} }
// Clion makes some incorrect inferences here.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
#pragma ide diagnostic ignored "ConstantFunctionResult"
auto PythonClassModel::tp_new(PyTypeObject* type, PyObject* args, auto PythonClassModel::tp_new(PyTypeObject* type, PyObject* args,
PyObject* kwds) -> PyObject* { PyObject* kwds) -> PyObject* {
auto* self = reinterpret_cast<PythonClassModel*>(type->tp_alloc(type, 0)); auto* self = reinterpret_cast<PythonClassModel*>(type->tp_alloc(type, 0));
@ -64,10 +70,6 @@ auto PythonClassModel::tp_new(PyTypeObject* type, PyObject* args,
+ " objects must only be created in the game thread (current is (" + " objects must only be created in the game thread (current is ("
+ GetCurrentThreadName() + ")."); + GetCurrentThreadName() + ").");
} }
// Clion incorrectly things s_create_empty will always be false.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (!s_create_empty_) { if (!s_create_empty_) {
throw Exception( throw Exception(
"Can't instantiate Models directly; use ba.getmodel() to get " "Can't instantiate Models directly; use ba.getmodel() to get "
@ -75,11 +77,12 @@ auto PythonClassModel::tp_new(PyTypeObject* type, PyObject* args,
} }
self->model_ = new Object::Ref<Model>(); self->model_ = new Object::Ref<Model>();
BA_PYTHON_NEW_CATCH; BA_PYTHON_NEW_CATCH;
#pragma clang diagnostic pop
} }
return reinterpret_cast<PyObject*>(self); return reinterpret_cast<PyObject*>(self);
} }
#pragma clang diagnostic pop
void PythonClassModel::Delete(Object::Ref<Model>* ref) { void PythonClassModel::Delete(Object::Ref<Model>* ref) {
assert(InGameThread()); assert(InGameThread());

View File

@ -52,6 +52,12 @@ auto PythonClassSound::GetSound(bool doraise) const -> Sound* {
return sound; return sound;
} }
// Clion makes some incorrect inferences here.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
#pragma ide diagnostic ignored "ConstantFunctionResult"
auto PythonClassSound::tp_new(PyTypeObject* type, PyObject* args, auto PythonClassSound::tp_new(PyTypeObject* type, PyObject* args,
PyObject* kwds) -> PyObject* { PyObject* kwds) -> PyObject* {
auto* self = reinterpret_cast<PythonClassSound*>(type->tp_alloc(type, 0)); auto* self = reinterpret_cast<PythonClassSound*>(type->tp_alloc(type, 0));
@ -63,10 +69,6 @@ auto PythonClassSound::tp_new(PyTypeObject* type, PyObject* args,
+ " objects must only be created in the game thread (current is (" + " objects must only be created in the game thread (current is ("
+ GetCurrentThreadName() + ")."); + GetCurrentThreadName() + ").");
} }
// Clion incorrectly things s_create_empty will always be false.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnreachableCode"
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (!s_create_empty_) { if (!s_create_empty_) {
throw Exception( throw Exception(
"Can't instantiate Sounds directly; use ba.getsound() to get " "Can't instantiate Sounds directly; use ba.getsound() to get "
@ -74,11 +76,12 @@ auto PythonClassSound::tp_new(PyTypeObject* type, PyObject* args,
} }
self->sound_ = new Object::Ref<Sound>(); self->sound_ = new Object::Ref<Sound>();
BA_PYTHON_NEW_CATCH; BA_PYTHON_NEW_CATCH;
#pragma clang diagnostic pop
} }
return reinterpret_cast<PyObject*>(self); return reinterpret_cast<PyObject*>(self);
} }
#pragma clang diagnostic pop
void PythonClassSound::Delete(Object::Ref<Sound>* ref) { void PythonClassSound::Delete(Object::Ref<Sound>* ref) {
assert(InGameThread()); assert(InGameThread());

View File

@ -139,7 +139,13 @@ auto PythonClassWidget::GetChildren(PythonClassWidget* self) -> PyObject* {
} }
PyObject* py_list = PyList_New(0); PyObject* py_list = PyList_New(0);
auto* cw = dynamic_cast<ContainerWidget*>(w); auto* cw = dynamic_cast<ContainerWidget*>(w);
// Clion seems to think dynamic_casting a Widget* to a ContainerWidget*
// will always succeed. Go home Clion; you're drunk.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (cw) { if (cw) {
#pragma clang diagnostic pop
for (auto&& i : cw->widgets()) { for (auto&& i : cw->widgets()) {
assert(i.exists()); assert(i.exists());
PyList_Append(py_list, i->BorrowPyRef()); PyList_Append(py_list, i->BorrowPyRef());
@ -156,7 +162,13 @@ auto PythonClassWidget::GetSelectedChild(PythonClassWidget* self) -> PyObject* {
throw Exception(PyExcType::kWidgetNotFound); throw Exception(PyExcType::kWidgetNotFound);
} }
auto* cw = dynamic_cast<ContainerWidget*>(w); auto* cw = dynamic_cast<ContainerWidget*>(w);
// Clion seems to think dynamic_casting a Widget* to a ContainerWidget*
// will always succeed. Go home Clion; you're drunk.
#pragma clang diagnostic push
#pragma ide diagnostic ignored "ConstantConditionsOC"
if (cw) { if (cw) {
#pragma clang diagnostic pop
Widget* selected_widget = cw->selected_widget(); Widget* selected_widget = cw->selected_widget();
if (selected_widget) return selected_widget->NewPyRef(); if (selected_widget) return selected_widget->NewPyRef();
} }

View File

@ -9,7 +9,7 @@ clean:
# This section is autogenerated; do not edit by hand. # This section is autogenerated; do not edit by hand.
#__AUTOGENERATED_PUBLIC_BEGIN__ # __AUTOGENERATED_PUBLIC_BEGIN__
sources: \ sources: \
../../assets/src/ba_data/python/ba/_generated/__init__.py \ ../../assets/src/ba_data/python/ba/_generated/__init__.py \
@ -29,10 +29,10 @@ sources: \
../../assets/src/ba_data/python/ba/_generated/enums.py : ../ballistica/core/types.h ../../tools/batools/pythonenumsmodule.py ../../assets/src/ba_data/python/ba/_generated/enums.py : ../ballistica/core/types.h ../../tools/batools/pythonenumsmodule.py
@$(PCOMMAND) gen_python_enums_module $< $@ @$(PCOMMAND) gen_python_enums_module $< $@
#__AUTOGENERATED_PUBLIC_END__ # __AUTOGENERATED_PUBLIC_END__
# This section is autogenerated; do not edit by hand. # This section is autogenerated; do not edit by hand.
#__AUTOGENERATED_PRIVATE_BEGIN__ # __AUTOGENERATED_PRIVATE_BEGIN__
# Note: we include our public targets in efrocache even # Note: we include our public targets in efrocache even
# though they are buildable in public. This allows us to # though they are buildable in public. This allows us to
@ -47,4 +47,4 @@ efrocache-list:
efrocache-build: sources efrocache-build: sources
#__AUTOGENERATED_PRIVATE_END__ # __AUTOGENERATED_PRIVATE_END__

View File

@ -429,7 +429,7 @@ def test_protocol_creation() -> None:
response_types={0: _TResp1}) response_types={0: _TResp1})
def test_sender_module_single_embedded() -> None: def test_sender_module_single_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_sender_module() # NOTE: Ideally we should be testing efro.message.create_sender_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -462,7 +462,7 @@ def test_sender_module_single_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_sender_module_sync_embedded() -> None: def test_sender_module_sync_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_sender_module() # NOTE: Ideally we should be testing efro.message.create_sender_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -495,7 +495,7 @@ def test_sender_module_sync_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_sender_module_async_embedded() -> None: def test_sender_module_async_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_sender_module() # NOTE: Ideally we should be testing efro.message.create_sender_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -528,7 +528,7 @@ def test_sender_module_async_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_sender_module_both_embedded() -> None: def test_sender_module_both_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_sender_module() # NOTE: Ideally we should be testing efro.message.create_sender_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -561,7 +561,7 @@ def test_sender_module_both_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_receiver_module_single_embedded() -> None: def test_receiver_module_single_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_receiver_module() # NOTE: Ideally we should be testing efro.message.create_receiver_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -595,7 +595,7 @@ def test_receiver_module_single_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_receiver_module_sync_embedded() -> None: def test_receiver_module_sync_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_receiver_module() # NOTE: Ideally we should be testing efro.message.create_receiver_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module
@ -628,7 +628,7 @@ def test_receiver_module_sync_embedded() -> None:
' See test stdout for new code.') ' See test stdout for new code.')
def test_receiver_module_async_embedded() -> None: def test_receiver_module_async_emb() -> None:
"""Test generation of protocol-specific sender modules for typing/etc.""" """Test generation of protocol-specific sender modules for typing/etc."""
# NOTE: Ideally we should be testing efro.message.create_receiver_module() # NOTE: Ideally we should be testing efro.message.create_receiver_module()
# here, but it requires us to pass code which imports this test module # here, but it requires us to pass code which imports this test module

View File

@ -173,7 +173,7 @@ def _get_py_targets_subset(all_targets: set[str], subset: str,
' \\\n '.join(pyc_targets) + '\n') ' \\\n '.join(pyc_targets) + '\n')
# We transform all non-public targets into efrocache-fetches in public. # We transform all non-public targets into efrocache-fetches in public.
efc = '' if subset.startswith('public') else '#__EFROCACHE_TARGET__\n' efc = '' if subset.startswith('public') else '# __EFROCACHE_TARGET__\n'
out += ('\n# Rule to copy src asset scripts to dst.\n' out += ('\n# Rule to copy src asset scripts to dst.\n'
'# (and make non-writable so I\'m less likely to ' '# (and make non-writable so I\'m less likely to '
@ -259,7 +259,7 @@ def _get_extras_targets_win(all_targets: set[str], platform: str) -> str:
# We transform all these targets into efrocache-fetches in public. # We transform all these targets into efrocache-fetches in public.
out += ('\n# Rule to copy src extras to build.\n' out += ('\n# Rule to copy src extras to build.\n'
f'#__EFROCACHE_TARGET__\n' f'# __EFROCACHE_TARGET__\n'
f'$(EXTRAS_TARGETS_WIN_{p_up}) : build/% :' f'$(EXTRAS_TARGETS_WIN_{p_up}) : build/% :'
' src/%\n' ' src/%\n'
'\t@echo Copying file: $@\n' '\t@echo Copying file: $@\n'
@ -287,10 +287,10 @@ def update_assets_makefile(projroot: str, check: bool) -> None:
original = infile.read() original = infile.read()
lines = original.splitlines() lines = original.splitlines()
auto_start_public = lines.index('#__AUTOGENERATED_PUBLIC_BEGIN__') auto_start_public = lines.index('# __AUTOGENERATED_PUBLIC_BEGIN__')
auto_end_public = lines.index('#__AUTOGENERATED_PUBLIC_END__') auto_end_public = lines.index('# __AUTOGENERATED_PUBLIC_END__')
auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__') auto_start_private = lines.index('# __AUTOGENERATED_PRIVATE_BEGIN__')
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__') auto_end_private = lines.index('# __AUTOGENERATED_PRIVATE_END__')
all_targets_public: set[str] = set() all_targets_public: set[str] = set()
all_targets_private: set[str] = set() all_targets_private: set[str] = set()

View File

@ -32,7 +32,7 @@ class PipRequirement:
# entries; this accounts for manual installations or other nonstandard setups. # entries; this accounts for manual installations or other nonstandard setups.
PIP_REQUIREMENTS = [ PIP_REQUIREMENTS = [
PipRequirement(modulename='pylint', minversion=[2, 12, 1]), PipRequirement(modulename='pylint', minversion=[2, 12, 1]),
PipRequirement(modulename='mypy', minversion=[0, 910]), PipRequirement(modulename='mypy', minversion=[0, 920]),
PipRequirement(modulename='yapf', minversion=[0, 31, 0]), PipRequirement(modulename='yapf', minversion=[0, 31, 0]),
PipRequirement(modulename='cpplint', minversion=[1, 5, 5]), PipRequirement(modulename='cpplint', minversion=[1, 5, 5]),
PipRequirement(modulename='pytest', minversion=[6, 2, 4]), PipRequirement(modulename='pytest', minversion=[6, 2, 4]),
@ -788,7 +788,7 @@ def filter_server_config(projroot: str, infilepath: str) -> str:
"""Add commented-out config options to a server config.""" """Add commented-out config options to a server config."""
with open(infilepath, encoding='utf-8') as infile: with open(infilepath, encoding='utf-8') as infile:
cfg = infile.read() cfg = infile.read()
return cfg.replace('#__CONFIG_TEMPLATE_VALUES__', return cfg.replace('# __CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot)) _get_server_config_template_yaml(projroot))

View File

@ -191,10 +191,10 @@ def update(projroot: str, check: bool) -> None:
all_dsts_public: set[str] = set() all_dsts_public: set[str] = set()
all_dsts_private: set[str] = set() all_dsts_private: set[str] = set()
auto_start_public = lines.index('#__AUTOGENERATED_PUBLIC_BEGIN__') auto_start_public = lines.index('# __AUTOGENERATED_PUBLIC_BEGIN__')
auto_end_public = lines.index('#__AUTOGENERATED_PUBLIC_END__') auto_end_public = lines.index('# __AUTOGENERATED_PUBLIC_END__')
auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__') auto_start_private = lines.index('# __AUTOGENERATED_PRIVATE_BEGIN__')
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__') auto_end_private = lines.index('# __AUTOGENERATED_PRIVATE_END__')
# Public targets (full sources available in public) # Public targets (full sources available in public)
targets: list[Target] = [] targets: list[Target] = []
@ -219,7 +219,7 @@ def update(projroot: str, check: bool) -> None:
our_lines_private_1 = ( our_lines_private_1 = (
_empty_line_if(bool(targets)) + _empty_line_if(bool(targets)) +
_emit_group_build_lines(targets, basename) + _emit_group_build_lines(targets, basename) +
['#__EFROCACHE_TARGET__\n' + t.emit() for t in targets] + [ ['# __EFROCACHE_TARGET__\n' + t.emit() for t in targets] + [
'\n# Note: we include our public targets in efrocache even\n' '\n# Note: we include our public targets in efrocache even\n'
'# though they are buildable in public. This allows us to\n' '# though they are buildable in public. This allows us to\n'
'# fetch them on Windows to bootstrap binary CI builds in\n' '# fetch them on Windows to bootstrap binary CI builds in\n'
@ -231,11 +231,11 @@ def update(projroot: str, check: bool) -> None:
targets = [] targets = []
basename = 'private-internal' basename = 'private-internal'
_add_python_embedded_targets_internal(targets) _add_python_embedded_targets_internal(targets)
our_lines_private_2 = (['#__PUBSYNC_STRIP_BEGIN__'] + our_lines_private_2 = (['# __PUBSYNC_STRIP_BEGIN__'] +
_empty_line_if(bool(targets)) + _empty_line_if(bool(targets)) +
_emit_group_build_lines(targets, basename) + _emit_group_build_lines(targets, basename) +
[t.emit() [t.emit() for t in targets] +
for t in targets] + ['#__PUBSYNC_STRIP_END__']) ['# __PUBSYNC_STRIP_END__'])
our_lines_private = our_lines_private_1 + our_lines_private_2 our_lines_private = our_lines_private_1 + our_lines_private_2
filtered = (lines[:auto_start_public + 1] + our_lines_public + filtered = (lines[:auto_start_public + 1] + our_lines_public +

View File

@ -366,10 +366,10 @@ def update(projroot: str, check: bool) -> None:
original = infile.read() original = infile.read()
lines = original.splitlines() lines = original.splitlines()
auto_start_public = lines.index('#__AUTOGENERATED_PUBLIC_BEGIN__') auto_start_public = lines.index('# __AUTOGENERATED_PUBLIC_BEGIN__')
auto_end_public = lines.index('#__AUTOGENERATED_PUBLIC_END__') auto_end_public = lines.index('# __AUTOGENERATED_PUBLIC_END__')
auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__') auto_start_private = lines.index('# __AUTOGENERATED_PRIVATE_BEGIN__')
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__') auto_end_private = lines.index('# __AUTOGENERATED_PRIVATE_END__')
# Public targets (full sources available in public) # Public targets (full sources available in public)
targets: list[Target] = [] targets: list[Target] = []
@ -392,7 +392,7 @@ def update(projroot: str, check: bool) -> None:
_empty_line_if(bool(targets)) + _empty_line_if(bool(targets)) +
_emit_group_build_lines(targets, basename) + _emit_group_build_lines(targets, basename) +
_emit_group_clean_lines(targets, basename) + _emit_group_clean_lines(targets, basename) +
['#__EFROCACHE_TARGET__\n' + t.emit() ['# __EFROCACHE_TARGET__\n' + t.emit()
for t in targets] + _emit_group_efrocache_lines(targets)) for t in targets] + _emit_group_efrocache_lines(targets))
# Private-internal targets (not available at all in public) # Private-internal targets (not available at all in public)
@ -410,12 +410,12 @@ def update(projroot: str, check: bool) -> None:
_add_apple_tv_3d_icon(targets) _add_apple_tv_3d_icon(targets)
_add_apple_tv_store_icon(targets) _add_apple_tv_store_icon(targets)
_add_google_vr_icon(targets) _add_google_vr_icon(targets)
our_lines_private_2 = (['#__PUBSYNC_STRIP_BEGIN__'] + our_lines_private_2 = (['# __PUBSYNC_STRIP_BEGIN__'] +
_empty_line_if(bool(targets)) + _empty_line_if(bool(targets)) +
_emit_group_build_lines(targets, basename) + _emit_group_build_lines(targets, basename) +
_emit_group_clean_lines(targets, basename) + _emit_group_clean_lines(targets, basename) +
[t.emit() [t.emit() for t in targets] +
for t in targets] + ['#__PUBSYNC_STRIP_END__']) ['# __PUBSYNC_STRIP_END__'])
our_lines_private = our_lines_private_1 + our_lines_private_2 our_lines_private = our_lines_private_1 + our_lines_private_2
filtered = (lines[:auto_start_public + 1] + our_lines_public + filtered = (lines[:auto_start_public + 1] + our_lines_public +

View File

@ -45,7 +45,7 @@ def dataclass_to_dict(obj: Any,
the ability to do a lossless round-trip with data). the ability to do a lossless round-trip with data).
If coerce_to_float is True, integer values present on float typed fields If coerce_to_float is True, integer values present on float typed fields
will be converted to floats in the dict output. If False, a TypeError will be converted to float in the dict output. If False, a TypeError
will be triggered. will be triggered.
""" """
@ -94,10 +94,10 @@ def dataclass_from_dict(cls: type[T],
(as this would break the ability to do a lossless round-trip with data). (as this would break the ability to do a lossless round-trip with data).
If coerce_to_float is True, int values passed for float typed fields If coerce_to_float is True, int values passed for float typed fields
will be converted to float values. Otherwise a TypeError is raised. will be converted to float values. Otherwise, a TypeError is raised.
If allow_unknown_attrs is False, AttributeErrors will be raised for If allow_unknown_attrs is False, AttributeErrors will be raised for
attributes present in the dict but not on the data class. Otherwise they attributes present in the dict but not on the data class. Otherwise, they
will be preserved as part of the instance and included if it is will be preserved as part of the instance and included if it is
exported back to a dict, unless discard_unknown_attrs is True, in which exported back to a dict, unless discard_unknown_attrs is True, in which
case they will simply be discarded. case they will simply be discarded.

View File

@ -14,7 +14,7 @@ from typing import _AnnotatedAlias # type: ignore
_pytz_utc: Any _pytz_utc: Any
# We don't *require* pytz but we want to support it for tzinfos if available. # We don't *require* pytz, but we want to support it for tzinfos if available.
try: try:
import pytz import pytz
_pytz_utc = pytz.utc _pytz_utc = pytz.utc
@ -126,7 +126,7 @@ class IOAttrs:
# Turning off store_default requires the field to have either # Turning off store_default requires the field to have either
# a default_factory or a default # a default_factory or a default
if not self.store_default: if not self.store_default:
default_factory: Any = field.default_factory # type: ignore default_factory: Any = field.default_factory
if (default_factory is dataclasses.MISSING if (default_factory is dataclasses.MISSING
and field.default is dataclasses.MISSING): and field.default is dataclasses.MISSING):
raise TypeError(f'Field {field.name} of {cls} has' raise TypeError(f'Field {field.name} of {cls} has'
@ -163,7 +163,7 @@ def _get_origin(anntype: Any) -> Any:
def _parse_annotated(anntype: Any) -> tuple[Any, Optional[IOAttrs]]: def _parse_annotated(anntype: Any) -> tuple[Any, Optional[IOAttrs]]:
"""Parse Annotated() constructs, returning annotated type & IOAttrs.""" """Parse Annotated() constructs, returning annotated type & IOAttrs."""
# If we get an Annotated[foo, bar, eep] we take # If we get an Annotated[foo, bar, eep] we take
# foo as the actual type and we look for IOAttrs instances in # foo as the actual type, and we look for IOAttrs instances in
# bar/eep to affect our behavior. # bar/eep to affect our behavior.
ioattrs: Optional[IOAttrs] = None ioattrs: Optional[IOAttrs] = None
if isinstance(anntype, _AnnotatedAlias): if isinstance(anntype, _AnnotatedAlias):

View File

@ -70,14 +70,14 @@ class _Inputter(Generic[T]):
return value return value
if origin is typing.Union: if origin is typing.Union:
# Currently the only unions we support are None/Value # Currently, the only unions we support are None/Value
# (translated from Optional), which we verified on prep. # (translated from Optional), which we verified on prep.
# So let's treat this as a simple optional case. # So let's treat this as a simple optional case.
if value is None: if value is None:
return None return None
childanntypes_l = [ childanntypes_l = [
c for c in typing.get_args(anntype) if c is not type(None) c for c in typing.get_args(anntype) if c is not type(None)
] ] # noqa (pycodestyle complains about *is* with type)
assert len(childanntypes_l) == 1 assert len(childanntypes_l) == 1
return self._value_from_input(cls, fieldpath, childanntypes_l[0], return self._value_from_input(cls, fieldpath, childanntypes_l[0],
value, ioattrs) value, ioattrs)
@ -127,7 +127,7 @@ class _Inputter(Generic[T]):
"""Given input data, returns bytes.""" """Given input data, returns bytes."""
import base64 import base64
# For firestore, bytes are passed as-is. Otherwise they're encoded # For firestore, bytes are passed as-is. Otherwise, they're encoded
# as base64. # as base64.
if self._codec is Codec.FIRESTORE: if self._codec is Codec.FIRESTORE:
if not isinstance(value, bytes): if not isinstance(value, bytes):
@ -268,7 +268,7 @@ class _Inputter(Generic[T]):
cls, fieldpath, valanntype, val, ioattrs) cls, fieldpath, valanntype, val, ioattrs)
elif issubclass(keyanntype, Enum): elif issubclass(keyanntype, Enum):
# In prep we verified that all these enums' values have # In prep, we verified that all these enums' values have
# the same type, so we can just look at the first to see if # the same type, so we can just look at the first to see if
# this is a string enum or an int enum. # this is a string enum or an int enum.
enumvaltype = type(next(iter(keyanntype)).value) enumvaltype = type(next(iter(keyanntype)).value)

View File

@ -60,7 +60,7 @@ class _Outputter:
# If we're not storing default values for this fella, # If we're not storing default values for this fella,
# we can skip all output processing if we've got a default value. # we can skip all output processing if we've got a default value.
if ioattrs is not None and not ioattrs.store_default: if ioattrs is not None and not ioattrs.store_default:
default_factory: Any = field.default_factory # type: ignore default_factory: Any = field.default_factory
if default_factory is not dataclasses.MISSING: if default_factory is not dataclasses.MISSING:
if default_factory() == value: if default_factory() == value:
continue continue
@ -113,14 +113,14 @@ class _Outputter:
return value if self._create else None return value if self._create else None
if origin is typing.Union: if origin is typing.Union:
# Currently the only unions we support are None/Value # Currently, the only unions we support are None/Value
# (translated from Optional), which we verified on prep. # (translated from Optional), which we verified on prep.
# So let's treat this as a simple optional case. # So let's treat this as a simple optional case.
if value is None: if value is None:
return None return None
childanntypes_l = [ childanntypes_l = [
c for c in typing.get_args(anntype) if c is not type(None) c for c in typing.get_args(anntype) if c is not type(None)
] ] # noqa (pycodestyle complains about *is* with type)
assert len(childanntypes_l) == 1 assert len(childanntypes_l) == 1
return self._process_value(cls, fieldpath, childanntypes_l[0], return self._process_value(cls, fieldpath, childanntypes_l[0],
value, ioattrs) value, ioattrs)

View File

@ -75,7 +75,7 @@ class DataclassFieldLookup(Generic[T]):
# We tell the type system that we are returning an instance # We tell the type system that we are returning an instance
# of our class, which allows it to perform type checking on # of our class, which allows it to perform type checking on
# member lookups. In reality, however, we are providing a # member lookups. In reality, however, we are providing a
# special object which captures path lookups so we can build # special object which captures path lookups, so we can build
# a string from them. # a string from them.
if not TYPE_CHECKING: if not TYPE_CHECKING:
out = callback(_PathCapture(self.cls)) out = callback(_PathCapture(self.cls))

View File

@ -303,7 +303,7 @@ class PrepSession:
"""Run prep on a Union type.""" """Run prep on a Union type."""
typeargs = typing.get_args(anntype) typeargs = typing.get_args(anntype)
if (len(typeargs) != 2 if (len(typeargs) != 2
or len([c for c in typeargs if c is type(None)]) != 1): or len([c for c in typeargs if c is type(None)]) != 1): # noqa
raise TypeError(f'Union {anntype} for attr \'{attrname}\' on' raise TypeError(f'Union {anntype} for attr \'{attrname}\' on'
f' {cls.__name__} is not supported by dataclassio;' f' {cls.__name__} is not supported by dataclassio;'
f' only 2 member Unions with one type being None' f' only 2 member Unions with one type being None'

View File

@ -766,7 +766,7 @@ class MessageReceiver:
# Return type of None translates to EmptyResponse. # Return type of None translates to EmptyResponse.
responsetypes = tuple(EmptyResponse if r is type(None) else r responsetypes = tuple(EmptyResponse if r is type(None) else r
for r in responsetypes) for r in responsetypes) # noqa
# Make sure our protocol has this message type registered and our # Make sure our protocol has this message type registered and our
# return types exactly match. (Technically we could return a subset # return types exactly match. (Technically we could return a subset

View File

@ -579,6 +579,8 @@ def human_readable_compact_id(num: int) -> str:
'o' is excluded due to similarity to '0'. 'o' is excluded due to similarity to '0'.
'z' is excluded due to similarity to '2'. 'z' is excluded due to similarity to '2'.
Therefore for n chars this can store values of 21^n.
When reading human input consisting of these IDs, it may be desirable When reading human input consisting of these IDs, it may be desirable
to map the disallowed chars to their corresponding allowed ones to map the disallowed chars to their corresponding allowed ones
('o' -> '0', etc). ('o' -> '0', etc).
@ -599,6 +601,8 @@ def compact_id(num: int) -> str:
friendly to humans due to using both capital and lowercase letters, friendly to humans due to using both capital and lowercase letters,
both 'O' and '0', etc. both 'O' and '0', etc.
Therefore for n chars this can store values of 62^n.
Sort order for these ids is the same as the original numbers. Sort order for these ids is the same as the original numbers.
""" """
return _compact_id( return _compact_id(
@ -612,3 +616,24 @@ def assert_never(value: NoReturn) -> NoReturn:
See https://github.com/python/typing/issues/735 See https://github.com/python/typing/issues/735
""" """
assert False, f'Unhandled value: {value} ({type(value).__name__})' assert False, f'Unhandled value: {value} ({type(value).__name__})'
def unchanging_hostname() -> str:
"""Return an unchanging name for the local device.
Similar to the `hostname` call (or os.uname().nodename in Python)
except attempts to give a name that doesn't change depending on
network conditions. (A Mac will tend to go from Foo to Foo.local,
Foo.lan etc. throughout its various adventures)
"""
import os
import platform
import subprocess
# On Mac, this should give the computer name assigned in System Prefs.
if platform.system() == 'Darwin':
return subprocess.run(
['scutil', '--get', 'ComputerName'],
check=True,
capture_output=True).stdout.decode().strip().replace(' ', '-')
return os.uname().nodename

View File

@ -172,8 +172,8 @@ def py_examine(projroot: Path, filename: Path, line: int, column: int,
symbol = (selection if selection is not None else _py_symbol_at_column( symbol = (selection if selection is not None else _py_symbol_at_column(
flines[line - 1], column)) flines[line - 1], column))
# Insert a line after the provided one which is just the symbol so we # Insert a line after the provided one which is just the symbol so
# can ask for its value alone. # that we can ask for its value alone.
match = re.match(r'\s*', flines[line - 1]) match = re.match(r'\s*', flines[line - 1])
whitespace = match.group() if match is not None else '' whitespace = match.group() if match is not None else ''
sline = whitespace + symbol + ' #@' sline = whitespace + symbol + ' #@'
@ -187,8 +187,8 @@ def py_examine(projroot: Path, filename: Path, line: int, column: int,
symbol = (selection if selection is not None else _py_symbol_at_column( symbol = (selection if selection is not None else _py_symbol_at_column(
flines[line - 1], column)) flines[line - 1], column))
# Insert a line after the provided one which is just the symbol so we # Insert a line after the provided one which is just the symbol so
# can ask for its value alone. # that we can ask for its value alone.
match = re.match(r'\s*', flines[line - 1]) match = re.match(r'\s*', flines[line - 1])
whitespace = match.group() if match is not None else '' whitespace = match.group() if match is not None else ''
if operation == 'mypy_infer': if operation == 'mypy_infer':

View File

@ -24,7 +24,7 @@ if TYPE_CHECKING:
BASE_URL = 'https://files.ballistica.net/cache/ba1/' BASE_URL = 'https://files.ballistica.net/cache/ba1/'
TARGET_TAG = '#__EFROCACHE_TARGET__' TARGET_TAG = '# __EFROCACHE_TARGET__'
CACHE_DIR_NAME = '.efrocache' CACHE_DIR_NAME = '.efrocache'
CACHE_MAP_NAME = '.efrocachemap' CACHE_MAP_NAME = '.efrocachemap'

View File

@ -10,7 +10,7 @@ from threading import Condition, Thread
import os import os
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Generator, Optional, Callable from typing import Iterable, Optional, Callable
class _FileBatchesRun: class _FileBatchesRun:
@ -107,7 +107,7 @@ def file_batches(
batch_size: int = 1, batch_size: int = 1,
file_filter: Optional[Callable[[str], bool]] = None, file_filter: Optional[Callable[[str], bool]] = None,
include_mac_packages: bool = False, include_mac_packages: bool = False,
) -> Generator[list[str], None, None]: ) -> Iterable[list[str]]:
"""Efficiently yield batches of files to operate on. """Efficiently yield batches of files to operate on.
Accepts a list of paths which can be files or directories to be recursed. Accepts a list of paths which can be files or directories to be recursed.