1212 * 2) Contribute the functions that have 'hasSideEffects' => true as a modification to bin/functionMetadata_original.php.
1313 * 3) Contribute the #[Pure] functions without side effects to https://github.com/JetBrains/phpstorm-stubs
1414 * 4) Once the PR from 3) is merged, please update the package here and run ./bin/generate-function-metadata.php.
15+ *
16+ * The array is keyed by lowercase function name or "Class::method". Each entry is
17+ * exactly one of:
18+ * - ['hasSideEffects' => bool] - false: pure, true: has side effects.
19+ * - ['pureUnlessCallableIsImpureParameters' => array<string, true>] - pure unless
20+ * one of the listed callable parameters (keyed by parameter name) receives an
21+ * impure callable, e.g. array_map()'s 'callback'.
1522 */
1623
24+ /** @var array<string, array{hasSideEffects: bool}|array{pureUnlessCallableIsImpureParameters: array<string, bool>}> */
1725return [
1826 'BackedEnum::from ' => ['hasSideEffects ' => false ],
1927 'BackedEnum::tryFrom ' => ['hasSideEffects ' => false ],
725733 'apcu_key_info ' => ['hasSideEffects ' => true ],
726734 'apcu_sma_info ' => ['hasSideEffects ' => true ],
727735 'apcu_store ' => ['hasSideEffects ' => true ],
736+ 'array_all ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
737+ 'array_any ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
728738 'array_change_key_case ' => ['hasSideEffects ' => false ],
729739 'array_chunk ' => ['hasSideEffects ' => false ],
730740 'array_column ' => ['hasSideEffects ' => false ],
733743 'array_diff ' => ['hasSideEffects ' => false ],
734744 'array_diff_assoc ' => ['hasSideEffects ' => false ],
735745 'array_diff_key ' => ['hasSideEffects ' => false ],
736- 'array_diff_uassoc ' => ['hasSideEffects ' => false ],
737- 'array_diff_ukey ' => ['hasSideEffects ' => false ],
746+ 'array_diff_uassoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' key_compare_func ' => true ] ],
747+ 'array_diff_ukey ' => ['pureUnlessCallableIsImpureParameters ' => [ ' key_comp_func ' => true ] ],
738748 'array_fill ' => ['hasSideEffects ' => false ],
739749 'array_fill_keys ' => ['hasSideEffects ' => false ],
750+ 'array_filter ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
751+ 'array_find ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
752+ 'array_find_key ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
740753 'array_first ' => ['hasSideEffects ' => false ],
741754 'array_flip ' => ['hasSideEffects ' => false ],
742755 'array_intersect ' => ['hasSideEffects ' => false ],
743756 'array_intersect_assoc ' => ['hasSideEffects ' => false ],
744757 'array_intersect_key ' => ['hasSideEffects ' => false ],
745- 'array_intersect_uassoc ' => ['hasSideEffects ' => false ],
746- 'array_intersect_ukey ' => ['hasSideEffects ' => false ],
758+ 'array_intersect_uassoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' key_compare_func ' => true ] ],
759+ 'array_intersect_ukey ' => ['pureUnlessCallableIsImpureParameters ' => [ ' key_compare_func ' => true ] ],
747760 'array_is_list ' => ['hasSideEffects ' => false ],
748761 'array_key_exists ' => ['hasSideEffects ' => false ],
749762 'array_key_first ' => ['hasSideEffects ' => false ],
750763 'array_key_last ' => ['hasSideEffects ' => false ],
751764 'array_keys ' => ['hasSideEffects ' => false ],
752765 'array_last ' => ['hasSideEffects ' => false ],
766+ 'array_map ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
753767 'array_merge ' => ['hasSideEffects ' => false ],
754768 'array_merge_recursive ' => ['hasSideEffects ' => false ],
755769 'array_pad ' => ['hasSideEffects ' => false ],
756770 'array_pop ' => ['hasSideEffects ' => true ],
757771 'array_product ' => ['hasSideEffects ' => false ],
758772 'array_push ' => ['hasSideEffects ' => true ],
759773 'array_rand ' => ['hasSideEffects ' => false ],
774+ 'array_reduce ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
760775 'array_replace ' => ['hasSideEffects ' => false ],
761776 'array_replace_recursive ' => ['hasSideEffects ' => false ],
762777 'array_reverse ' => ['hasSideEffects ' => false ],
763778 'array_search ' => ['hasSideEffects ' => false ],
764779 'array_shift ' => ['hasSideEffects ' => true ],
765780 'array_slice ' => ['hasSideEffects ' => false ],
766781 'array_sum ' => ['hasSideEffects ' => false ],
767- 'array_udiff ' => ['hasSideEffects ' => false ],
768- 'array_udiff_assoc ' => ['hasSideEffects ' => false ],
769- 'array_udiff_uassoc ' => ['hasSideEffects ' => false ],
770- 'array_uintersect ' => ['hasSideEffects ' => false ],
771- 'array_uintersect_assoc ' => ['hasSideEffects ' => false ],
772- 'array_uintersect_uassoc ' => ['hasSideEffects ' => false ],
782+ 'array_udiff ' => ['pureUnlessCallableIsImpureParameters ' => [ ' data_comp_func ' => true ] ],
783+ 'array_udiff_assoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' key_comp_func ' => true ] ],
784+ 'array_udiff_uassoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' data_comp_func ' => true , ' key_comp_func ' => true ] ],
785+ 'array_uintersect ' => ['pureUnlessCallableIsImpureParameters ' => [ ' data_compare_func ' => true ] ],
786+ 'array_uintersect_assoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' data_compare_func ' => true ] ],
787+ 'array_uintersect_uassoc ' => ['pureUnlessCallableIsImpureParameters ' => [ ' data_compare_func ' => true , ' key_compare_func ' => true ] ],
773788 'array_unique ' => ['hasSideEffects ' => false ],
774789 'array_unshift ' => ['hasSideEffects ' => true ],
775790 'array_values ' => ['hasSideEffects ' => false ],
803818 'bzerror ' => ['hasSideEffects ' => false ],
804819 'bzerrstr ' => ['hasSideEffects ' => false ],
805820 'bzopen ' => ['hasSideEffects ' => false ],
821+ 'call_user_func ' => ['pureUnlessCallableIsImpureParameters ' => ['function ' => true ]],
822+ 'call_user_func_array ' => ['pureUnlessCallableIsImpureParameters ' => ['function ' => true ]],
806823 'ceil ' => ['hasSideEffects ' => false ],
807824 'checkdate ' => ['hasSideEffects ' => false ],
808825 'checkdnsrr ' => ['hasSideEffects ' => false ],
954971 'fmod ' => ['hasSideEffects ' => false ],
955972 'fnmatch ' => ['hasSideEffects ' => true ],
956973 'fopen ' => ['hasSideEffects ' => true ],
974+ 'forward_static_call ' => ['pureUnlessCallableIsImpureParameters ' => ['function ' => true ]],
975+ 'forward_static_call_array ' => ['pureUnlessCallableIsImpureParameters ' => ['function ' => true ]],
957976 'fpassthru ' => ['hasSideEffects ' => true ],
958977 'fputcsv ' => ['hasSideEffects ' => true ],
959978 'fputs ' => ['hasSideEffects ' => true ],
16161635 'preg_last_error ' => ['hasSideEffects ' => true ],
16171636 'preg_last_error_msg ' => ['hasSideEffects ' => true ],
16181637 'preg_quote ' => ['hasSideEffects ' => false ],
1638+ 'preg_replace_callback ' => ['pureUnlessCallableIsImpureParameters ' => ['callback ' => true ]],
16191639 'preg_split ' => ['hasSideEffects ' => false ],
16201640 'property_exists ' => ['hasSideEffects ' => false ],
16211641 'quoted_printable_decode ' => ['hasSideEffects ' => false ],
17571777 'zlib_encode ' => ['hasSideEffects ' => false ],
17581778 'zlib_get_coding_type ' => ['hasSideEffects ' => false ],
17591779
1760- ];
1780+ ];
0 commit comments